Houdini 20.0 ダイナミクス

ジオメトリを自動破壊する方法

On this page

色々なシェルフツールを使ってジオメトリを破壊する方法がいくつかあります。 例えば、シェルフの Model タブの Shatterツールを使えばジオメトリを切り刻むことができ、 シェルフの Rigid Bodies タブのRBD Fractured Objectツールを使えばダイナミックオブジェクトを破壊することができます。 また、シェルフの Rigid Bodies タブの Make Breakableツールを使えばダイナミックにオブジェクトを破壊することができます。

シェルフツールは常にDOPベースのセットアップを作成します。 そこでは、すべてのジオメトリがGeometry OBJ内に格納され、その一方でダイナミクスネットワークはDOP Network OBJ内に配置されます。 Shatterシェルフツールは例外です。その理由は、これはダイナミクスなしで粉砕ジオメトリネットワークのみを作成するからです。 シェルフツールの扱い方の情報は、Shattering(粉砕)を参照してください。

ボロノイベースのメソッドは、ポイントに基づいています。 各ポイントが破片の中心を示し、理想的には、そのポイントの数が破片の数も定義します。

Houdiniの長期的な目標の1つが、よりユーザーに馴染みやすいワークフローとなるようにDOPからSOPへワークフローを移行させることです。 SOPベースの粉砕セットアップは、様々な可能性を広げ、様々な方法を備えています:

ジオメトリのインポート

最終的にどの方法を使用する場合でも、最初のステップは、分割したいジオメトリをインポートすることです。

  1. ネットワークエディタobj レベルで⇥ Tabを押してTabメニューを呼び出します。そのメニューから、Geometry OBJを作成します。そのノードをダブルクリックして、その中に入ります。

  2. File SOPなどを使用して、Houdini SOPジオメトリ環境にジオメトリを読み込みます。どのファイル操作にも必ず$HIPを使ってください。その理由は最終シミュレーションでレンダーファームを使用する時にファイルを参照する必要があるからです。

Note

破壊する前にジオメトリを分析して、不具合のない正確な衝突ジオメトリが得られるように、ジオメトリ上のポイントすべてが結合していて、オブジェクトが正しくXYZ軸に対応して変換されていることを確認してください。

RBD Material Fracture SOPのワークフロー

ジオメトリをインポートしたら、粉砕の工程に進めることができます。

  • TabメニューからRBD Material Fracture SOPを追加し、その1番目の入力をジオメトリの出力に接続します。

  • 最も変更する必要性の高い唯一の項目は、 Constraints タブに配置されています。 Primary Strength パラメータは、破片間の接着強度を決めます。オブジェクトが割れないようであれば、その値を下げてください。

  • このノードの他のパラメータのデフォルト値は、最初には非常に良い値になっていますが、 Material TypeFracture LevelScatter Points のパラメータ値を試行することをお勧めします。また、 Enable Chipping をオンにすることで、陶器や磁器を割る時によく観察される微小な破片をシミュレーションすることができます。

  • エッジ/サーフェスにディテールを加えたいのであれば、 Detail タブを開いて、 Edge DetailInterior Detail をオンにします。ディテールの追加は、オブジェクトの複雑さによっては処理に膨大な時間がかかってしまう場合があることに注意してください。

外部ポイントの使用

ボロノイ粉砕に外部ポイントソースを使用することができ、このノードの利便性をさらに良くすることができます。 このRBD Material Fracture SOPの4番目の入力には、Scatter SOPなどのポイントソースまたはジオメトリのポイントを接続することができます。 Scatter SOPの使用は、たくさんの破片を含んだゾーンを定義するのにも便利です。このワークフローは、Voronoi Fracture SOPにも以下と同じことが当てはまります。

  1. Iso Offset SOPを追加して、その1番目の入力をジオメトリ(例えば、粉砕したいジオメトリ)の出力に接続します。このノードは、接続されたジオメトリをボリュームに変換して、そのジオメトリ表面だけでなく内部までボロノイポイントを生成できるようにします。

  2. このIso Offset SOPの Uniform Sampling Divs を約30に設定して、接続されたジオメトリがもっと細かく表現されるようにします。

  3. Scatter SOPを追加して、その入力を上流のノードの出力に接続します。これは必ずしもジオメトリである必要はありませんが、このノードの Density Attribute オプションを使用してマップまたは他のソースからポイントを生成することもできます。

  4. Force Total Count を使用して、ボロノイポイントの数を調整します。

  5. このScatter SOPの出力をRBD Material Fracture SOPの4番目の入力に接続します。

  6. RBD Material Fracture SOPの Primary Fracture タブに進みます。 Cell Points セクション内の Input Points をオンにして、4番目の入力からの散乱ポイントを使用するようにします。

