この記事はHoudini Apprenticeアドベントカレンダー2022 9日目の記事です。
Component Builderからアニメーションを持ったUSDを出力する方法をご紹介します。
シーンは一番下に添付しました。FBXはついていないため、何かしらアニメーションを持ったFBXをインポートしてください。
USDのためにHoudiniを始める方もいるのではないでしょうか?
USDアセットを作成するためにComponent Builderを使うと素早く高機能なUSDアセットを生成できるのでとても便利です。Component Builderはスタティックアセットの出力することを目的とされており、アニメーションはその後レイヤーとして重ねていきます。
でも、場合によってはアニメーションを持ったままUSDとして出力したい場合もあるかもしれません。
Component Builderを作成すると下記が作成されます。
Component Geometry内部でFBXを読み込んでいます。
Component Geometryの外に出て、タイムスライダをドラッグすると確かにここではアニメーションを確認することができます。
Component Outputを使用してUSDを出力してみましょう。
Component OutputノードのCachingセクションで必要なUSDを設定し出力することができます。
Save to Diskをクリックすると、すぐに出力が終わるため「??」となります。
案の定、Referenceに取得したUSDを読み込んでもアニメーションが再生されません。
そこで、Component GeometryとComponent Materialの間にCacheを追加します。
※少しキャッシュする時間があります。
そして、Component GeometryノードのAttributesセクションを開き、Author Time SamplesをIf SOP is Time Dependentに変更してください。
これでアトリビュートの値をデフォルト値としてだけでなく、時間依存にすることができます。
更にCacheノードのCache BehaviourをAlways Cache All Framesに変更し、Start/End/Incで下記のように変更します。
$RFSTARTはプレイバーに表示する最初のフレームとなるフレーム番号。$RFENDはプレイバーに表示する最終フレームです。
ROP がレンダリングを開始すると、コンテキストオプション @ropstart と @ropend をそれ自身の Valid Frame Range に一致するように設定します。これにより、LOP が 1 つのフレームのためにタイムライン全体をキャッシュすることを防ぐことができます。通常、素晴らしいアイデアです。しかし、Component Output 内の ROP は現在のフレームのみをレンダリングするように設定されているため、Cache LOP の動作が予期せず(そしてエンドユーザーには多少見えないように)変更されます。
ほとんどの場合、Component Builder で表示したいのはスタティックアセットで、アニメーションは通常その後にレイヤーされます。キープアライブアニメーションなどをベースアセットと一緒に保存したい場合は、Cache LOP の Start/End/Inc パラメータのチャンネルを削除し、フレーム範囲を明示的に設定するか、$RFSTART/$RFEND/$RFINC を使用すれば、簡単に解決します。
設定を変更後、Component Outputで再度Save to Diskをクリックし、USDを保存します。
先ほどより少し時間がかかり、うまくいっている気がします!
Referenceで先ほどロードしたUSDをReloadすると
今度はアニメーションを持った状態で出力することができました!