Houdini 20.0 破壊

Sticky Collisions

On this page

概要

Sticky Collisionsを使用すると、無限大の強度を持つ新しい拘束を作成して、ソルバが衝撃を検出した時にオブジェクト同士を引っ付けることができます。 この衝突メソッドは、オブジェクトが分離してから引き戻されるといった不具合を回避するのに役立ちます。 SOPソルバによって、システムの拘束とその挙動を完全に制御することができます。 拘束ネットワークのセットアップとカスタマイズに役立つ情報が様々なアトリビュートによって用意されています。 また、オブジェクトが粘着オブジェクトとしてタグ付けされないようにしたり、衝突ポイントの数を設定したり、引っ付けられるオブジェクトの数を制限することもできます。

Sticky Collisionsは、DOPとSOPの両方でサポートされています。 DOPセットアップでは、Bullet RBD Solver DOPSticky Collisions サブペインで、新しい拘束を生成する内部および外部の拘束ネットワークを指定することができます。 これらのパラメータは、新しい拘束をどの拘束ネットワークに追加するのかを制御します。

Note

Sticky Collisionsは、Houdiniの群衆システムと組み合わせても上手く動作します。 詳細は、ラグドールのシミュレーションを参照してください。

基本のSOPセットアップ

Sticky Collisionsは、基本的な衝突検出用のRBD Configure SOPを使用して作成されます。 そこには Sticky Collisions サブペインがあり、様々なパラメータが含まれています。 このシステムは、 粘着 オブジェクトと ターゲット オブジェクトを使用して動作します。 両方の名前は、区別できるようにするための定義にすぎません。

基本のネットワークは、粘着部分用とターゲット用の2つのブランチで構成されます。 最終的に、両方のブランチはマージし、RBD Bullet Solver SOPソルバまたはDOP Network SOPに接続します。

例えば、Sticky Collisionsを説明するために、円柱( 粘着 )と衝突する亀裂の入った地面オブジェクト( target )をシミュレーションしたいと思います。 円柱が亀裂の入った地面と接触すると、いくつかの断片がターゲットオブジェクトに引っ付きます。

ステップ1: ターゲットオブジェクトを作成する

ターゲットオブジェクトはボックスで、それを粉砕していきます。

  1. Create シェルフのBoxツールを使用して、ボックスを作成します。

  2. box_object1をダブルクリックしてジオメトリレベルに入ります。

  3. ボックスの Size 値を50.15に設定して、薄いガラス板を作成します。

  4. Center パラメータのY値をch("sizey")/2に変更します。このエクスプレッションは、ボックスの Scale.Y 値を受け取って、それを半分にします。これにより、ボックスはその厚さに関係なく、グランドプレーンに直接配置されます。グランドプレーンは後で追加します。

ステップ2: オブジェクトを粉砕する

Houdiniには、オブジェクトを粉砕するための方法がいくつかあります。最も便利で現実的な方法は、マテリアルベースの粉砕です。

  1. RBD Material Fracture SOPを追加し、その1番目の入力をBox SOPの出力に接続します。

  2. Primary Fracture タブで、 Fracture Level1に設定し、あまり複雑でない粉砕パターンを作成します。

  3. Cell Points セクションで、 Scatter Points400に上げてピースの数を増やします。

  4. Fog Volume セクションで、 Noise Frequency202に変更します。

  5. Noise Offset の値を002に変更します。これにより、XYZ軸に沿って亀裂が移動し、断片がより均等に分布します。次の画像は、デフォルト設定と変更後の設定の違いを示したものです。

ステップ3: ターゲットオブジェクトとしてタグ付けする

この手順では、ターゲットオブジェクトをリジッドボディとしてタグ付けします。

  1. RBD Configure SOPを追加し、その1番目の入力をRBD Material Fractureノードの1番目の出力に接続します。

  2. Attributes セクションで、 Name Prefixtargetに設定します。

ステップ4: 粘着オブジェクトを作成する

