On this page |
Houdini19.5の新しいShape Match(形状の合致)メソッドでは、Vellumでリジッドオブジェクトのシミュレーションを行なうことができます。 オブジェクトのボリュームを使用し、元の形状にできるだけ一致するように球体を充填します。 拘束によって球体をまとめ、リジッドボディによく似た挙動をする構造を作成します。 球体と他のオブジェクトの衝突は非常に高速で計算されるため、この方法はオブジェクトの数が多い場合にも適しています。
Shape Matchは、Vellum Grainsをベースにしています。 新しい Sphere Packing メソッドには、オブジェクトを球体で満たすためのパラメータが用意されています。 球体のサイズは均一にすることも、細かいオブジェクト構造に対応できるように様々な大きさにすることもできます。 また、球体を重ねて、オブジェクトをよりそれらしく表現することも可能です。 いずれにせよ、球体は近似でしかないため、複雑なジオメトリでは、シミュレーションオブジェクト間に交差が見られる可能性が高いです。 球体の数を増やすことで衝突を改善できますが、シミュレーションの速度が低下します。
Note
Shape Matchシミュレーションには、NVIDIA Ampere (またはそれ以降の)カード用の最新ドライバが必要です。 古いチップセットアーキテクチャはサポートされていません。 問題が発生した場合は、Houdiniのメインメニューにアクセスしてください。 Edit ▸ Preferences ▸ Miscellaneous を開き、 OpenCL Device を CPU に設定します。 その後、Houdiniを再起動し、変更を適用します。
ジオメトリの準備 ¶
次のセットアップでは、Houdiniの新しいShape Matchテクノロジーの基本機能を説明します。 リジッドボディにしたいオブジェクトから始めます。
-
obj レベルで、Geometryノードを作成し、ダブルクリックしてその中に入ります。このノードは、ネットワークセットアップのコンテナとして機能します。
-
Geometryノード内で⇥ Tabを押してノードメニューにアクセスします。
rubber
と入力してTest Geometry: Rubber Toyを選択します。 -
Translate パラメータのY値を
2
に設定し、オブジェクトを(架空の)地面より上に移動します。 -
Rotate パラメータで
60,40,70
などのランダムな値を追加すると、より面白い結果が得られます。 -
Copy and Transform SOPを追加して、その入力をrubber toyの出力に接続します。このノードは、元のオブジェクトから任意の数のコピーを作成します。ここではオブジェクトを1つだけにしておきます。 Total Number パラメータを
1
に設定します。 -
Pack and Instance チェックボックスをオンにして、おもちゃの個々のパーツをグループ化します。このオプションがオフの場合には、ひれ足がおもちゃの本体から分離し、オブジェクトがバラバラになってしまいます。
Note
複数のCopy and Transform SOPを使用してオブジェクトの配列を作成したい場合は、最初のノードの Pack and Instancing チェックボックスのみをオンにするようにしてください。
Sphere Packing(球充填) ¶
Sphere Packing(球充填)メソッドはGrains(粒)がベースで、それをおもちゃのオブジェクトに設定する必要があります。
-
Vellum Configure Grain SOPを追加し、その1番目の入力を
copy1
ノードの出力に接続します。 -
Create Points from Volume チェックボックスをオンにして、ゴムのおもちゃを球体で満たします。オンにすると、ビューポートからおもちゃが消え、オブジェクトのボリュームを表わす球体のみが表示されます。後の手順でおもちゃを再度表示します。
-
Method ドロップダウンメニューを Sphere Packing に設定します。このオプションによって、球体のルックが変わり、そのオプションに使用可能なパラメータにアクセスできるようになります。これらのパラメータでは、球体のサイズや数を制御することができます。
-
Particle Size パラメータで、オブジェクトの解像度と相互作用の品質を決定します。値が小さいほど球体の数が増えますが、同時にメモリ使用量も増えます。
-
Overlapping チェックボックスをオンにすることをお勧めします。オンにすると、ベースオブジェクトがより良く表現されます。
-
ここで、 Max Radius Scale チェックボックスをオンにします。こうすると、通常は、サイズが異なる球体が作成され、充填された球体の数が減ります。
3
と入力し、充填処理を最適化します。 -
Define Pieces チェックボックスをオンにしたら、 Transfer Piece Attribute チェックボックスもオンにします。これにより、コピーとインスタンスが区別できるようになります。今はコピーが1つしかなく、
piece
アトリビュートの唯一の値は0
ですが、複数のコピーがある場合は、アトリビュートがIDとして機能します。piece
アトリビュートの値は、Geometry Spreadsheetで確認することができます。
以下の画像は、 Overlapping をオフにした状態(左)とオンにした状態(右)での、ゴムのおもちゃの球体による表現です。
拘束 ¶
充填された球体は、目指す動作をするように、拘束によって繋げておく必要があります。これは、次のノードを使って行ないます。
-
Vellum Constraints SOPを配置し、3つの入力すべてを上流のVellum Configure Grain SOPのそれに呼応する出力に接続します。
-
Constraint Type ドロップダウンメニューから Shape Match を選択します。このオプションは、元の形状を維持して、疑似リジッドボディ拘束セットアップを作成するようソルバに指示します。 Stretch セクションを見てみましょう。 Stiffness 乗数が
1e+10
というかなり高い値に設定され、拘束の剛性が高いことが分かります。 -
Group Type ドロップダウンメニューから Points を選択し、Grain(粒)間の拘束を定めます。
-
Define Pieces ドロップダウンメニューから From Attribute を選択します。
-
Piece Attrib パラメータの
class
を削除してpiece
と入力します。 -
このVellum Constraints SOPの Render/Display フラグをオンにして拘束を表示します。セットアップは以下の画像のようになっているはずです。
ソルバの設定 ¶
次のノードは、入力データを処理してシミュレーションを実行します。
-
Vellum Solver SOPを追加し、その3つの入力をVellum Constraintsのそれに呼応する出力に接続します。
-
Solver タブの Collisions サブタブの Ground Position をオンにして、地面の衝突オブジェクトを作成します。
-
Houdiniの OpenCL Device を CPU に設定する必要があった場合は(上記のNOTEを参照)、 Advanced ▸ OpenCL に移動して、 OpenCL Neighbor Search がオフまたは非アクティブになっているかどうかを確認します。このオプションがオンの場合、オブジェクトは動きません。
シミュレーションデータをオブジェクトに転送 ¶
最後のノードは、充填された球体のシミュレーションデータをゴムのおもちゃのオブジェクトに転送します。
-
Vellum Transform Pieces SOPを追加します。
-
最初の2つの入力をVellum Solver SOPのそれに呼応する出力に接続します。
-
3番目の入力を
copy1
ノードの出力に接続します。 -
Vellum Transform Pieces SOPの Piece Attribute パラメータが
piece
に設定されていることを確認します。設定されていない場合はpiece
と入力します。
ネットワークの準備が整いました。をクリックしてシミュレーションを開始します。
Note
Sphere Packing(球充填)メソッドの性質上、ベースオブジェクトの一部の領域が処理から外れることは避けられません。
これが原因で、オブジェクトの交差や相互貫通が生じる可能性があります。
相互貫通が見受けられた場合は、Vellum Configure Grain SOPの Particle Size パラメータと Max Radius Scale パラメータを調整してみてください。
また、 Isovalue パラメータの値を上げると改善する場合もあります。
Isovalue パラメータの値が0
より大きい場合、ベースオブジェクトから生成される符号付き距離フィールド(SDF)は膨張し、0
より小さい場合、そのSDFは収縮します。
VellumのShape Matchメソッドは、大量のオブジェクトを扱うのに効果的です。
大量のオブジェクト配列を作成し、それらを相互に作用させたり、Clothなどの別のVellum拘束タイプを使用することができます。
以下の画像は、300個のゴムのおもちゃです。おもちゃの動きを安定させるために、ソルバのサブステップ数を5
にしてシミュレーションしています。
複数のジオメトリ ¶
また、次の手順に従うと、相互に作用する異なるジオメトリを使用することができます。
-
Geometryノード内で、TABメニューを再度開いて
pig head
と入力します。そしてTest geometry: Pigheadを選択します。 -
Translate パラメータに
-2,3,0
と入力します。 -
Rotate パラメータに
10,-30,20
と入力します。 -
Copy and Transform SOPをもう1つ追加して、その入力をPigheadの出力に接続します。
-
Pack and Instance チェックボックスをオンにします。
-
Merge SOPを追加して、その入力に2個のcopyノードの出力を接続します。
-
Merge SOPの出力をVellum Configure Grainノードの1番目の入力に接続します。
-
Merge SOPの出力をVellum Transform Piecesの3番目の入力に接続します。
-
Vellum Constraints Grain SOPを選択し、Geometry Spreadsheetを再度開きます。そこで
piece
アトリビュートを確認します。今回は0
(ゴムのおもちゃ)と1
(豚の頭)の値が表示されているはずです。