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 Mesh や Dynamic 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は、piecename
Pointアトリビュートを簡単に構成することができます。
ただし、プロキシジオメトリを使用していない場合は、代わりにソルバの 1番目 の入力に対して、これを行なう必要があります。

アトリビュート ¶
アトリビュートは、粉砕ピースとシミュレーションポイント間のコネクションを確立するので、RBDプロシージャルと連携して重要な役割を果たします。
このプロシージャルを扱うには、いくつかの変換を実行する必要があります。
基本的には、すべてがpath
アトリビュートとname
アトリビュートに依存しています。
-
Solarisでは、この
path
はいわゆるUSDプリミティブパスであり、Solarisのシーン階層プリミティブが最終的に出現する場所を決めます。path
アトリビュートはname
アトリビュートよりも優先度が高く、それが指定されていなかった場合は、name
アトリビュートが使用されます(そして、通常ではSOP Import LOPの Import Path Prefix を介して足される相対パスが入ります)。
USDプリミティブの数を最小限に抑えるために、さらに、すべての粉砕ピースを1個の
Mesh
プリミティブにまとめたいです。 この解決策は、ジオメトリ全体に同じパスを割り当てることです。 -
name
アトリビュートは、RBD Material Fracture SOPによって直接作成され、粉砕ピース毎に固有な名前(例えば、piece0
、piece1
など)が割り当てられます。name
アトリビュートは、Bulletソルバが個別の粉砕ピースを識別するのに使用されるので、path
アトリビュートを使用して、すべてのポリゴンが同じUSDMesh
プリミティブに取り込まれるように設定します。
piecenameアトリビュート ¶
name
アトリビュートとpath
アトリビュートは既に上述のSOP Import LOPで使用されているので、それらのアトリビュートを直接RBDプロシージャルへ渡すことはできません。
このSOP Import LOPは、必要なジオメトリをSolarisに読み込みます。
この制限を克服するために、path
アトリビュートとname
アトリビュートから派生したpiecename
アトリビュートを導入します。
この新しいアトリビュートによって、SOP Import LOPのデフォルト設定を変更したり、独自のpath
とname
を定義してシーン階層を制御する必要がなくなります。
-
特定のポイントがどの粉砕ピースに呼応するのかを指定するために、
piecename
アトリビュートは、粉砕ピース上に、 且つ 、シミュレーションポイント上に存在しなければなりません。 -
piecename
シミュレーションポイント アトリビュートは、フルパスで指定されていなければなりません。 このフルパスは既存のpath
アトリビュートとname
アトリビュートから構築することができます。 フルパスでなければならない理由は、RBDプロシージャルは複数のトランスフォームを同時に処理することができるからです。 この新しいパスを固有の識別子と見なすことができます。
path
が/world/tower
、name
がpiece0
だと仮定しましょう。
この場合だと、piecename
アトリビュートの結果は以下のようになります:
-
Primitive →
piece0
-
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
|
アトリビュートの値。必要に応じて、これを変更してください。 |

オプションの 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
|
名前が変更されたアトリビュート。 |

アトリビュート: piecename (ポイント) ¶
シミュレーションポイントには、piecename
アトリビュートも必要です。
上述の紹介で説明しているとおり、シミュレーションポイントのpiecename
は、name
アトリビュートとpath
アトリビュートから構築されたフルパスです。
現時点ではpath
は Primitive アトリビュートですが、 Point アトリビュートが必要です。
この変換には、Attribute Promote SOPを使用して、以下のパラメータを変更します:
パラメータ | 値 | 説明 |
---|---|---|
Original Name |
path
|
プロモートさせたいアトリビュート。 |
Original Class | Primitive |
path アトリビュートの現在のタイプ。
|

また、RBD Bullet Solver SOPに、シミュレーションポイントと一緒にpath
を 4番目 の出力に転送するように指示する必要があります。
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プロシージャルにそのシミュレーションポイントが検索される場所を知らせることができます。
このオプションを使用すると、 ただし、 File Cache を使用した場合、そのファイルシーケンスのパスはポイントを使用して定義します。 |
Point Primitive |
/rbd_points/$OS
|
ここでは、シミュレーションポイントのシーン階層を決めることができます。ここでも$OS 変数はRBDプロシージャルの名前を受け取って、パスを完成させます。必要に応じて、このエントリを変更してください。
|
Points SOP |
/obj/tower/POINTS
|
これは、パーティクルのSOPパスです。通常では、アクセスしやすいように |
Preview Procedural を有効にすると、ビューポート内でシミュレーションを評価することができます。 また、ライト、カメラ、その他必要なものを追加して、ステージを完成させることもできます。
以上でScene Graph Treeがわかりやすく配置されました。