複数の粉砕レベルを設定し、粉砕レベル別に外部ポイントを使用したいのであれば、その外部ポイントをグループ化して、粉砕レベル別に Input Points をオンにして適切なグループを入力すると良いでしょう。 粉砕レベルの数とポイント数が多いほど粉砕処理が遅くなってしまうことに注意してください。

外部拘束の使用

外部拘束を使用したいのであれば、RBD Material Fracture SOPの Constraints タブに進んで、 Enable Constraints をオフにします。 そうすると、破片同士を接着するのに2個以上のノードが必要になります。

  1. RBD Constraints from Rules SOPを追加して、その入力をRBD Material Fracture SOPの出力(2番目の出力には拘束が含まれていて、ここでは必須ではないです)に接続します。このノードのデフォルト設定で進めることができます。

  2. RBD Constraint Properties SOPを追加して、その3本の入力を上流のノードの呼応する出力に接続します。

  3. 破片間の接着強度を調整するために、 Glue セクションの Strength を変更します。

  4. 最後に、このノードチェーンをRBD Bullet Solver SOPに接続します。このソルバのパラメータの情報は、以下のRBD Bullet Solverの設定の章を参照してください、

Voronoi Fracture SOPのワークフロー

以下では、シェルフのツールを使用しないでSOPネットワークでジオメトリの粉砕を自動化する方法の例を説明しています。

  • Voronoi Fracture SOPは、綺麗に粉砕されたジオメトリを作成し、RBD Fractured Object DOPと組み合わせても上手く機能します。そのRBD Fractured Object DOPを使用すると、実質的にジオメトリの新しい破片毎に複数の粉砕を計算することになるので、シミュレーション時間が長くなります。Voronoi Fracture SOPの1番目の入力は粉砕したいジオメトリの出力に接続します。

  • Houdiniには、目的別にたくさんの粉砕系ノードが用意されています。例えば、Boolean Fracture SOPです。このノードは切断サーフェスを使用してオブジェクトが割れる箇所を正確に定義することができます。

  • 他にもExploded View SOPがあります。これは、粉砕ジオメトリの個々の破片をオブジェクトの重心から設定した距離だけ移動させて、その粉砕ジオメトリの内側のフェースを確認することができます。

ボロノイポイント

Voronoi Fracture SOPの2番目の入力には、破片を生成するためのボロノイセルのポイントを指定します。 実質的にどのポイントソースも使用することができます。よく使用するメソッドは、散乱ポイントに基づいています。

  1. TabメニューからIso Offset SOPを追加します。このSOPは、接続されたジオメトリの内部にパーティクルを追加することができます。このSOPを使用しなかった場合、ボロノイポイントはジオメトリの表面上にしか散乱しないので、ジオメトリ内部に破片を生成することができません。 Output Types オプションと Mode オプションを変えると異なる破片の結果になることを試してみましょう。

  2. Uniform Sampling を使用することで、ボリュームとジオメトリの形状との近似度を定義することができます。このパラメータを30に設定します。

  3. Iso Offset SOPの1番目の入力を粉砕したいジオメトリの出力に接続します。

  4. Scatter SOPを追加して、その入力をIso Offset SOPの出力に接続してボロノイポイントを生成します。

  5. 破片の数を調整するには、 Force Total Count を変更します。

  6. Scatter SOPのデフォルト値のままだと、破片の分布があまりにも規則的すぎるように見えます。もっとランダムなパターンを生成するために、 Relax Iterations0に設定します。

アトリビュートとグループ

Voronoi Fracture SOPは、insideグループとoutsideグループに分けることができます。 グループアトリビュートの1の値は、その破片がそのグループに属することを意味します。 Primitive Piece トグルを有効にすると、各破片にインデックス番号を割り当てることができます。

Tip

インパクトで発生したデータ量が大きい時は、はっきりと分かりやすい命名規則を考慮すれば、グループを後工程で扱いやすくなります。

衝突ジオメトリのチェック

