FindPeriods

導入

v1.5

詳細

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

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

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

スクリプト構文

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

戻り値

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

パラメータ

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

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

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

デフォルト値: 1

指定可能な値:

説明:

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

デフォルト値: 0

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

デフォルト値: 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"