執筆者:廣瀬
映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にエフェクト関連の業務を担当。 好きな食べものはソフトクリーム。
TECH BLOG
こんにちは。モノリスソフト テクニカルアーティストの廣瀬です。
今回は著者がよく使うHoudiniでの破壊シミュレーションのベースとなるネットワークを紹介いたします。
サンプルファイル(monolithtech_rbd.zip 95.2 KB)はこちらです。
ネットワーク全体はこんな感じになります。
大まかな流れとしては、まず破壊対象のジオメトリから
の3つを作成します。
次に、プロキシジオメトリとコンストレイントジオメトリを用いてシミュレーションを行います。
その後、Transform Piecesノードを使い、シミュレーション結果を粉砕したジオメトリに転送します。
入力ジオメトリを粉砕します。木やガラスなどいろいろな材質の割れ方で粉砕できます。また、コンストレイントジオメトリや、プロキシジオメトリも同時に作成してくれます。
シミュレーションのテスト等、お手軽にジオメトリを粉砕したいときに便利です。
入力ジオメトリが多数穴が開いているなど複雑な場合は粉砕に失敗することがあります。その時は独自に構築したネットワークを使用しています。
RBD Material Fractureで作成した粉砕ジオメトリ・コンストレイントジオメトリ・プロキシジオメトリを分かりやすく可視化できます。
主に確認用として使用しています。
ジオメトリを凸ハルの集合体に変更します。SOP上でこの処理を行うことで、後のシミュレーションの精度と速度の向上及び調整を用意にすることができます。
シミュレーションにはこのノードの表示結果のジオメトリがそのまま使われますので、ここでビジュアライズしながらシミュレーションの精度と速度を調整することができます。(精度を上げるほどシミュレーションの速度が低下します。)
上のSwitchは粉砕ジオメトリを元に作成するか、プロキシジオメトリを作成するか選べるようにしています。RBD Material FractureでEdge Detailなどを入れた場合プロキシジオメトリにはノイズが付与されませんので、Edge Detailのノイズを強めたりした場合はプロキシジオメトリでなく粉砕ジオメトリの方を元に作成することで正確なコリジョンを作成することが可能です。
RBDシミュレーションはパックした状態で行った方がDOP内で扱いやすいため、ここでパックを行います。
シミュレーション時のコンストレイントやTransform PiecesでPointにnameアトリビュートが必要になるため、nameアトリビュートをPointにプロモートします。
PackとAttribute Promoteの処理は粉砕ジオメトリに対しても同様に行います。
ここからDOP Networkになります。
シミュレーション用のRBDオブジェクトをSOPのパックプリミティブから作成します。各パックプリミティブ毎に1つの破片として扱われます。
著者が良く行うパラメーター設定は、
Inherit Velocity from Point Velocity:ON
SOP上で設定した@v Pointアトリビュートを初期速度として設定します。
Create Convex Hull Per Set Of Connected Primitives:ON
有効にすることでConvex Decompositionと同様のシミュレーション用ジオメトリが作成されます。
コンストレイントを設定します。
Margeに新たなコンストレイントノードを差すことで複数のコンストレイントを追加することができます。
注意点として、~Constraint RelationshipノードのData Nameパラメーターを、SOPのコンストレイントジオメトリの@constraint_name Primitiveアトリビュートの値と一致させるようにしてください。
Bulletソルバーを適応します。
HoudiniでのRBDシミュレーションには他にもRBD Solverもありますが、現在では著者はほとんどBullet Solverで行っています。
重力を適応します。
コリジョンを適応します。
現状はDOP Networkの3番目の入力、つまりGridノードがコリジョンとして入力されています。
ここからSOP Networkに戻ります。
DOPのRBD Packed ObjectをSOPに読み込んできています。
Transform Piecesノードでポイントのトランスフォーム情報を粉砕ジオメトリに転送する関係で、プリミティブ情報は一切不要になります。
そこでプリミティブを全て削除することで、シミュレーション結果をファイルキャッシュに書き込む際の容量を削減することができます。
TIPS:
DOP I/O と Add で行った処理は Dop Import の Import Style:Create Points to Represent Objects でも同様の処理が可能です。
不要なアトリビュートとグループを削除することで、シミュレーション結果をファイルキャッシュに書き込む際の容量を削減することができます。
シミュレーション結果を粉砕ジオメトリに転送します。
今回は、著者が良く行う破壊のセットアップについて解説してみました。
ここでの内容は基礎のもののみにとどめているので、ここから色々とノードを追加していくことでリッチな破壊を実現することができます。
この情報がより良い破壊ライフを送るためのお役に立てば幸いです。
執筆者:廣瀬
映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にエフェクト関連の業務を担当。 好きな食べものはソフトクリーム。