Houdini 20.0 ダイナミクス

リジッドボディダイナミクス

On this page

概要

Rigid Body Solverはオブジェクトが硬い固体であるとみなして、その動きと衝突をシミュレーションします(その反対のタイプのシミュレーションするオブジェクトとしては、流体、布、柔らかいオブジェクトがあります)。Rigid Body Dynamicsは、よくRBDと略されます。

RBDオブジェクトは アクティブパッシブ のどれかにできます。アクティブオブジェクトは力と衝突から影響を受けます。パッシブオブジェクトはアクティブオブジェクトから衝突を受けます。しかしパッシブオブジェクトは動かないし、力から影響を受けません。

キーフレームアニメーションとシミュレーション間を切り替える方法を参照してください。

How to

  1. リジッドボディに必要なジオメトリを含むジオメトリオブジェクトモデリングします。

  2. オブジェクトを選択します。

  3. シェルフの Rigid Bodies タブで、以下のツールのどれかをクリックすると、自動的にダイナミックノードが作られ、シミュレーションコントロール下に、そのオブジェクトが配置されます。

Rigid Bodies シェルフタブのツールは、リジッドボディシミュレーションオブジェクトを作成して拘束します。

RBD Object

ジオメトリオブジェクトからRBDオブジェクトを作成します。

RBD Fractured Object

ジオメトリオブジェクトからたくさんのRBDオブジェクトを作成します。

個々のRBDオブジェクトは、 ジオメトリに前もって定義していたnameアトリビュートから作成されます。ジオメトリを手動で切り刻んだり、または Model シェルフタブのBreakを使って切り刻むことができます。

このツールは、オブジェクトをばらばらにするのにフォースを必要としないので、オブジェクトの粉砕をシミュレーションするのに役に立ちます。

Static Object

ジオメトリオブジェクトから 静的な リジッドボディオブジェクトを作成します。

Static Objectは、シミュレーションで他のオブジェクトに影響を与えます(例えば、他のオブジェクトがStatic Objectから跳ね返ることはできます)。しかし、その動きはシミュレーションで制御されません。他のオブジェクトから跳ね返らなく、重力の影響で落ちないなどアニメーションを設定しない限りまったく動きません。

これは非常に重いリジッドボディを作成するときや、シミュレーションでまったく動かさない時に役に立ちます。例えば、他のオブジェクトを乗せたテーブルがそうです。

RBD Point Object

ソースジオメトリオブジェクト各ポイント に新しくシミュレーションオブジェクトを作成します。これはCopyサーフェスノードの動きに似ています。

食料品店に積まれた缶や木がたくさん生えた森のように、同一オブジェクトがたくさん集まったものをシミュレーションするのに役に立ちます。

Ground Plane

RBD、布、ワイヤーシミュレーションに適した無限平面を作成します。Ground Planeは 静的な リジッドボディです(上記のStatic Objectを参照)。

Terrain Object

ジオメトリオブジェクトから地形オブジェクトを作成します。Terrain Objectは 静的な リジッドボディです(上記のStatic Objectを参照)。

Ground Planeツールは完全に平坦な静的な地面オブジェクトを原点に作成するのに対して、このツールは3Dサーフェス(例えば、地形を表現した変形したグリッド)を選択すれば、自動的に最適な静的な地面オブジェクトに変換されます。

無限平面のGround Planeとは違い、このツールで作成されるシミュレーションオブジェクトは、元のジオメトリと同じサイズです。

リジッドボディ拘束

リジッドボディオブジェクトと一緒に使える拘束がいくつかあります。詳細は、以下を参照してください:

ソルバタイプの選択

Rigid Body Solverは、異なる3つの“エンジン”からどれかを選択して計算をします。それぞれのエンジンにはメリットとデメリットがあります。

Rigid Body Solverの Solver Engine パラメータを使ってソルバタイプを設定します。 ODEBullet を選択すれば、RBD ObjectCollisions タブのサブタブからODEとBulletに特有のオプションが設定されます(例えば、ODE用の衝突形状)。

(Houdiniが作成するRigid Body Solverノードは各エンジン用にサブソルバをカプセル化したアセットです。古いバージョンのHoudiniで作成したシーンには昔のHoudiniソルバノードがあります。これには別の計算エンジンに切り替えるオプションがありません。)

エンジン メリット 制限
Bullet

BulletはHoudini12で新しく追加されたデフォルトのソルバです。Houdini RBDソルバよりも高速で巨大なデータセットを取り扱うことができます。

これは動的な破壊をサポートしています。

Bulletソルバは衝撃データの中で衝撃の停止を区別をするオプションがありません。

オブジェクトレベルでスケールをサポートしていません。

Houdini RBD

これはHoudiniのネイティブのリジッドボディ衝突ソルバでしたので、Houdiniのリジッドボディシミュレーション機能(フォース、拘束など)のすべてをサポートしています。

一番のメリットは、どんな形状のジオメトリ間の衝突も取り扱うことができることです。

ODEとBulletよりも遅いです。

ODE(Open Dynamics Engine)

単純な衝突ジオメトリ(例えば、ボックス、球、円柱、カプセル)の高速シミュレーションに最適化したオープンソースRBDソルバ。これはジオメトリがODEの単純化した形状にマッチするとパフォーマンスがよくなります。例えば、崩壊するブロックの壁の四角いブロックのシミュレーションです。

ODEは大規模な数の単純なオブジェクトの取り扱いが本当に得意です。オブジェクト同士が上に積まれた状況でさえも、とても高速です。

