Houdini 20.5 SolarisとKarma

Houdini Procedural: RBD

レンダリング時に変形ジオメトリを作成します。

On this page

Houdini Procedural: RBD LOPは、RBD Destruction LOPの代替となるノードで、インポートプロセスを完全に制御することができます。 そのRBD Destruction LOPをハイレベルなツールとして引き続き使用したい場合は、それも可能です。 そのRBD Destruction LOPの Output Type パラメータを Procedural に設定すれば、プロシージャルへのアクセスも可能です。 しかし、そのRBD Destruction LOPの他の Output Type モード( Deforming MeshDynamic Skinning など)の代替としては、この新しいプロシージャルを推奨しています。

以前までは、大規模なシーンでユーザはしばしば問題を抱えていました。 例えば、大量の粉砕ピースがそれに見合った数のプリミティブを生成してしまうといった問題がありました。 通常では、これはパフォーマンスおよび命名の問題を引き起こし、そのシーンが(とてつもなく)たくさんのディスク容量を必要としました。

このHoudini Procedural: RBDは、 RBD/シミュレーションからのワークフロー 且つ USD側のワークフローをまとめ上げて、上述の問題を解決する独立したツールです。 このツールを使用すれば、USD ステージ は管理可能な状態のままになり、Scene Graph Treeには元のプリミティブのみが表示されます。

粉砕されたジオメトリをシミュレーションする際、RBDソルバは、それらの粉砕ピースのトランスフォーム情報を表現したポイントも作成します。 リジッドボディ毎に1個のシミュレーションポイントがあります。 完全にアニメーションするジオメトリをキャッシュ化するのではなくて、ポイントデータのみを保存します。 このHoudini Procedural: RBD LOPは、粉砕ピースの静止状態をシミュレーションポイントに繋げて、レンダリング時に元のトランスフォームを復元します。

SOPのセットアップ

SOPワークフローを説明するために、基本的なRBDシミュレーションセットアップをざくっり見ていきましょう。 ここでは、事前に粉砕された塔が地面に倒れて崩壊します。

  • SOPセットアップは、高解像度オブジェクトを粉砕ピースに分解するRBD Material Fracture SOPで構成します。 このノードは、粉砕ピースが生成される位置を決めるポイントを生成します。 別の方法だと、既存のポイントをこのノードの 4番目 の入力に接続することができます。

    Note

    シミュレーションポイントと粉砕ポイントは同じ ではありません !

  • オプションの RBD Configure SOPは、入力ジオメトリをパック化し、その関連アトリビュートをシミュレーションジオメトリに追加します(下記の注記を参照)。

  • RBD Bullet Solver SOPは、シミュレーションを実行します。

Note

RBD Configure SOPは、piecenamePointアトリビュートを簡単に構成することができます。 ただし、プロキシジオメトリを使用していない場合は、代わりにソルバの 1番目 の入力に対して、これを行なう必要があります。

画像をクリックするとズームします。1から3のラベルは、必要なアトリビュートを作成するために新しいノードを追加する場所を示しています。

アトリビュート

アトリビュートは、粉砕ピースとシミュレーションポイント間のコネクションを確立するので、RBDプロシージャルと連携して重要な役割を果たします。 このプロシージャルを扱うには、いくつかの変換を実行する必要があります。 基本的には、すべてがpathアトリビュートとnameアトリビュートに依存しています。

  • Solarisでは、このpathはいわゆるUSDプリミティブパスであり、Solarisのシーン階層プリミティブが最終的に出現する場所を決めます。 pathアトリビュートはnameアトリビュートよりも優先度が高く、それが指定されていなかった場合は、nameアトリビュートが使用されます(そして、通常ではSOP Import LOPImport Path Prefix を介して足される相対パスが入ります)。

    USDプリミティブの数を最小限に抑えるために、さらに、すべての粉砕ピースを1個のMeshプリミティブにまとめたいです。 この解決策は、ジオメトリ全体に同じパスを割り当てることです。

  • nameアトリビュートは、RBD Material Fracture SOPによって直接作成され、粉砕ピース毎に固有な名前(例えば、piece0piece1など)が割り当てられます。 nameアトリビュートは、Bulletソルバが個別の粉砕ピースを識別するのに使用されるので、pathアトリビュートを使用して、すべてのポリゴンが同じUSD Meshプリミティブに取り込まれるように設定します。

