Voronoi Fracture と For Each ループを組み合わせて、例えば、オブジェクトの下半分だけさらに細かく割れるような RBD シミュレーションを作成する。
使用したバージョン: Houdini 16.5.439
シーンファイルへのリンクは一番下にあり。
1. 一次フラクチャ
最初に大まかなフラクチャを作成する。
- Create シェルフの Box ツールを Ctrl キーを押しながらクリック。
- box_object1 が原点に作成される。
- Translate Y を 2 に設定。
- box_object1 を選択したまま Model シェルフの Shatter ツールを実行。
- box_object1 ノード内に converttofog1, chunkcenters, voronoifractures1 の3つのノードが追加され、voronoifracture1 に表示フラグが設定された。
- chunkcenters ノードを選択、Force Total Count を 50 (ぐらい) に設定。
- 右側の Rigid Bodies シェルフの RBD Fractured Object ツールを実行。
- 表示されるダイアログパネルでは、RBD Packed Object を選択。
- box_object1 を選択し、Enter キーを押して確定。
- Collisions シェルフから Ground Plane ツールを実行。
- 最終フレームを120にして再生すれば、以下の通り(のはず)。
2. For Each ループによる二次フラクチャ
次に #1 で生成したそれぞれの破片をもう一度フラクチャを実行する。
- ネットワークエディタで box_object1 ノードをダブルクリックするか i キーを押して中に入る。
- #1-3 実行後では4つしかなかったのでネットワークにさらにノードが追加されているのがわかる。
- ネットワークエディタ内で TAB->For Each Connected Piece を実行。Enter キーを押してノードをネットワークエディタ内にとりあえず配置。
- connectivity1、foreach_begin1、foreach_end1 のつ3つがつながったネットワークが追加された。
- #1-3 で追加されたフラクチャノード3つを選択、Ctrl+C (コピー)、Ctrl+V
- Y キー押しながら、元のネットワークから切り取る。
- 切り取った3つのノードを foreach_begin1 と foreach_end1 の間に挿入する。
- foreach_begin1 の出力を voronoi_fracture2 の左の入力にも接続する。
- 新しくコピーした chunkcenter1 の Force Total Count を 10 に戻しておく。
- connectivity1 から foreach_end1 までのネットワークを、voronoifracture1 と rest1 の間に挿入する。つまり、
- voronifracture1 の出力を connectivity1 の入力に接続。
- foreach_end1 の出力を rest1 に接続、既存の接続を置換する。
- ここまでの結果を再生すると、奇妙なシミュレーション結果になる。
- setup_packed_prims を選択、Create Name Attribute をオンにする。再生すれば、シミュレーションには先ほどよりも時間がかかるが、以下の通り。
これで、2次フラクチャも正しくシミュレーションされるようになったが、なんとなくうそっぽいシミュレーション結果になってしまったのと、これであればループを使わずに最初のフラクチャでForce Total Count を増やしたこととあまり変わらない。
3. For Each ループのコントロール
For ループをすべてのピースにかけるのではなく、一部のピースのみにかかるようにする。
- TAB->Split を実行、出来た split1 を connectivity1 と foreach_begin1 の間に挿入。
- TAB->Assemble を実行、出来た asssemble2 を connectivity1 と split1 の間に挿入し、assemble2 で
- Create Name Attribute をオフにする。
- Create Packed Geometry をオンにする。
- TAB->Unpack を実行、出来た unpack1 を split1 と foreach_begin1 の間に挿入。
- これにより、Assemble を上流で追加した結果を緩和する。
- TAB->Merge を実行、出来た merge1 を foreach_end1 と rest1 の間に挿入。
- split1 の2番目(右) の出力を merge1 に接続。再生すれば以下の通り。
これはこれで良いかもしれないが、下半分だけが細かく割れてほしい。 - TAB->Sort を実行、出来た sort1 を assemble2 と split1 の間に挿入。
- sort1 の Primitive Sort を By Y に設定。
- 再生すればこの通り。
- 上流の box1 の直下に switch ノードを追加、voronoifracture1 と converttofog1 の両方に接続するようにして、二つ目の入力として、 Rubber Toy を作成。
入力を切り替えれば、一番上の画像の通り。
ここまでが 3_rbd_final.hip 。
シーンファイル
- rbd_for_loop.zip 214KB
- 1_rbd_base.hip: #1 最後までのファイル
- 2_rbd_loop.hip: #2 最後までのファイル
- 3_rbd_final.hip: #3 最後までのファイル
0 件のコメント:
コメントを投稿