粘着オブジェクトは、初期の線形速度と角速度を持つチューブです。そのチューブが ターゲット の立方体上を転がって、地面の断片を集めます。

  1. Tube SOPを配置します。

  2. Orientation ドロップダウンメニューで、 Z Axis を選択します。

  3. End Caps をオンにして、閉じた円柱にします。

  4. Center パラメータを使用して、チューブを31.10に移動します。

  5. Height2に設定します。

  6. Columns の値を60に変更し、より滑らかなサーフェスにします。

  7. チューブに初期速度を指定するために、Attribute Adjust Vector SOPノードを2つ追加します。

  8. 1つ目 のノードの入力をチューブの出力に接続します。

  9. 2つ目 のノードの入力を1つ目のAttribute Adjust Vector SOPの出力に接続します。

  10. 2つのノードの Attribute Name パラメータに移動し、 1つ目 のノードにv2つ目 のノードにwと入力します。これらのアトリビュートは、それぞれ線形速度(v)と角速度(w)を意味しています。

  11. vConstant Value-5.500に設定します。これにより、チューブがマイナスX方向に移動します。

  12. wConstant Value008に設定します。これにより、チューブがZ軸を中心にスピンします。

ステップ5: Sticky Collisionsを作成する

粘着 オブジェクトのブランチの最後のノードは、チューブを、Sticky Collisionsが設定されたリジッドボディに変換します。

  1. RBD Configure SOPを追加し、その1番目の入力を最後のAttribute Adjust Vectorノード(角速度wのノード)の出力に接続します。

  2. Attributes セクションで、 Name Prefixstickyに設定します。

  3. Sticky Collisions セクションに移動し、 Min Sticky Collision Impulse をオンにします。Impulse(力積)はサブステップに依存し、調整が少し難しい場合があります。衝撃が十分に強い場合、ソルバは拘束ネットワークにGlue(接着)拘束を追加します。

  4. パラメータの値を15に変更し、チューブに引っ付くピースを増やします。

ステップ6: ブランチをマージする

セットアップを完成させるには、シミュレーション用の 粘着 オブジェクトと ターゲット オブジェクトのブランチをマージします。

  1. Merge SOPを追加し、その入力を2つのRBD Configure SOPの1番目の出力に接続します。

  2. RBD Bullet Solver SOPを追加し、その1番目の出力をMerge SOPの出力に接続します。

  3. Collision タブの Ground Collision セクションに移動します。 Ground Type ドロップダウンメニューから Ground Plane を選択し、無限の衝突平面を作成します。

  4. プレイバーで Play ボタンを押して、シミュレーションを開始します。以下の動画のような結果が表示されるはずです。

    Tip

    線形速度、角速度、Impulse(力積)の閾値、チューブの位置を色々と変えてみて、パラメータ値の感覚をつかんでください。

アトリビュート

Sticky Collisionsでは、新しいアトリビュートがいくつか導入され、シミュレーション中にそれらを監視すると役立つ場合があります。 RBD Configure SOPの Sticky Collisions パラメータは、minstickycollisionimpulsemaxstickycollisionobjectsmaxstickycollisionpointsといったPointアトリビュートとしても利用可能です。 これらの値は、パラメータ値に直接呼応しています。 Geometry Spreadsheetでそれらを確認するには、Sticky CollisionsがアクティブなRBD Configure SOPを選択し、Geometry Spreadsheetで Points モードをオンにします。

ソルバは、様々なPrimitiveアトリビュートも処理します。 collision_depthは、衝突ポイントが表面からどのくらい深かったかを示します。 newstickycollisionsは、最後のタイムステップの間に作成された新しい拘束を含んだプリミティブグループです。 これは、SOP Solverを使用して拘束を制御したり変更したい場合に重要です。 stickycollisionsは、Sticky Collisionsによって作成されたすべての拘束を含んだプリミティブグループです。

Note

ソルバは、Sticky Collisionsから拘束を追加する時、オブジェクトのジオメトリではなく、拘束ジオメトリにPrimitiveアトリビュート/グループを作成します。

これらのアトリビュートを監視するには、以下の操作を行ないます。

  1. RBD Bullet Solver SOPを選択します。

  2. Geometry Spreadsheetペインで、最初のドロップダウンメニューから Constraint Geometry を選択します。

  3. Primitives モードをオンにします。

How to

To...Do this

粘着性を制御する

Min Sticky Collision Impulse パラメータは、オブジェクトを粘着オブジェクトに引っ付けるために必要な最小の衝撃を決定します。

Min Sticky Collision Impulse はサブステップに依存し、有効な値を見つけるのは少し難しい場合があります。オブジェクトを壁に衝突させたいとしましょう。 サブステップが2しかない場合、ソルバは、オブジェクトが既に壁の半分まで通り抜けてしまっている時に衝突を認識してしまう可能性があります。 この場合では、オブジェクトを再び壁から押し出すためには、より大きなImpulse(力積)が必要となります。 10のサブステップでシミュレーションした場合、衝突はより早く検出され、衝突ポイントは衝突オブジェクト表面に近くなります。 この場合では、より小さなImpulse(力積)で済みます。

