vol1の結果をUSD Skelに書き出す。
はじめに
USD Skel化する場合、マテリアルが複数割り当てられない?ようなので今回は幹枝と葉は別USDで書き出している。
この部分は今後も調べないとダメそう。
hip
Houdini 19.5.303
Agent化
Mesh
前回のCapture Proximityの結果の動いていないメッシュに何かしらのnameを作成する。これが書き出し後のメッシュの名前になる。
Skelton
Rig Stash Poseの第二出力、要はアニメーションしていない状態のKineFX RigをAgent From Rigノードにつなぐ。
この際にrest_transformアトリビュートが必要なので有無を確認しておくこと。
MeshとSkeltonを結合
Agent LayerノードにMeshとSkeltonの項目の結果をつなぐ。
Animation
KineFXの動かした後の状態をMotion Clipノードへつなぎ、必要尺等を設定する。
Agent LayerとMotion ClipをAgent Clipに接続する。
赤枠内を設定する。"test"になっている箇所は何でも良いので名前を入れること。
※Clip Timeが$Tになっていない場合、このノード選択状態でもアニメーションが表示されないので注意。
USD Export
MeshとSkelton
Agent LayerにUSD Exportを接続し、Configureタブを変更する。書き出しは1fのみ。
Relative Path Prefixは後でアニメーションUSDと同じにしておきたいので指定する。
AgentはCreate Instanced SkelRootsにする。これがインスタンスする際は効率いいらしい。
Animation
Agent ClipにUSD Exportを接続し、Configureタブを変更する。書き出しは必要なアニメーション範囲
AgentはCreate SkelAnimationsにする。これはアニメーションのみを書き出す。
LOP
Import
Referenceノードで書き出したメッシュとアニメーションを読み込んでつなぐ。
この際、Primitive Pathをどちらも同じものに変更しておかないとアニメーションが来ないので注意。
Bake Skinning
USD Skelそのままでも一応Instanceはできるが、どうも安定しなかったり数が増えると落ちやすくなる。さらにレンダリングも全然始まらなくなる。
Bake Skinningノードを挟むことで内部的にはジオメトリキャッシュ状態になって上記のエラーはほぼなくなる。
※ただし、この処理以降をUSDとして書き出す際にジオメトリキャッシュ分ファイルサイズが増える。 が、直接USDのジオメトリキャッシュにした場合が5.1GBだったのに対してBake Skinning後はインスタンス処理も入れて3.1GBだったのでそのまま同じファイルサイズにはならず、Bake Skinningのほうが軽かった。
Instance
MethodをInstancable Inheritにして継承する。
Bake Skinningを使用しない場合はMethodをInheritに変更する。
そのほか、インスタンスごとにアニメーションをずらすなどの処理は過去記事等を参考。