このツールはリジッドボディダイナミクスを使用していて、フォースを追加してジオメトリが破壊されるように開発されているので、必ず衝突ジオメトリが正確であることをチェックしてください。 ジオメトリを破壊したい場合にインパクトオブジェクトは必須ではありません。粉砕オブジェクトを地面に落として粉砕させることもできます。

Note

この衝突ジオメトリの解像度はシーンのシミュレーション時間に影響があるので、解像度を制御可能な分割数で維持してください。

拘束のセットアップ

このツールはフォースとインパクトに基づいているので、拘束は非常に重要です。 例えば、がっしりとした土台に建物やその他のオブジェクトを固定するシーンを処理する時、拘束が必要になります。 とはいえ、ピン拘束を全体のシーケンに対して直接ジオメトリの個々の部分に割り当てることができません。 その理由は破壊が起きる度にグループ名が変わるからです。

  1. 拘束を構築するには、RBD Constraints from Rules SOPを追加し、その1番目の入力をVoronoi Fracture SOPの1番目の出力に接続します。基本的なシミュレーションの場合、デフォルト値のままで進めることができます。

  2. RBD Constraint Properties SOPは、破片同士を接着させる強度を定義することができます。最初の2本の入力をRBD Constraints from Rules SOPの最初の2本の出力にそれぞれ接続します。

  3. RBD Constraint Properties SOPの Glue セクションに Strength パラメータがあります。このパラメータは、破片間の接着力を設定して破片同士をくっつけて塊を作成します。下図には、瓶オブジェクトの拘束構造を表示しています。

Note

RBD Material Fracture SOP自体に Constraints タブがあります。 このタブでは、RBD Constraint Properties SOPもRBD Constraints from Rules SOPも使用することなく、直接、拘束を作成して調整することができます。

RBD Bullet Solverの設定

ソルバは、入力のジオメトリ、拘束、コリジョンデータを処理して、オブジェクトの動きと挙動をシミュレーションします。 SOPベースのセットアップでは、RBD Bullet Solver SOPしかありません。 このソルバには、組み込みの無限大な衝突地面や、拘束に作用する様々なフォースを表示するための方法も用意されています。 また、このソルバはサブステップとイテレーションによってシミュレーションの精度を制御することができます。 サブステップ数が多いほど予期しない挙動の修復に役立つ場合が多く、一方で、イテレーションを上げることで拘束を安定化させることができます。

  1. TabメニューからRBD Bullet Solver SOPを追加します。

  2. 使用するメソッドに応じて、異なるノードをソルバに接続する必要があります。このソルバの最初の3本の入力を上流のノード(RBD Material Fracture SOPまたはRBD Constraint Properties SOP)の3本の呼応する出力に直接接続します。

  3. Collision タブを開き、 Ground Collision セクションの Ground TypeGround Plane に設定します。必要に応じて、その地面の Position を変更します。別の方法としては、Transformation SOPを追加して、粉砕オブジェクトの位置を変更しても良いでしょう。

  4. 後はデフォルトの設定のままにして、プレイバーのを押してシミュレーションします。カスタムオブジェクトをコライダーとして使用したいのであれば、このソルバの4番目の入力にそれを接続してください。

RBD Packノード

粉砕オブジェクトは、数千個もの個々の破片、膨大な数の拘束と広範囲なアトリビュートで構成される場合があります。 RBD Pack SOPは、シミュレーションを3つのプリミティブ(ノードの入力毎に1つのプリミティブ)に“圧縮”する非常に効率的な方法です。 パックされたRBDシミュレーションは制御しやすく、レンダリングが速く、マージが簡単でリソース消費に優しいです。 RBD Pack SOPは、RBD Bullet Solver SOPの後に追加します。

RBD Unpack SOPは、その圧縮処理の逆で、アトリビュートを含むオリジナルの情報を再び利用可能にします。 下図のアンパックされたシミュレーションには、最大8.8MB RAM割り当てられています。パックされたシミュレーションは13.7KB RAMしか消費されていません。

複数のパックRBDオブジェクトを含んだシーンでは、 Name パラメータの使用を検討してください。 固有な名前が識別子として機能し、オブジェクトをわかりやすく分けることができます。

シミュレーションとエクスポート

必要なエフェクト用にシミュレーションをセットアップしてしまえば、ローカルまたはレンダーファームでシミュレーションすることができます。 シミュレーションのエクスポートに関する詳細は、シミュレーションのキャッシュ化を参照してください。

ダイナミクス

ダイナミクスの学習

衝突オブジェクト

シミュレーションタイプ

次のステップ