オブジェクトが揺れないようにする

デフォルトでは、ソルバはGlue(接着)拘束を作成します。この拘束は、1点の拘束/接触ポイントを使って完全に固定された取り付けを生成します。 しかし、拘束タイプをある程度の動きを許容するソフト拘束に変更した場合、オブジェクトがサーフェスに当たった時に、その拘束のアンカーポイントを基点に揺れてしまいます。 このような挙動を回避するには、 Max Sticky Collision Points を増やしてください。 値が大きいほど、接触ポイントと拘束が増えます。

オブジェクトを除外する

Sticky Collision Ignore は無視されるオブジェクトを受け入れます。 オブジェクトは依然として衝突できますが、引っ付きはしません。 オブジェクトが1体のキャラクタまたは特定のオブジェクトにのみ引っ付くようにしたい場合(例えば、磁石にするかしないか制御したい場合)、この操作が必要になることがよくあります。

オブジェクトリストだけでなく、* ^groundなどのワイルドカードを使用することもできます。 この例だと、地面だけが粘着性を持ちます。

ターゲットに引っ付くオブジェクトの数を制限する

Max Sticky Collision Objects を使用して、ターゲットに引っ付くオブジェクトの数を定義することができます。7つのオブジェクトがターゲットに衝突し、そのうち3つだけが引っ付くとします。このパラメータの値を3にすると、この制限が作成されます。これは、当たった最初のオブジェクトにのみ矢が引っ付き、他のオブジェクトは無視される場合などに便利です。

インスタンス化したリジッドボディを使用する

ワークフローは、上記の基本のSOPセットアップで説明したものと同じです。 例えば、オブジェクトをばら撒き、それらをリジッドボディとして設定することができます。 次に、粘着オブジェクトを追加して、ばら撒かれたインスタンスに衝突させます。

Sticky Collisionの拘束のStiffness(剛性)を制御する

SOP Solver DOPRBD Constraint Properties SOPと組み合わせて使用します。 SOP Solverは、Bulletソルバからシミュレーションを引き継ぎます。 その後、拘束ノードを使用して拘束の Strength 設定し、拘束をより硬くしたりソフトにすることができます。 SOP Solverを正しく設定するには、いくつかの手順が必要です。

  1. Sticky Collisions SOPのセットアップ(基本のSOPセットアップで説明したものと同様)で、RBD Bullet Solver SOPをダブルクリックし、その中に入ります。

  2. SOP Solverを追加し、その出力をPOSTSOLVEノードの入力に接続します。

  3. Data NameConstraintGeometryに設定し、シミュレーションの拘束を処理します。

  4. SOP Solverをダブルクリックして、その中に入ります。

  5. RBD Constraint Properties SOPを追加します。

  6. dop_geometryの出力をrbdconstraintproperties12番目 の入力に接続します。

  7. OUTノードの入力をrbdconstraintproperties12番目 の出力に接続します。

  8. Constraint Groupnewstickycollisionsと入力します。

  9. Constraint Type ドロップダウンメニューから、 Soft を選択します。

  10. Soft セクションで、 Stiffness パラメータを使用してフォースの強度を制御します。

以下のビデオは、ソフト拘束のセットアップを示したものです。ピースがチューブの後ろに引きずられる様子に注目してください。

挙動に問題があるオブジェクトを修正する

  • 挙動に問題があるオブジェクトのよくある原因は、RBD Configureノードの Name Prefix パラメータです。 複数のRBD Configureノードがあるシーンでは、各 Name Prefix に一意の名前を選択することが不可欠です。

  • SOP SolverにRBD Constraint Propertiesノードが埋め込まれているにも関わらず、ソフト拘束が表示されない場合は、RBD Constraint Properties SOPの 2番目 の入力と出力がdop_geometryノードとOUTノードに接続されているかどうかを確認してください。

破壊

材質別のRBD粉砕

次のステップ

材質ベースの破壊の紹介

  • はじめよう

    ソースシーンを読み込んで、それについて見ていきましょう。

  • チュートリアル

    ステップバイステップで学ぶ材質ベースの破壊入門。