Houdini 20.0 Solaris

LOPs入門チュートリアル 5 FX部署編: FXレイアウト

前回作成したショットレイアウトを使って、FXエレメントを作成して、一部の静的なエレメントを置換します。これは、プロダクションパイプラインのステージの1つである FX の小規模版です。

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

      Method

      Deactivate

      Prune Unselected

      On

  • 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*

    Method

    Deactivate

  • この Prune LOPExtract 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

    Traversal

    Components

  • このLOPが/SceneKind を編集しないように、 SOP Modify LOPImport from SOPs タブに進みます:

    Kind Authoring

    None

    • このようにすることで、Kindは変わらず、シーン階層が壊れません。

  • SOP Modify LOPをダブルクリックして、中に入ります。これで、LOPではなくSOPで作業できるようになりました。

Note

この場合だと、嬉しいことにUSD Primsに対して直接処理をすることができるので、少し動かしてみましょう。 もっと高尚な処理を必要とする操作がしたい場合で(例えば、事前粉砕してRBDシミュレーションをするといったこと)、ネイティブのHoudiniポリゴンで作業する必要があるのであれば、Unpack USD SOPを接続して、Traversalパラメータを“Components”にします。

Note

このようにセットアップすると、すべての瓶が1瓶として微震するようになります。 それらの瓶を個々に微震させたいのであれば、Unpack SOPを挿入して、 Iterations2に設定します。 これによって、そのUSDが2段階でアンパックされて、各瓶/蓋がそれぞれ単一パックプリミティブで表現されるようになります。 Iterations3に変更すると、瓶と蓋が個々に微震するようになることが分かります。 (他にもUnpack USD SOPを使用することで同じ事ができます。) Iterations4に変更すると、瓶と蓋の個々のポイントが微震するようになることが分かります。 ジオメトリの種類を知りたい時は、そのSOP上でクリックしてください。

シーンを再生すると、瓶が小刻みに移動しているのがわかると思います。Uキーを押して/stageに戻ります。

  • Configure Layer LOPを接続します。瓶のポイントトランスフォームを含んだUSDファイルの格納先をLOPに伝えたいです。

    Save Path

    $HIP/tutorials/shot004-fx_v001.usda

    Flatten Input

    Flatten Input Layers

  • Sublayer LOPを作成し、下図のように接続します。

    Sublayer Type

    Sublayer 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 LOPUSD ROP LOPを接続します。

    Start/End/Inc

    1,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形式でファイルを保存してください。

Solaris

USD

ジオメトリ

  • SOP Geometry I/O

    HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

  • Component Builder

    Component Builderツールは、マテリアル、バリアント、ペイロード、レイヤーをサポートし、SOPからUSDモデルを作成するためのネットワークスニペットを配置します。

レイアウト

  • Editノード

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Layoutノード

    インスタンス化されたUSDアセットをシーンに取り込むツールが備わっています。個々にコンポーネントを配置したり、カスタマイズ可能なブラシを使って色々な方法でコンポーネントをペイント/スキャッターしたり、既存のインスタンスを編集することができます。

  • カスタムレイアウトブラシ

    Layout LOPの挙動をカスタマイズして利用可能なレイアウトブラシデジタルアセットの作成方法。

ルック開発

  • MaterialX

    HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

  • UDIMパス

    テクスチャ空間の異なるタイルを、それぞれ別の解像度で、異なるテクスチャファイルにエンコードすることができます。その後、kaiju.exrといったテクスチャファイル名を指定すると、Houdiniがロード時にそのトークンを特定のタイルアドレスに置き換えてくれます。

  • シェーダ変換フレームワーク

    シェーダノードのUSDプリミティブへの変換を含む、Solarisシェーディングフレームについて説明しています。

Karmaレンダリング

チュートリアル