Array化
それは、いままででも紹介している高速化の為の Array(配列)を使った方法になります。(今回、もっとも単純な方法で・・・)
すると2段階設定の ICE になります。
まずはデータをArray(配列)化 し、その後でオブジェクト個別毎にデータを引きだして位置データとする、という仕組みです。

元のアニメーションがたくさんのオブジェクトがあることを想定して GetDataをGroup(Groupという名前)から得ます。
Softimageは1からフレームが始まるので = 1 にしました。
Array化した値の入る箱の名前は、良く使う BoneTransforms とし、その前計算として 代入値を PreBoneTransforms としました。
個別のオブジェクトに付けるICEはコンパウンド化(BoneTransform2GL)しておきます。
そして、このコンパウンド BoneTransform2GL の中身は
となっています。
最初のGetDataはReferenceとしてつないでおいて、
コンパウンドをダブルクリックした時のPPG(プロパティーページ;設定画面)で、
ICEのついているPointcloudを[ピック]出来る画面にしておきます。
Indexの番号は Group から得たオブジェクトの上からの順番で、これは 0 から始まります。
今は 1個 しか入ってないので 0 です。
BoneTransform2GL というコンパウンドをたくさんのオブジェクトに一気に接続してしまうにはスクリプトが便利です。
BoneTransform2GL コンパウンド は事前に ユーザーのワークグループにでも 書き出し を行っておきます。
そして、こう書いたスクリプトを用意します。(違う名前のコンパウンドを同様に接続したい場合は、コンパウンド名前部分を変えるだけです)
sub BoneTransforms2GL( oObj )
set compound = Dictionary.GetObject( oObj & ".null.ICETree.BoneTransforms2GL", false )
if typename(compound) = "Nothing" then
set iceOp = ApplyOp("ICETree", oObj, siNode, null, null, 0)
AddICECompoundNode "BoneTransforms2GL", iceOp
ConnectICENodes iceOp & ".port1", iceOp & ".BoneTransforms2GL.Execute"
end if
end sub
sub BoneTransforms2GLData( obj )
if typename( obj ) <> "Group" then
logmessage "You must select Group."
exit sub
end if
set oGrp = obj
for i=0 to oGrp.Members.Count - 1
set oObj = oGrp.Members.Item( i )
BoneTransforms2GL oObj
next
end sub
sub BoneTransforms2GLData( )
for i=0 to Selection.Count - 1
set oObj = Selection.Item( i )
BoneTransforms2GL oObj
next
end sub
BoneTransforms2GLData
|
を ツールバー のボタン (例; BoneTransform2GL )にしておけば、いつでも使えます。

使い方は ICETree を付けたい複数のポリゴンオブジェクトを選択した状態で ボタン (例;BoneTransforms2GL) を押します。
Pointcloud 名 と おのおののIndex番号を指定してあげます (例;ココでは1つなので 0 )。
これでどんなにたくさんあっても、コマ抜きが 2コマ でも 3コマ でも自由にアニメーションをつけて
設定した数のコマ抜き動きなってくれます。
では、この方法で もっと複雑な動きのもので、コマ落ちアニメーションが出来るのか実践してみましょう。
|