v1.5
animmixer
アニメートされるパラメータの期間を検出します。 最初のアルゴリズムを選択すると、入力オブジェクトの全体的な向きについて 1
つの期間が計算されます。
計算された期間は、開始時間での向きと同じ全体の向きを取得できるよう、入力オブジェクトに適用される最短オフセットに対応します。
この場合、入力オブジェクトは、FindPeriods が機能する回転でアニメートされる必要があります。
2 番目のアルゴリズムを選択すると、各入力オブジェクトごとに 1 つの期間が計算されます。
計算された各期間は、開始時間と同じ値になるよう、各入力オブジェクトに適用される最短オフセットに対応します。
この場合、入力オブジェクトは、FindPeriods が機能する、アニメートされたパラメータである必要があります。
このコマンドを使用するには、期間を検出するオブジェクト/アニメートされたパラメータを選択する必要があります。
これらのオブジェクトのアニメーションは、期間を計算するために、開始フレームと終了フレームの間で分析されます。
oReturn = FindPeriods( InputObjs, [Algorithm], StartFrame, EndFrame, Minimum Period Length ); |
アニメートされるパラメータの期間を戻します。 最短の長さおよびアニメーションの長さによって定義された範囲内(終了フレームから開始フレームまで)に期間がない場合、FindPeriods は 0 を戻します。
パラメータ | タイプ | 詳細 | ||||||
---|---|---|---|---|---|---|---|---|
InputObjs | 文字列 | サイクルの検出に使用するオブジェクト。
デフォルト値:現在選択されているオブジェクト |
||||||
Algorithm | Long | アルゴリズムを選択します。
デフォルト値: 1
|
||||||
StartFrame | ダブル | 期間が開始されるべきフレーム
デフォルト値: 0 |
||||||
EndFrame | ダブル | 期間を求めるための、フレームの上限
デフォルト値: 0 |
||||||
Minimum Period Length | Long | 検出される期間の最小値(一般的な推定値)
デフォルト値: 1 |
' This example creates a simple skeleton and demonstrates using FindPeriods to ' detect cycles in its animation. In the first case, we have a simple rotation ' animation. In the second, we show cycle detection on an arbitrary parameter ' (we chose bone length). NewScene , False ' Create an object for us to use for this example. Create2DSkeleton 0, 0, 0, 0, 0, 3, 0, 1, 0, 0, oBone ' ' 1) Create an animation in which a cycle occurs for the rotation of a bone. ' SaveKey oBone & "/kine.local.rotx,kine.local.roty,kine.local.rotz", 1 Rotate oBone, 0, 0, 145, siRelative, siLocal, siObj, siXYZ SaveKey oBone & "/kine.local.rotx,kine.local.roty,kine.local.rotz", 10 Rotate oBone, 0, 0, 215, siRelative, siLocal, siObj, siXYZ SaveKey oBone & "/kine.local.rotx,kine.local.roty,kine.local.rotz", 23 Rotate oBone, 0, 0, 50, siRelative, siLocal, siObj, siXYZ SaveKey oBone & "/kine.local.rotx,kine.local.roty,kine.local.rotz", 30 ' Store the animation as an action and instantiate a clip in the mixer. set oAction = StoreAction( , oBone & "/kine.local.rotx,kine.local.roty,kine.local.rotz", _ 2, "BoneRot", True, 1, 30) set oClip = AddClip( "Scene_Root", oAction, , , 30 ) ' Find the period of bone rotation (algorithm 0) from start of clip. clipStart = GetValue( oClip & ".actionclip.timectrl.resin" ) clipEnd = GetValue( oClip & ".actionclip.timectrl.resout" ) Periods = FindPeriods( oBone, 0, clipStart, clipEnd, 1 ) LogMessage "Period for bone rotation: " & Periods(0) & " frames" ' ' 2) Animate the bone length to be periodic. ' SaveKey oBone & ".bone.length", 1, 3 SaveKey oBone & ".bone.length", 5, 4 SaveKey oBone & ".bone.length", 9, 3 SaveKey oBone & ".bone.length", 13, 4 SaveKey oBone & ".bone.length", 17, 3 SaveKey oBone & ".bone.length", 21, 4 SaveKey oBone & ".bone.length", 25, 3 ' Store the animation as an action and instantiate a clip in the mixer. set oAction = StoreAction( , oBone & ".bone.length", 2, "BoneLength", True, 1, 24) set oClip = AddClip( "Scene_Root", oAction, , , 1 ) ' Find the period of bone length (algorithm 1) from start of clip. clipStart = GetValue( oClip & ".actionclip.timectrl.resin" ) clipEnd = GetValue( oClip & ".actionclip.timectrl.resout" ) Periods = FindPeriods("bone.bone.length", 1, clipStart, clipEnd, 1) LogMessage "Period for bone length: " & Periods(0) & " frames" ' Compute the number of cycles of the animation. NumPeriods = ((clipEnd - clipStart) / Periods(0)) LogMessage "Number of cycles: " & NumPeriods ' Running this script should log the following: ' --------------------------------------------- 'INFO : "Period for bone rotation: 22 frames" ' <bunch of logged commands, and then:> 'INFO : "Period for bone length: 8 frames" 'INFO : "Number of cycles: 3" |