USD 23.11から?アセットパスの記述やVariantの切り替えにExpressionが使えるようになった。
Houdiniでは20.5.xxx〜使用可能。(H20は23.08、H20.5は24.03)
これを利用するとすごく簡単なバージョン切り替えやショットの切り替えが実装できるのでそのやり方メモ。
例えば、各工程のバージョン管理、マルチショット時のショット番号の変更とかとか。アセットのバージョン管理にはあまり向いてない。
hip
stageExpression.hiplc - Google ドライブ
配布シーン解説
今回のはStringしか使っていないが、ifでの分岐等結構複雑なExpressionが記述できる。
詳しくは公式ドキュメントを。
USD Variable Expressions — Universal Scene Description 24.08 documentation
Asset
切り替えたいAssetをPig HeadとRubber Toyで用意。
これをASSET_VERで切り替えているが、切り替えをわかりやすくするために違うアセットにしている。
Layout
先程のアセットを読み込む。

この読み込み段階でASSET_VERを利用した記述にする。

\`"$HIP/asset/\${ASSET_VER}/asset.usda"\`
この${ASSET_VER}部分が実際のExpressionの記述になる。これはASSET_VERという変数でこの部分を制御するという意味合い。
通常のパス表記に追加して以下の処理がいる。
- 先頭に`" 末尾に"`
- 変数箇所の開始に\が必要
- 変数は${}で囲う
もちろん、Sublayerまでだとファイルパスが正しくないので何も読み込まれない。

Configure Layer、Configure StageにあるStage Variableの部分に該当の変数を追加することで変数が処理される。※Configure Layerが先でも可

これはStage Variable Expressionなので、データ的には一番最初に記述されるため。最初に記述されて全体に適応されるため、それぞれの工程で分けたい場合はそれぞれ違う変数名が望ましい。

変数名がかぶっている場合
こんな感じで左右ではそれぞれちゃんと動いているが、Mergeして1つのラインになった場合に正しく動かなくなる。

上記2つを同時に変更する
Layout工程のUSDを読み込んで、ASSET_VERとLO_VERの2つの変数を同時に変更する。このように変数がいくつあっても、Sublayerで重ねていても正しく変数としてアセットパス等に組み込まれていれば最下流で変更することができる。

Pythonを利用する場合
hou.lopモジュールに、stageVariableExpressionがあるのでそれを利用する。
