Houdini 20.0 ダイナミクス

ロープ、ワイヤー、他の曲げられるオブジェクトのシミュレーション

On this page

概要

ワイヤーシミュレーションは長くて曲げられる何かをシミュレーションするのに使います。例えば、 草、柔毛、さらには足場にさえも使えます。ワイヤーオブジェクトを拘束すれば、ブランコのように揺れるロープや跳ね返るバンジージャンプの綱、凧の尻尾などをシミュレーションすることができます。さらに崩壊する梁の構造のようなエフェクトもできます。

Houdiniのワイヤーソルバは非常に高速です。ワイヤーソルバを使えば曲げることができたり、弾力があるオブジェクトのエフェクトを高速に生成することができるので、そのワイヤーソルバを使う方法を考えるのは価値があります。

How to

To...Do this

ワイヤーとして使うカーブのフィールドを作成する

ワイヤーのフィールドを作成するというのは、実際にはジオメトリ(SOP)レベルで カーブ のフィールドを作成して、そのジオメトリをWire Objectノードと一緒にダイナミクスネットワークにインポートすることです。

SOPレベルでカーブのフィールドを作成する1つの方法:

  1. Create シェルフタブのGridツールを使えば、平面を作成して、フィールド用に好きなスケールにサイズ変更することができます。

  2. ビューアの右側のツールバーからDisplay pointsを有効にします。

  3. グリッドのポイントをカーブの位置として利用すれば、カーブの縦横を整理することができ、またグリッド全体から任意の数のポイントを撒き散らすことができます。

    • カーブの縦横を整理したいのであれば、Gridノードの RowsColumns パラメータを使ってセットアップします。

    • グリッド全体にポイントを撒き散らすには、選択したグリッドオブジェクトに対して Model シェルフタブのScatterツールを使って Number of Points パラメータをフィールドで必要なカーブの数に設定します。

  4. 底から始まるカーブを作成します(つまり、フィールドの平面上のポイント)。

  5. Modify シェルフタブのCopy to Pointsツールを使ってカーブを複数のポイントにコピーします。

  6. Wires シェルフタブのWire Objectツールを使ってカーブフィールドをシミュレーションワイヤーにします。

オブジェクトをワイヤーに変換する

  1. ワイヤーとして使いたいカーブを含んだオブジェクトを選択します。

  2. Wires タブからWire Objectツールをクリックします。

以下のワイヤーの設定を参照してください。

ワイヤーポイントを拘束する

Wires シェルフタブのツールはワイヤーポイントの位置の拘束をセットアップします。

空間内の位置をピン留めするために、Wire Pin ConstraintまたはWire Spring Constraintを使います。

ワイヤーをシミュレーションするオブジェクトにピン留めする

  1. ワイヤーオブジェクトと、それを接続したい“goal”ダイナミクスオブジェクト(例えばRBDオブジェクト)をセットアップします。

  2. Wire シェルフタブで、Attach Wire to Surfaceをクリックします。

  3. ビューアでワイヤーオブジェクトをクリック、またはネットワークエディタでWire Objectノードを選択してEnterを押します。

  4. ワイヤーオブジェクトの中からピン留めしたいポイントを選択(通常は各ワイヤーの端点でサーフェス側のポイント)してEnterを押します。

  5. Enterを押してツールを終了します。

(ツールの詳細は、Attach Wire to Surfaceを参照してください。)

ワイヤーをサーフェスにピン留めする

ワイヤーポイントをソースジオメトリの位置にピン留めして、pintoanimationまたはgluetoanimationPointアトリビュートを追加することができます(pintoanimationはポイントの位置をロックします。、一方、gluetoanimationはポイントの位置と法線をロックします)。

ワイヤーソースジオメトリネットワークで、ルートポイントを含むグループを作成し、AttribCreateノードを使ってアトリビュートを作成します。以下の設定を利用してください:

Group

ルートポイントを含んだグループの名前。例えば、roots

Name

pintoanimationまたはgluetoanimation

Class

Point

Value

1

ダイナミクスワイヤーに基づいてジオメトリを変形する

ワイヤーシミュレーションで制御するカーブを作成してモデルの変形を駆動します。例えば、蛇をモデリングして、それをダイナミクスワイヤーで制御することができます。

ダイナミクスワイヤーに基づいてジオメトリを変形すると、基本的にはカーブに基づいたジオメトリの変形と同じ問題があります。オブジェクトを変形するコントロールカーブを作成して、それをシェルフツールを使ってシミュレーションワイヤーにします。そのワイヤーには任意で拘束とフォースを加えることができます。

