v1.5
animmixer
2 つの周期的なアニメーション クリップ間のブリッジを作成します。 2 つのクリップには重複部分があります。 [From]クリップは[To]クリップより前に開始されている必要があります。 [To]クリップは[From]クリップを終了する前に開始されている必要があります。 両クリップの期間は、一方のクリップからもう一方のクリップまでの時間と想定できます(例: クリップアウトからクリップインまでの時間)。
oReturn = AddBridgeTransition( [From], [To], [Name] ); |
トランジションを戻します。
| パラメータ | タイプ | 詳細 |
|---|---|---|
| From | 文字列 | クリップのトランジション元となるソース クリップ。
デフォルト値: 現在選択されている値。空の場合は、セッションを選択 |
| To | 文字列 | クリップのトランジション先となるターゲット クリップ。
デフォルト値: 現在選択されている値。空の場合は、セッションを選択 |
| Name | 文字列 | トランジション名。 現在は使用されていません。 |
' This example builds a couple of Actions, one which has
' the sphere moving slowly on a three-sided path, the other
' which has the sphere moving quickly on a four-sided path.
' It then uses a bridge transition to perform a correct
' transition between these two looped motions (which have
' different periods).
slowPeriod = 30 ' period of the slow looping Action
fastPeriod = 12 ' period of the fast looping Action
preFade = 60 ' approx time to cycle before starting transition
crossFade = 100 ' approx desired duration of transition
posParams = "/kine.local.posx,kine.local.posy,kine.local.posz"
' Create an object for our example.
set oObj = CreatePrim( "Sphere", "MeshSurface" )
' Make an Action with it moving slowly in a wide (three-sided) loop.
BuildLoop oObj, slowPeriod, 15, false
set oSlowSource = StoreAction( , oObj & posParams, 2, "Slow", True, _
0, slowPeriod - 1 )
' Make an Action with it moving quickly in a tight (four-sided) loop.
BuildLoop oObj, fastPeriod, 3, true
set oFastSource = StoreAction( , oObj & posParams, 2, "Fast", True, _
0, fastPeriod - 1 )
' Instantiate the Actions on the mixer -- cycled,
' overlapped and ready for the Bridge Transition.
set oSlowClip = AddClip( "Scene_Root", oSlowSource, , , 1 )
set oFastClip = AddClip( "Scene_Root", oFastSource, , , _
round( preFade / slowPeriod ) * slowPeriod + 1 )
overlapSlowCycles = round( ( crossFade + preFade - slowPeriod ) / slowPeriod )
SetValue oSlowClip & ".actionclip.timectrl.extrapaft_type", 2
SetValue oSlowClip & ".actionclip.timectrl.extrapaft_nbcycles", overlapSlowCycles
SetValue oFastClip & ".actionclip.timectrl.extrapaft_type", 2
SetValue oFastClip & ".actionclip.timectrl.extrapaft_nbcycles", _
round( overlapSlowCycles * slowPeriod / fastPeriod ) + 1
' Apply the Bridge Transition, which will match the
' frequency of the periodic motions. Compare it to
' a regular transition, where the motions tend to
' cancel each other out if they are at different frequencies.
AddBridgeTransition oSlowClip, oFastClip
' Set a suitable timeline start/end for playback of this example.
SetValue "PlayControl.In", 1
SetValue "PlayControl.Out", GetValue( oFastClip & ".actionclip.timectrl.resout" )
'==================================================
' Helper method to create the looping paths (three- or four-sided).
'==================================================
sub BuildLoop( in_oObj, in_period, in_size, in_bFourSided )
SetPositionKey in_oObj, 0, -0.5 * in_size, -0.5 * in_size, 0
if in_bFourSided then
SetPositionKey in_oObj, in_period / 4, 0.5 * in_size, -0.5 * in_size, 0
SetPositionKey in_oObj, in_period / 2, 0.5 * in_size, 0.5 * in_size, 0
SetPositionKey in_oObj, 3 * in_period / 4, -0.5 * in_size, 0.5 * in_size, 0
else
SetPositionKey in_oObj, in_period / 3, 0.5 * in_size, -0.5 * in_size, 0
SetPositionKey in_oObj, 2 * in_period / 3, 0, 0.5 * in_size, 0
end if
SetPositionKey in_oObj, in_period, -0.5 * in_size, -0.5 * in_size, 0
end sub
'==================================================
' Helper method to key an object somewhere at a given frame.
'==================================================
sub SetPositionKey( in_oObj, in_frame, in_posX, in_posY, in_posZ )
Translate in_oObj, in_posX, in_posY, in_posZ, siAbsolute, siParent, siObj, siXYZ
SaveKey in_oObj & posParams, in_frame
end sub
|