piecenameアトリビュート

nameアトリビュートとpathアトリビュートは既に上述のSOP Import LOPで使用されているので、それらのアトリビュートを直接RBDプロシージャルへ渡すことはできません。 このSOP Import LOPは、必要なジオメトリをSolarisに読み込みます。 この制限を克服するために、pathアトリビュートとnameアトリビュートから派生したpiecenameアトリビュートを導入します。 この新しいアトリビュートによって、SOP Import LOPのデフォルト設定を変更したり、独自のpathnameを定義してシーン階層を制御する必要がなくなります。

  • 特定のポイントがどの粉砕ピースに呼応するのかを指定するために、piecenameアトリビュートは、粉砕ピース上に、 且つ 、シミュレーションポイント上に存在しなければなりません。

  • piecename シミュレーションポイント アトリビュートは、フルパスで指定されていなければなりません。 このフルパスは既存のpathアトリビュートとnameアトリビュートから構築することができます。 フルパスでなければならない理由は、RBDプロシージャルは複数のトランスフォームを同時に処理することができるからです。 この新しいパスを固有の識別子と見なすことができます。

path/world/towernamepiece0だと仮定しましょう。 この場合だと、piecenameアトリビュートの結果は以下のようになります:

  • Primitivepiece0

  • Simulation point/world/tower/piece0

アトリビュート: 変換

以下のテーブルには、様々なアトリビュートがネットワークノードを通過した時にどのように変更されるのかを示しています。

ノード アクション
Name path Primitive アトリビュートを手動で作成します。
RBD Material Fracture name Primitive アトリビュートを自動で作成します。
Attribute Swap name Primitive アトリビュートの名前をpiecenameに変更します。
Attribute Promote path Primitive アトリビュートを Point アトリビュートに変換します。
Attribute Wrangle pathアトリビュートとnameアトリビュートからpiecename Point アトリビュートを構築します。

アトリビュート: path (プリミティブ)

path Primitive アトリビュートから始めましょう。 Name SOPで、以下の変更を加えます:

パラメータ 説明
Attribute path 作成したいアトリビュートの名前。
Name /world/tower アトリビュートの値。必要に応じて、これを変更してください。
画像をクリックするとズームします。Name SOP (1)は'path' Primitiveアトリビュートを作成します。

オプションの RBD Configure SOPを使用する場合、シミュレーションの工程でこのpathアトリビュートにアクセスできるようにする必要があります。 Attributes ▸ Transfer Attributes パラメータで、デフォルトのエントリをv w pathに変更します。

アトリビュート: piecename (プリミティブ)

piecename Primitive アトリビュートは、RBD Material Fracture SOP独自のnameアトリビュートから派生しています。 このアトリビュートの名前を変更するには、Attribute Swap SOPを使用します。以下がそのノードの設定です。

パラメータ 説明
Method Move ソースアトリビュートの名前を変更します。
Class Primitive Solarisでは、nameアトリビュートはプリミティブ上に存在していなければなりません。
Source name 元のアトリビュート。
Destination piecename 名前が変更されたアトリビュート。
画像をクリックするとズームします。Attribute Swap SOP (2)は'name'を'piecename'に変更します。

アトリビュート: piecename (ポイント)

シミュレーションポイントには、piecenameアトリビュートも必要です。 上述の紹介で説明しているとおり、シミュレーションポイントのpiecenameは、nameアトリビュートとpathアトリビュートから構築されたフルパスです。

現時点ではpathPrimitive アトリビュートですが、 Point アトリビュートが必要です。 この変換には、Attribute Promote SOPを使用して、以下のパラメータを変更します:

パラメータ 説明
Original Name path プロモートさせたいアトリビュート。
Original Class Primitive pathアトリビュートの現在のタイプ。
画像をクリックするとズームします。Attribute Wrangle SOP (3)は、'piecename'Pointアトリビュートを構築します。

また、RBD Bullet Solver SOPに、シミュレーションポイントと一緒にpath4番目 の出力に転送するように指示する必要があります。 RBD Bullet Solver SOPの Output タブを開いて、 Attribute Transfer に進みます。 デフォルトのエントリをage w pathに変更します。

