FindPeriods

導入

v1.5

カテゴリ

animmixer

詳細

アニメートされるパラメータの期間を検出します。 最初のアルゴリズムを選択すると、入力オブジェクトの全体的な向きについて 1 つの期間が計算されます。 計算された期間は、開始時間での向きと同じ全体の向きを取得できるよう、入力オブジェクトに適用される最短オフセットに対応します。 この場合、入力オブジェクトは、FindPeriods が機能する回転でアニメートされる必要があります。

2 番目のアルゴリズムを選択すると、各入力オブジェクトごとに 1 つの期間が計算されます。 計算された各期間は、開始時間と同じ値になるよう、各入力オブジェクトに適用される最短オフセットに対応します。 この場合、入力オブジェクトは、FindPeriods が機能する、アニメートされたパラメータである必要があります。

このコマンドを使用するには、期間を検出するオブジェクト/アニメートされたパラメータを選択する必要があります。 これらのオブジェクトのアニメーションは、期間を計算するために、開始フレームと終了フレームの間で分析されます。

スクリプト構文

oReturn = FindPeriods( InputObjs, [Algorithm], StartFrame, EndFrame, Minimum Period Length );

戻り値

アニメートされるパラメータの期間を戻します。 最短の長さおよびアニメーションの長さによって定義された範囲内(終了フレームから開始フレームまで)に期間がない場合、FindPeriods は 0 を戻します。

パラメータ

パラメータ タイプ 詳細
InputObjs 文字列 サイクルの検出に使用するオブジェクト

デフォルト値:現在選択されているオブジェクト

Algorithm Long アルゴリズムを選択します。

デフォルト値: 1

指定可能な値:

説明:

0 回転のみについて機能します。
1 任意のアニメートされたパラメータについて機能します。
StartFrame ダブル 期間が開始されるべきフレーム

デフォルト値: 0

EndFrame ダブル 期間を求めるための、フレームの上限

デフォルト値: 0

Minimum Period Length Long 検出される期間の最小値(一般的な推定値)

デフォルト値: 1

VBScript の例

' 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"