RBDとODE間を切り替えるのはとても簡単なので、ODEで計算が速いシミュレーションを行ない、その後にRBDに切り替えて、より詳細なシミュレーションを使うといったことが可能です。

ODEはボックス、球、他のプリミティブ間の衝突しか計算できません。シミュレーションするジオメトリがプリミティブである必要性はありませんが、そうではないジオメトリは、 まるで1つのプリミティブであるかのように処理されて衝突を計算 します。

ODEは接着や破壊をサポートしていません。

ODEは三角メッシュ間の衝突をサポートしていません。ODEではオブジェクト衝突ハルは、ボックスや球などのプリミティブで構成されます。

オブジェクトレベルでスケールをサポートしていません。

接着(Glue)

Houdiniは、ばらばらのRBDオブジェクトを一緒に“接着”します。、オブジェクトは引き離す力が接着力を超えない限り、接着したままになります。

接着を使うワークフローは主に2通りあります。1つ目は、通常のRBDオブジェクトを他のRBDオブジェクトに接着する方法、2つ目が、“ぶつ切りした”ジオメトリ(個々の破片をグループにして組み立てたジオメトリ) を作成して、それを接着された破片としてインポートする方法です。

この機能は、特にオブジェクトをぶつ切りにする時、破片を接着する時、接着したオブジェクトを他のオブジェクトで衝突させて“破壊”させる時に役に立ちます。

To...Do this

RBDオブジェクトを他のRBDオブジェクトに接着する

  1. RBDオブジェクトのパラメータで、 Glue タブをクリックし、 Glue to Object フィールドに接着したいRBDオブジェクトの名前を設定します。

  2. 接着したオブジェクトをばらばらにするのに必要なフォースを Glue StrengthGlue Impulse Half Life で設定します。詳細は、RBD Objectノードのヘルプを参照してください。

ぶつ切りのジオメトリをセットアップする

  1. ジオメトリオブジェクトやSOPネットワークで、モデルの破片を作成します。

  2. 各破片のジオメトリをグループに割り当てます。

    パターンで意味のある名前を使います(例えば、chunk1chunk2chunk3chunk_leftarmchunk_headchunk_rightleg)。これによって接着オブジェクトでパターンパラメータを使ってグループを指定することができます。

  3. 各破片を結合して最終ジオメトリを作成します。

ぶつ切りにしたジオメトリを接着したRBDオブジェクトとしてインポートする

  1. TabメニューからRBD Glue Objectノードを作成します。

  2. 接着オブジェクトのパラメータで、 SOP Path パラメータの隣にある+ボタンをクリックして、ぶつ切りにしたジオメトリを持つSOPノードまたはSOPネットワークを選択します(上記参照)。

  3. Group Mask パターンを使って、破片としてインポートするグループを選択(例えば、chunk*)するか、またはグループをすべて使うのであれば*のままにします。

  4. Internal Glue タブをクリックして、接着したオブジェクトをばらばらにするのに必要な力を Glue StrengthGlue Impulse Half Life で設定します。詳細は、RBD Glue Objectノードのヘルプを参照してください。

重要なRBDオブジェクトパラメータ

Use Deforming Geometry

効率を上げるために、デフォルトではダイナミクスエンジンはアニメーションするジオメトリを使いません。RBDオブジェクトがアニメーションするジオメトリを使うようにするには、RBDオブジェクトのパラメータで Use Animated Geometry1に設定します。このオプションの値はアニメーションすることができるので、重要な時間帯にのみアニメーションさせることができ、効率を上げるために他の時間帯では静的なジオメトリに切り替えることができます。

Number of Objects

  1. RBDオブジェクトのパラメータで、 Number of Objects パラメータを設定します。

    RBDオブジェクトノードはオブジェクトの複数コピーを作成しますが、まったく同じ位置に作られます。そのため重複するので1つのオブジェクトのように見えます。よって、オブジェクトの Position パラメータにエクスプレッションを使ってスペースを空ける必要があります。

  2. Position パラメータ( Initial State タブ)で、$OBJ(“オブジェクト番号”)ローカル変数を使ったエクスプレッションを入力して、コピーを配置します。

    例えば、 Position X フィールドに$OBJ * 2を入力すれば、+X軸方向にコピーを2ユニット分スペースを空けます。エクスプレッションは現在のコピー番号を設定した$OBJと一緒に各コピーが評価されます。

役立つ情報

  • 破壊を作成する簡単方法は、オブジェクトをまず1つのモデルとして作成して、Cookie SOPと球(滑らかな切断を作成するために)のような切断サーフェスまたはギザギザのポリゴンサーフェスを使ってばらばらにします。

    各クッキーの結果をGroup SOPに接続して、“chunk”グループを作成します。それから、Merge SOPを使って、その結果の“chunk”グループを結合します。

  • 大量のばらばらなジオメトリの“chunk”をグループ化する便利な方法は、Connectivity SOPを作成して、その後にGroups from Name SOPを作ることです。

    Connectivity SOPはアトリビュート(デフォルトでclass)を作成して、接続するプリミティブやポイントのセットに固有の値を割り当てます。それからGroups from Name SOPを使うとグループが作られます。 Rule パラメータに$CLASS変数を含んだグループ名を入力します。例えば、chunk$CLASSです。

See also

ダイナミクス

ダイナミクスの学習

衝突オブジェクト

シミュレーションタイプ

次のステップ