piecenameアトリビュートを構築するには、通常ではAttribute Wrangle SOPを使用します。 VEXpression フィールドに、以下のVEXコードを入力します:

s@piecename = s@path+"/"+s@name;

Tip

元のnameアトリビュートはもはや不要で重いので削除してください。 そのAttribute Wrangle SOPの後にAttribute Delete SOPを接続し、 Point Attributes パラメータにnameを入力することで、そのアトリビュートを削除することができます。

キャッシュ化

キャッシュ化の工程は任意ですが、この工程では、高解像度ジオメトリピースとシミュレーションポイントを別々のファイルに書き出します。 複雑な粉砕でシーンのシミュレーションが重くて遅い場合、必ず粉砕がどうなっているのか検討してください。 しかし、RBDプロシージャルの Points Location ▸ File Cache モードを使用したい場合は、シミュレーションポイントのキャッシュ化は必須です。

この工程には、File Cache SOPを使用すると良いでしょう。

Solarisのセットアップ

これで必要なアトリビュートが揃ったので、Houdiniの stage レベルに切り替えて、すべてをまとめていきます。下図のネットワークを見てみましょう:

画像をクリックするとズームします。

まず最初にSOP Import LOPから始めます。 このノードは、アトリビュートの章で既に説明しましたが、粉砕ピースの静止状態をSolarisに読み込みます。 タイムラインのスライダを動かしても、オブジェクトに動きがないはずです。 また、このノードは、粉砕ピースに追加されているpath Primitive アトリビュートを読み込んで、シーン階層を構築します。 Scene Graph Treeを見ると、そこには/world/towerがあるはずです。 さらに、そのオブジェクトにはpiecename Primitive アトリビュートも含まれています。

では、RBDプロシージャルのパラメータを見てみましょう。 以下のテーブルでは、様々な設定について説明しています。

パラメータ 説明
Primitive Path /$OS ここでは、RBDプロシージャルが出現するScene Graph Tree内の場所を定義します。デフォルトのエントリは、ノードの名前(houdiniprocedural1)を読み込んで階層を作成します。このパスを好きなように変更してください。
RBD Primitives /world/tower このパスは、必ずSOP Import LOPを介して読み込まれた粉砕ピースを指すようにしてください。
Piece Attribute piecename ここでは、粉砕ピース上 且つ シミュレーションポイント上に存在しているアトリビュートの名前を追加します。デフォルトのエントリは、SOPネットワークで作成したアトリビュートに呼応しています。
Points Location Primitive デフォルトのエントリは、SOPネットワークから直接シミュレーションポイントを読み込みます。つまり、2個の関連する Point パラメータを使用して、 a) シミュレーションポイントが出現するScene Graph Tree内の場所を指定し、 b) RBDプロシージャルにそのシミュレーションポイントが検索される場所を知らせることができます。

このオプションを使用すると、Cache LOPを追加して、シミュレーションをバッファし、再生速度を向上させることができます。

ただし、 File Cache を使用した場合、そのファイルシーケンスのパスはポイントを使用して定義します。

Point Primitive /rbd_points/$OS ここでは、シミュレーションポイントのシーン階層を決めることができます。ここでも$OS変数はRBDプロシージャルの名前を受け取って、パスを完成させます。必要に応じて、このエントリを変更してください。
Points SOP /obj/tower/POINTS これは、パーティクルのSOPパスです。通常では、アクセスしやすいようにNull SOPを作成します。

Preview Procedural を有効にすると、ビューポート内でシミュレーションを評価することができます。 また、ライト、カメラ、その他必要なものを追加して、ステージを完成させることもできます。

以上でScene Graph Treeがわかりやすく配置されました。

画像をクリックするとズームします。

SolarisとKarma

USD

ジオメトリ

  • SOP Geometry I/O

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

  • Component Builder

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

レイアウト

  • Stage Manager

    Solarisステージを効率的に扱う方法。

  • Editノード

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

  • Layoutノード

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

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

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

ルック開発

  • MaterialX

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

  • UDIMパス

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

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

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

Karmaユーザガイド

Karmaの基本とワークフロー