すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

Tree GeneratorをKineFXで動かす vol.2 USD Skel

vol1の結果をUSD Skelに書き出す。

はじめに

USD Skel化する場合、マテリアルが複数割り当てられない?ようなので今回は幹枝と葉は別USDで書き出している。

この部分は今後も調べないとダメそう。

hip

Houdini 19.5.303

tree_gd2.hiplc - Google ドライブ

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に変更する。

そのほか、インスタンスごとにアニメーションをずらすなどの処理は過去記事等を参考。

godofsuama.hatenablog.com