On this page |
概要 ¶
Sticky Collisionsを使用すると、無限大の強度を持つ新しい拘束を作成して、ソルバが衝撃を検出した時にオブジェクト同士を引っ付けることができます。 この衝突メソッドは、オブジェクトが分離してから引き戻されるといった不具合を回避するのに役立ちます。 SOPソルバによって、システムの拘束とその挙動を完全に制御することができます。 拘束ネットワークのセットアップとカスタマイズに役立つ情報が様々なアトリビュートによって用意されています。 また、オブジェクトが粘着オブジェクトとしてタグ付けされないようにしたり、衝突ポイントの数を設定したり、引っ付けられるオブジェクトの数を制限することもできます。
Sticky Collisionsは、DOPとSOPの両方でサポートされています。 DOPセットアップでは、Bullet RBD Solver DOPの Sticky 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: ターゲットオブジェクトを作成する ¶
ターゲットオブジェクトはボックスで、それを粉砕していきます。
-
Create シェルフのBoxツールを使用して、ボックスを作成します。
-
box_object1
をダブルクリックしてジオメトリレベルに入ります。 -
ボックスの Size 値を
5
、0.1
、5
に設定して、薄いガラス板を作成します。 -
Center パラメータのY値を
ch("sizey")/2
に変更します。このエクスプレッションは、ボックスの Scale.Y 値を受け取って、それを半分にします。これにより、ボックスはその厚さに関係なく、グランドプレーンに直接配置されます。グランドプレーンは後で追加します。
ステップ2: オブジェクトを粉砕する ¶
Houdiniには、オブジェクトを粉砕するための方法がいくつかあります。最も便利で現実的な方法は、マテリアルベースの粉砕です。
-
RBD Material Fracture SOPを追加し、その1番目の入力をBox SOPの出力に接続します。
-
Primary Fracture タブで、 Fracture Level を
1
に設定し、あまり複雑でない粉砕パターンを作成します。 -
Cell Points セクションで、 Scatter Points を
400
に上げてピースの数を増やします。 -
Fog Volume セクションで、 Noise Frequency を
2
、0
、2
に変更します。 -
Noise Offset の値を
0
、0
、2
に変更します。これにより、XYZ軸に沿って亀裂が移動し、断片がより均等に分布します。次の画像は、デフォルト設定と変更後の設定の違いを示したものです。
ステップ3: ターゲットオブジェクトとしてタグ付けする ¶
この手順では、ターゲットオブジェクトをリジッドボディとしてタグ付けします。
-
RBD Configure SOPを追加し、その1番目の入力をRBD Material Fractureノードの1番目の出力に接続します。
-
Attributes セクションで、 Name Prefix を
target
に設定します。
ステップ4: 粘着オブジェクトを作成する ¶
粘着オブジェクトは、初期の線形速度と角速度を持つチューブです。そのチューブが ターゲット の立方体上を転がって、地面の断片を集めます。
-
Tube SOPを配置します。
-
Orientation ドロップダウンメニューで、 Z Axis を選択します。
-
End Caps をオンにして、閉じた円柱にします。
-
Center パラメータを使用して、チューブを
3
、1.1
、0
に移動します。 -
Height を
2
に設定します。 -
Columns の値を
60
に変更し、より滑らかなサーフェスにします。 -
チューブに初期速度を指定するために、Attribute Adjust Vector SOPノードを2つ追加します。
-
1つ目 のノードの入力をチューブの出力に接続します。
-
2つ目 のノードの入力を1つ目のAttribute Adjust Vector SOPの出力に接続します。
-
2つのノードの Attribute Name パラメータに移動し、 1つ目 のノードに
v
、 2つ目 のノードにw
と入力します。これらのアトリビュートは、それぞれ線形速度(v
)と角速度(w
)を意味しています。 -
v
の Constant Value を-5.5
、0
、0
に設定します。これにより、チューブがマイナスX方向に移動します。 -
w
の Constant Value を0
、0
、8
に設定します。これにより、チューブがZ軸を中心にスピンします。
ステップ5: Sticky Collisionsを作成する ¶
粘着 オブジェクトのブランチの最後のノードは、チューブを、Sticky Collisionsが設定されたリジッドボディに変換します。
-
RBD Configure SOPを追加し、その1番目の入力を最後のAttribute Adjust Vectorノード(角速度
w
のノード)の出力に接続します。 -
Attributes セクションで、 Name Prefix を
sticky
に設定します。 -
Sticky Collisions セクションに移動し、 Min Sticky Collision Impulse をオンにします。Impulse(力積)はサブステップに依存し、調整が少し難しい場合があります。衝撃が十分に強い場合、ソルバは拘束ネットワークにGlue(接着)拘束を追加します。
-
パラメータの値を
15
に変更し、チューブに引っ付くピースを増やします。
ステップ6: ブランチをマージする ¶
セットアップを完成させるには、シミュレーション用の 粘着 オブジェクトと ターゲット オブジェクトのブランチをマージします。
-
Merge SOPを追加し、その入力を2つのRBD Configure SOPの1番目の出力に接続します。
-
RBD Bullet Solver SOPを追加し、その1番目の出力をMerge SOPの出力に接続します。
-
Collision タブの Ground Collision セクションに移動します。 Ground Type ドロップダウンメニューから Ground Plane を選択し、無限の衝突平面を作成します。
-
プレイバーで Play ボタンを押して、シミュレーションを開始します。以下の動画のような結果が表示されるはずです。
Tip
線形速度、角速度、Impulse(力積)の閾値、チューブの位置を色々と変えてみて、パラメータ値の感覚をつかんでください。
アトリビュート ¶
Sticky Collisionsでは、新しいアトリビュートがいくつか導入され、シミュレーション中にそれらを監視すると役立つ場合があります。
RBD Configure SOPの Sticky Collisions パラメータは、minstickycollisionimpulse
、maxstickycollisionobjects
、maxstickycollisionpoints
といったPointアトリビュートとしても利用可能です。
これらの値は、パラメータ値に直接呼応しています。
Geometry Spreadsheetでそれらを確認するには、Sticky CollisionsがアクティブなRBD Configure SOPを選択し、Geometry Spreadsheetで Points モードをオンにします。
ソルバは、様々なPrimitiveアトリビュートも処理します。
collision_depth
は、衝突ポイントが表面からどのくらい深かったかを示します。
newstickycollisions
は、最後のタイムステップの間に作成された新しい拘束を含んだプリミティブグループです。
これは、SOP Solverを使用して拘束を制御したり変更したい場合に重要です。
stickycollisions
は、Sticky Collisionsによって作成されたすべての拘束を含んだプリミティブグループです。
Note
ソルバは、Sticky Collisionsから拘束を追加する時、オブジェクトのジオメトリではなく、拘束ジオメトリにPrimitiveアトリビュート/グループを作成します。
これらのアトリビュートを監視するには、以下の操作を行ないます。
-
RBD Bullet Solver SOPを選択します。
-
Geometry Spreadsheetペインで、最初のドロップダウンメニューから Constraint Geometry を選択します。
-
Primitives モードをオンにします。
How to ¶
To... | Do this |
---|---|
粘着性を制御する |
Min Sticky Collision Impulse パラメータは、オブジェクトを粘着オブジェクトに引っ付けるために必要な最小の衝撃を決定します。 Min Sticky Collision Impulse はサブステップに依存し、有効な値を見つけるのは少し難しい場合があります。オブジェクトを壁に衝突させたいとしましょう。
サブステップが |
オブジェクトが揺れないようにする |
デフォルトでは、ソルバはGlue(接着)拘束を作成します。この拘束は、1点の拘束/接触ポイントを使って完全に固定された取り付けを生成します。 しかし、拘束タイプをある程度の動きを許容するソフト拘束に変更した場合、オブジェクトがサーフェスに当たった時に、その拘束のアンカーポイントを基点に揺れてしまいます。 このような挙動を回避するには、 Max Sticky Collision Points を増やしてください。 値が大きいほど、接触ポイントと拘束が増えます。 |
オブジェクトを除外する |
Sticky Collision Ignore は無視されるオブジェクトを受け入れます。 オブジェクトは依然として衝突できますが、引っ付きはしません。 オブジェクトが1体のキャラクタまたは特定のオブジェクトにのみ引っ付くようにしたい場合(例えば、磁石にするかしないか制御したい場合)、この操作が必要になることがよくあります。 オブジェクトリストだけでなく、 |
ターゲットに引っ付くオブジェクトの数を制限する |
Max Sticky Collision Objects を使用して、ターゲットに引っ付くオブジェクトの数を定義することができます。7つのオブジェクトがターゲットに衝突し、そのうち3つだけが引っ付くとします。このパラメータの値を |
インスタンス化したリジッドボディを使用する |
ワークフローは、上記の基本のSOPセットアップで説明したものと同じです。 例えば、オブジェクトをばら撒き、それらをリジッドボディとして設定することができます。 次に、粘着オブジェクトを追加して、ばら撒かれたインスタンスに衝突させます。 |
Sticky Collisionの拘束のStiffness(剛性)を制御する |
SOP Solver DOPをRBD Constraint Properties SOPと組み合わせて使用します。 SOP Solverは、Bulletソルバからシミュレーションを引き継ぎます。 その後、拘束ノードを使用して拘束の Strength 設定し、拘束をより硬くしたりソフトにすることができます。 SOP Solverを正しく設定するには、いくつかの手順が必要です。
以下のビデオは、ソフト拘束のセットアップを示したものです。ピースがチューブの後ろに引きずられる様子に注目してください。 |
挙動に問題があるオブジェクトを修正する |
|