Wire Captureサーフェスノードを作成すれば、変形したいジオメトリをワイヤージオメトリにキャプチャーすることができます。Wire Captureノードのパラメータで、 Capture タブをクリックして、 Min/Max weight を それぞれ1と1に設定します。元のカーブをWire Deformノードの2番目(“rest”)の入力に接続、そしてDOP Importノード(このノードは自動的にシェルフツールによって作成されます。シミュレーションされるワイヤーの動きをカーブジオメトリに反映すること ができます)をWire Deformノードの3番目(“deformed”)の入力に接続します。

ワイヤーネットワーク

TBD.

ワイヤーの設定

  • Physical タブでワイヤーの物理特性を設定します。 DensityWidth はワイヤー全体の質量を決めます。また、 Width は衝突に影響を与えます。ソースジオメトリ上のアトリビュートから、これらの値(ポイント毎の質量)を設定することもできます。

  • Linear Spring Constant は、ワイヤーの引張抵抗です。値を小さくするとワイヤーは伸びやすくなります。

  • Angular Spring Constant は、曲げ抵抗です。値を小さくするとワイヤーはより緩くなり、反対に大きくすれば、より堅くなります。

  • 完全に緩いワイヤー(ロープやスプリング)にするならば、 Angular Spring Constant0にします。ただ、 Angular Spring Constant0だと Angular Damping Constant0にしてはいけません(例えば、0.001の値にする)。もし Angular Spring ConstantAngular Damping Constant がどちらも0だとワイヤーがおかしくなります。

  • “太い”ワイヤーを設定するには、 ワイヤーオブジェクトの Physical タブから Width を変更します。これはワイヤーの質量( Density で乗算)に影響を与えます。さらに他のオブジェクトとの衝突にも影響を与えます。ワイヤーオブジェクトの Visualization タブから Width をオンにすることでワイヤーの幅を表示することができます。これはビューポートにチューブとしてワイヤーを表示します。

  • ポイント毎に物理特性を設定するには、ソースジオメトリーに対してPointアトリビュートを使います(以下参照)。

  • ワイヤーオブジェクトを自己衝突させるには、ワイヤーオブジェクトの Collisions タブの Self Collisions をオンにします。これをオンにするとシミュレーションが遅くなりますが、極端に遅くなるわけではあります。高速に移動するワイヤーが貫通してしまうのであれば、Wire Solver DOPの Minimum Substeps パラメータを上げます。

便利なPointアトリビュート

ワイヤーのPointアトリビュートを使って、ワイヤーオブジェクトでセットアップされたデフォルトのプロパティを上書きしたり、スケール(アトリビュートによっては)することができます。ワイヤーで使えるアトリビュートのリストは、Wire Objectのヘルプを参照してください。

Wireソルバはワイヤージオメトリ上にアトリビュートがあれば、その値を使います。そうでないなら、Wire Objectのパラメータで定義されたデフォルトを使います。

pintoanimation

これをポイント上に1に設定するとWireソルバがポイントの位置を動かさないようにします。つまり、ソースジオメトリをその位置を固定してアニメーションさせることができます。

オブジェクトの支点にそれを設定すれば、オブジェクトがそれを基準にしてアニメーションできるので便利です。

gluetoanimation

pintoanimationと同様ですが、位置だけでなく、ソースジオメトリのポイントの法線を使ってワイヤーの向きを設定することができます。

Wireソルバは、自動的にポイントポジション、v(Velocity)Pointアトリビュート、angvel(角速度)アトリビュート、orient(方向クォータニオン)アトリビュートを最新の状態に保ちます。

サンプル:崩れそうな足場

  1. CurveまたはLineを使って足場を作成します。

  2. Wires シェルフタブのWire Objectツールを使って、カーブやラインをワイヤーオブジェクトに変換します。

  3. Wire Pin ConstraintまたはWire Spring Constraintを使って、足場の一部のポイントを拘束します。

  4. Wire Pin Constraintを使った場合、 Activation を0にするキーフレームを設定すれば、その拘束を切ることができます。

    Wire Spring Constraintを使った場合、 Activation を0にするキーフレームを設定して拘束を切るか、 Spring タブの Maximum Force または Maximum Length を設定します。もしスプリングがそのMaximum ForceまたはMaximum Lengthに達すると、拘束が切れます。

    Note

    Wire Spring Constraintのパラメータエディタの Spring タブの Maximum Force または Maximum Length で拘束が切れる設定ができます。しかし、Wire Pin Constraintには、そのようなパラメータはありません。

  5. 足場にぶつかるRigid Body Objectを作成します。

  6. シーンのオブジェクトにGravityを追加すれば、自然落下を表現することができます。

ダイナミクス

ダイナミクスの学習

衝突オブジェクト

シミュレーションタイプ

次のステップ