破壊シミュレーション

INDEX

はじめに

こんにちは。モノリスソフト テクニカルアーティストの廣瀬です。
今回は著者がよく使うHoudiniでの破壊シミュレーションのベースとなるネットワークを紹介いたします。

サンプルファイル(monolithtech_rbd.zip 95.2 KB)はこちらです。

DOWNLOAD

解説

ネットワーク全体はこんな感じになります。

tech_08_02.png

tech_08_03.png

大まかな流れとしては、まず破壊対象のジオメトリから

  • 粉砕ジオメトリ(最終結果として出力用)
  • プロキシジオメトリ(シミュレーション用)
  • コンストレイントジオメトリ(シミュレーション用)

の3つを作成します。

次に、プロキシジオメトリとコンストレイントジオメトリを用いてシミュレーションを行います。

その後、Transform Piecesノードを使い、シミュレーション結果を粉砕したジオメトリに転送します。

RBD Material Fracture

入力ジオメトリを粉砕します。木やガラスなどいろいろな材質の割れ方で粉砕できます。また、コンストレイントジオメトリや、プロキシジオメトリも同時に作成してくれます。

シミュレーションのテスト等、お手軽にジオメトリを粉砕したいときに便利です。

入力ジオメトリが多数穴が開いているなど複雑な場合は粉砕に失敗することがあります。その時は独自に構築したネットワークを使用しています。

tech_08_04.png

RBD Exploded View

RBD Material Fractureで作成した粉砕ジオメトリコンストレイントジオメトリ・プロキシジオメトリを分かりやすく可視化できます。

主に確認用として使用しています。

tech_08_05.png

Convex Decomposition

ジオメトリを凸ハルの集合体に変更します。SOP上でこの処理を行うことで、後のシミュレーションの精度と速度の向上及び調整を用意にすることができます。

シミュレーションにはこのノードの表示結果のジオメトリがそのまま使われますので、ここでビジュアライズしながらシミュレーションの精度と速度を調整することができます。(精度を上げるほどシミュレーションの速度が低下します。)

上のSwitchは粉砕ジオメトリを元に作成するか、プロキシジオメトリを作成するか選べるようにしています。RBD Material FractureでEdge Detailなどを入れた場合プロキシジオメトリにはノイズが付与されませんので、Edge Detailのノイズを強めたりした場合はプロキシジオメトリでなく粉砕ジオメトリの方を元に作成することで正確なコリジョンを作成することが可能です。

tech_08_06.png

Pack

RBDシミュレーションはパックした状態で行った方がDOP内で扱いやすいため、ここでパックを行います。

tech_08_07.png

Attribute Promote

シミュレーション時のコンストレイントやTransform PiecesでPointにnameアトリビュートが必要になるため、nameアトリビュートをPointにプロモートします。

PackとAttribute Promoteの処理は粉砕ジオメトリに対しても同様に行います。

tech_08_08.png

ここからDOP Networkになります。

RBD Packed Object

シミュレーション用のRBDオブジェクトをSOPのパックプリミティブから作成します。各パックプリミティブ毎に1つの破片として扱われます。

著者が良く行うパラメーター設定は、

Inherit Velocity from Point Velocity:ON
SOP上で設定した@v Pointアトリビュートを初期速度として設定します。

Create Convex Hull Per Set Of Connected Primitives:ON
有効にすることでConvex Decompositionと同様のシミュレーション用ジオメトリが作成されます。

tech_08_09.png

Glue Constraint Relationship/Constraint Network

コンストレイントを設定します。

Margeに新たなコンストレイントノードを差すことで複数のコンストレイントを追加することができます。

注意点として、~Constraint RelationshipノードのData Nameパラメーターを、SOPのコンストレイントジオメトリの@constraint_name Primitiveアトリビュートの値と一致させるようにしてください。

tech_08_10.png

Bullet Solver

Bulletソルバーを適応します。

HoudiniでのRBDシミュレーションには他にもRBD Solverもありますが、現在では著者はほとんどBullet Solverで行っています。

tech_08_11.png

Gravity Force

重力を適応します。

tech_08_12.png

Static Object/Merge

コリジョンを適応します。

現状はDOP Networkの3番目の入力、つまりGridノードがコリジョンとして入力されています。

tech_08_13.png

ここからSOP Networkに戻ります。

DOP I/O

DOPのRBD Packed ObjectをSOPに読み込んできています。

tech_08_14.png

Add

Transform Piecesノードでポイントのトランスフォーム情報を粉砕ジオメトリに転送する関係で、プリミティブ情報は一切不要になります。

そこでプリミティブを全て削除することで、シミュレーション結果をファイルキャッシュに書き込む際の容量を削減することができます。

tech_08_15.png

TIPS:

DOP I/O と Add で行った処理は Dop Import の Import StyleCreate Points to Represent Objects でも同様の処理が可能です。

Attribute Delete/Group Delete

不要なアトリビュートとグループを削除することで、シミュレーション結果をファイルキャッシュに書き込む際の容量を削減することができます。

tech_08_16.png

Transform Pieces

シミュレーション結果を粉砕ジオメトリに転送します。

tech_08_17.png

まとめ

今回は、著者が良く行う破壊のセットアップについて解説してみました。

ここでの内容は基礎のもののみにとどめているので、ここから色々とノードを追加していくことでリッチな破壊を実現することができます。

この情報がより良い破壊ライフを送るためのお役に立てば幸いです。

執筆者:廣瀬

映像業界を経てモノリスソフトへ入社。 以来、テクニカルアーティストとして主にエフェクト関連の業務を担当。 好きな食べものはソフトクリーム。

ABOUT

モノリスソフト開発スタッフが日々取り組んでいる技術研究やノウハウをご紹介

RECRUIT採用情報