On this page |
はじめに ¶
まだ準備ができていない方は、必要なサポートファイルをダウンロードしてください。
このチュートリアルでは、“FX”部署の役を演じましょう。 ショット レイアウト のUSDファイルのどれかを受け取って、そこから必要なエレメントを取り出し、(シミュレーション済みの)RBDシミュレーションを介してアニメーションを作成してから、FX部署とさらに下流のパイプラインのどちらでも取り込めるようにするために新しいUSDファイルを書き出します。
このチュートリアルでは、レイアウト部署とFX部署の間に何も部署がないものと仮定しますが、典型的には少なくともアニメーション部署が存在します。 USDが凄いのは、各部署が独立して作業を進めて、ショットへの寄与を保存し、それらの寄与をまとめてレイヤー化して、最終ショットを作成することができることです。 そのため、ライティング部署は、レイアウトのUSDファイル、アニメーションのUSDファイル、FXのUSDファイルを読み込めば、その合成された結果を確認することができます。 ライティング部署は、ライティングのUSDファイルを作成して、その合成結果を最終ショットとしてレンダリングします。 ライティング部署は、レイヤーを“ミュート”することで、そのレイヤーの寄与を無効にしたショットをいつでも確認することができます(例えば、ライティング部署でライティングを調整している間は、重いFXレイヤーをミュートにすることができます)。
では、始めましょう。作業の度にlops_tutorial_5.1.hip
のような名前でファイルを頻繁に保存することを忘れないでください。
開始 ¶
-
新規でHoudiniを起動します。
-
Solaris デスクトップに切り替えます。
Scene Graph Tree がパネルのどれかになっていることを確認します。
-
ネットワークエディタで、
/stage
に移動します。
レイアウトのUSDを読み込む ¶
まず最初にすべき事は、レイアウト部署からのUSDファイルを読み込む事です。 USDファイルを読み込む2通りの方法を見てみましょう。 これから説明するSublayer(サブレイヤー)、Referene(リファレンス)の概念については、USDの基本のページの“サブレイヤー、リファレンス”のセクションを参照してください。
-
メソッド1: Sublayer LOPを作成します。
-
前回のチュートリアルで保存したショットのUSDファイルのどれかを読み込みます。例:
$HIP/tutorials/shot004_layout_v001.usd
-
-
メソッド2: Reference LOPを作成します。
-
前回のチュートリアルで保存したショットのUSDファイルのどれかを読み込みます。例:
$HIP/tutorials/shot004_layout_v001.usd
-
名前を
Scene
に変更します。 Primitive Path パラメータ内の/$OS
エクスプレッションが自動的にそのPrimitive Pathを/Scene
に変換していることに気づいてください。-
Scene Graph Tree では、すべてが
/Scene
下に取り込まれていて、それ以外の場所には何もないことに気づいてください。これは、USDステージを適切に整理する上で重要な意味を示しています。このReference LOPと Sublayer LOP を比較すると、Sublayer LOPは非アクティブなレイアウトのライティング(Reference LOPでは、これは/Scene
下にも存在していません)も含んですべてを取り込んでいることがわかります。
-
-
-
上記の2つのメソッド間の切り替え: Switch LOP LOPを作成し、この Sublayer LOPと Reference LOPをそのSwitch LOPに接続します。
-
Select Input スライダを0から1に動かして、次に0に戻してみると、テクスチャなども含めてシーン全体が切り替わるはずです。この操作では、 Sublayer LOP と Reference LOPはどちらとも同等に上手く動作します。
-
興味のある領域を抽出する ¶
これから、興味のあるシーンの一部を抽出したいです。
-
Switch LOPにPrune LOPを接続します。
-
Scene Graph Tree から、
/Scene/ShopBack/Shelves/Contents
のパスを“Primitive Pattern”パラメータのフィールド上にドラッグアンドドロップします。Primitive Pattern/Scene/ShopBack/Shelves/Contents
MethodDeactivate
Prune UnselectedOn
-
-
Prune LOPにLayer Break LOPを接続します。
Layer Break(レイヤー分離) は、瓶に対してアニメーションを付けていくための起点となり、これで静的な瓶を置き換えていきます。 Layer Break(レイヤー分離)は、上流のシーン記述がレイヤーに書き出されないように阻止するので、ここから操作したすべての事がFXレイヤーの一部になります。 これは非常に重要な話題なので、この話題の詳細は、LOPの挙動の Layer Breaks(レイヤー分離) セクションを参照してください。
FXを適用する ¶
では、棚にFXを適用する準備ができました。 RBDフルシミュレーションの代わりに、速度重視で非常に単純なエフェクトを行ないたいと思います。 さらに、シミュレーションを高速化するために、重いジオメトリが詰まったHerbJarsを削除しましょう。
Tip
実際のRBDシミュレーションを使った高尚なセットアップが見たいのであれば、ダウロードしたファイルの中のFXLayerRBDsetup.hip
ファイルを確認してください。
-
Prune LOP を接続します。この処理を高速化するために、瓶からハーブを削除したいです。Primitive Patternに以下のパターンを設定します:
Primitive Pattern/Scene/ShopBack/Shelves/Contents/Prototypes/Stuff/HerbJarsAsset*
MethodDeactivate
-
この Prune LOP にExtract Instances LOPを接続します。
Instances/Scene/ShopBack/Shelves/Contents[*]
Primitive Path/Scene/ShopBack/Shelves/RBD
このノードは、 インスタンス (通常ではレンダリングしかできません)を、アニメーションさせることができるUSD Primsに変換します。
Note
目的が瓶の位置を単にずらしたいだけであれば、このエフェクトを作成するにはModify Point Instances LOPを使用したほうが効率的です。 それよりも高度な処理をシミュレーション、つまりRBDシミュレーションをしたいので、ここでは Extract Instances LOP を使用します。
Typeパラメータで“Point Instancer”を指定すると、通常のパターンマッチングが使用されません。
この/Scene/ShopBack/Shelves/Contents
の部分は、 Point Instancer Primを特定します。
大括弧の中の部分は、インスタンスインデックスを選択するためのパターンです。
これは、SOPでポイント/プリミティブのグループを指定する際に使用する数値パターンと同様です。
つまり、[0-19]
は最初の20個のインスタンスを取得します。
この場合だと、[*]
は、どのインデックスにも合致します(パターン選択の詳細は、プリミティブマッチングパターンのページを参照してください)。
これで抽出されたPrimsを/Scene/ShopBack/Shelves/RBD
のパスのレイヤーに格納しています。
-
この Extract Instances LOPにSOP Modify LOPを接続します。
Primitives/Scene/ShopBack/Shelves/RBD
TraversalComponents
-
このLOPが
/Scene
の Kind を編集しないように、 SOP Modify LOP の Import from SOPs タブに進みます:Kind AuthoringNone
-
このようにすることで、Kindは変わらず、シーン階層が壊れません。
-
-
SOP Modify LOPをダブルクリックして、中に入ります。これで、LOPではなくSOPで作業できるようになりました。
Note
この場合だと、嬉しいことにUSD Primsに対して直接処理をすることができるので、少し動かしてみましょう。 もっと高尚な処理を必要とする操作がしたい場合で(例えば、事前粉砕してRBDシミュレーションをするといったこと)、ネイティブのHoudiniポリゴンで作業する必要があるのであれば、Unpack USD SOPを接続して、Traversalパラメータを“Components”にします。
-
Geometry from LOPs Switch 1 SOPとOutput SOPの間にPoint Jitter SOPを挿入します。
Scale.025
Seed$FF
Note
このようにセットアップすると、すべての瓶が1瓶として微震するようになります。
それらの瓶を個々に微震させたいのであれば、Unpack SOPを挿入して、 Iterations を2
に設定します。
これによって、そのUSDが2段階でアンパックされて、各瓶/蓋がそれぞれ単一パックプリミティブで表現されるようになります。
Iterations を3
に変更すると、瓶と蓋が個々に微震するようになることが分かります。
(他にもUnpack USD SOPを使用することで同じ事ができます。)
Iterations を4
に変更すると、瓶と蓋の個々のポイントが微震するようになることが分かります。
ジオメトリの種類を知りたい時は、そのSOP上でクリックしてください。
シーンを再生すると、瓶が小刻みに移動しているのがわかると思います。Uキーを押して/stage
に戻ります。
-
Configure Layer LOPを接続します。瓶のポイントトランスフォームを含んだUSDファイルの格納先をLOPに伝えたいです。
Save Path$HIP/tutorials/shot004-fx_v001.usda
Flatten InputFlatten Input Layers
-
Sublayer LOPを作成し、下図のように接続します。
Sublayer TypeSublayer Inputs
すると、ハーブが入った瓶のHerbJarsAssetが消え、残りの瓶が小刻みに移動しているはずです。 レイアウトレイヤー上にFXレイヤーをレイヤー化できました。 最後に追加した Sublayer LOPを無効にして、元のシーンを表示してみましょう。
Tip
SOP Modify LOP上で ▸ LOP Actions ▸ Inspect Active Layer を選択すると、瓶のトランスフォームのみが記録されていて、非常に軽量な操作が行なわれていることがわかります。
さらに、 Scene Graph Layers パネルの“Mute in Viewer”項目で(何枚もの)レイヤーをミュートにすることができます。 その“Mute in Viewer”項目にチェックボックスがあれば、そのレイヤーをミュートにすることができます。 この方法では、ディスクから読み込まれているレイヤーのみをミュートにすることができます。 LOPネットワークで作成されたレイヤーの場合は、ノードを無効または接続解除によって、もっと簡単で効率的に非アクティブにすることができます。
USDファイルへの書き出し ¶
他の部署に渡せるようにUSDファイル(s)へ書き出す準備ができました。
今回は、FXトランスフォームを$HIP/tutorials/shot004-fx_v001.usda
へ書き出し( Configure Layer LOP で、このトランスフォームをその場所に保存するように指示しました)、
レイアウト と FXトランスフォームを$HIP/tutorials/shot004-fx-and-layout_v001.usda
へ書き出します。
これはあまり良いファイル命名規則ではないのですが、後で比較しやすくするために、このような名前でファイルを格納しているだけであることに注意してください。
また、パイプラインによっては、他の部署がレイアウトとFXが入ったUSDを受け取ったり、別の方法でレイアウト、FX、(他の部署のレイヤー)をサブレイヤー化することもあります。
-
Sublayer LOP にUSD ROP LOPを接続します。
Start/End/Inc1,100,1
Output File$HIP/tutorials/shot004-fx-and-layout_v001.usda
ネットワークの上部にあるSwitch LOPのSelect Inputパラメータを0(1番目の入力)に設定してください。
-
Save to Disk
を押して、アニメーションをディスクに保存します。
Note
おそらく次のような警告が出るかもしれません: Warning: Some layers were stripped during flattening due to a Layer Break.
(警告: Layer Breakが原因で平坦化時に何枚かのレイヤーが削除されました。)
これは正常なので無視して構いません。
ここまでの作業を確認する ¶
では、テキストエディタを使って、これらのディスク上のファイルを開いて調べてみると、本当に 疎ら で、パイプラインを介してデータを転送するのに必要最低限な情報のみが含まれていることがわかります。
Sublayer LOP を使って$HIP/tutorials/shot004-fx-and-layout_v001.usda
ファイルをシーンに読み込んでください。
シーン内の瓶が小刻みに移動しているはずです。
ネットワークの上部にあるSwitch LOPでSelect Inputパラメータを1(2番目の入力)に設定して、USDファイルを保存し直すと、この Sublayer LOP はそれと同じ結果が得られるはずです。
次のチュートリアルでは、FXのみのUSDを使って、ライティング部署向けにレイアウトのみのUSDファイル上にそのUSDをレイヤー化していきます。
Note
USDファイルがバイナリ形式でテキストエディタで読めなかった場合は、ファイル拡張子をバイナリ形式の.usd
ではなくて.usda
にして、ASCII形式でファイルを保存してください。