On this page |
固有ID、オブジェクトID、オブジェクト名 ¶
各オブジェクトとデータアイテムには 普遍的に固有な IDがあります。この128ビットの数字がどの時間、どのマシン、どのシミュレーションにおいても固有です。この値を使うことで、いつデータパケットが共有され、再作成されているのかタイムステップ毎に把握することができます。固有IDはGeometry Spreadsheet Viewでオブジェクトとデータアイテムのフィールドとして表示されます。
各オブジェクトには、 オブジェクトID があります。これは シミュレーション でオブジェクトを個別に識別する単なる整数です。普遍的な固有IDとは違い、別々のシミュレーションネットワーク、コンピュータ、シミュレーションの実行などにわたって 固有というわけではありません 。
各オブジェクトには、 オブジェクト名 もあります。オブジェクト名は本質的に便宜的なものです。名前を設定しておけばオブジェクトIDの番号よりも覚えやすく認識しやすいです。オブジェクト名は 固有ではありません 。それは同じシミューレション内においてもそうです。複数のオブジェクトが同じ名前を持つことができます(これは、ある状況では便利な場合があります)。
オブジェクト作成ノード(例えば、RBD Object DOPまたはEmpty Object DOP)では、 Object Name パラメータが作成するオブジェクトの名前を制御します。もし、一度に複数のオブジェクトを作成するために Number of Objects パラメータを使うなら、$OBJ
ローカル変数を利用してオブジェクトの名前にオブジェクト番号を追加することができます。例えば、 Object Name をbrick$OBJ
にして Number of Objects を3に設定すると、Houdiniはbrick0
、brick1
、brick2
の名前のオブジェクトを作成します。
Geometry Spreadsheet Viewでは、通常は名前でオブジェクトを表示しますが、代わりにオブジェクトIDの表示に切り替えることもできます。
モーションブラーのレンダリングが結果を変える可能性 ¶
モーションブラーのレンダリングはシミュレーションをシャッターオープン(フレーム番号-シャッター時間)とシャッタークローズで評価します(例えば、フレーム1.7とフレーム2)。この強制的なサブステップがシミュレーションの結果を変えます。 これを修正するには、シミュレーションをディスクにキャッシュ化してTime Blend SOPを使ってください。
データ名 ¶
各オブジェクトとデータには、 Data Name があります。ソルバはオブジェクトのデータを 名前 で探します。例えば、RBD Solver DOPは、オブジェクトに対してForces
という名前のデータフォルダを探し、その中にあるフォースデータを使ってオブジェクトの位置を変更します。
ノードはデータを名前で追加するので、もし同じタイプのノードを複数使っていて(例えば、Fan Force DOPを2つ使っている)、どちらもForces/Fan
としてデータを追加していれば、片方のノードが他のノードのデータを上書きしてしまいます。そこで、Houdiniでは Unique Data Name オプションが用意されていて、データ名になにかしらのテキストを付け加えることでデータ名を固有にすることができます。
Fan Force DOPの例では、その Unique Data Name チェックボックスは、そのノードの Data Options タブの下部にあります。
例えば、次のネットワークを例に説明します:
2つのFan Force DOPの Unique Data Name が有効である限り、RBDオブジェクトにはForces/Fan_fan1
とForces/Fan_fan2
といった別々のフォースデータが追加されます。ソルバはForces
フォルダのフォースを使うのでうまく機能します。
もし、同じ名前のノードで新しい方のノードが古い方のノードのデータを上書きしたいのであれば、 Unique Data Name をオフにすればいいでしょう。この場合では、古いノードと新しいノードの活動化をアニメーションする場合に役に立ちます。例えば、別々の2つのFanフォースノードの設定/位置を切り替えるときです。ノードは左から右、上から下に評価されます。同じデータ名を使って、あるノードを他のノードに上書きする方法をより詳細に制御したいなら、“set”ポップアップメニュー(以下参照)を使うこともできます。
データの共有 ¶
-
各データに対して、Houdiniはオブジェクト毎にデータのコピーを新しく追加、または、オブジェクト間に同じデータを 共有 することができます。
-
タイムステップ毎に、Houdiniはシミュレーション内のオブジェクトすべてのコピーを新しく作成します。
-
各データに対して、Houdiniはタイムステップ毎にデータのコピーを新しく作成、または 、タイムステップにわたって同じデータを共有することができます。
Data Sharing オプションはオブジェクト間で、そしてタイムステップにわたってデータを共有することができます。
デフォルトは、 Do Not Share Data です。なぜなら、ほとんど予想通りの結果が得られるからです。しかし、安全にオブジェクト間や全体の時間にわたってデータを共有できることがわかっているなら、共有オプションによってシミュレーションに費やされるメモリを減らすことができます。特にデータが共有可能で、タイムステップ毎に何万ものオブジェクトにデータをコピーするような場合は、飛躍的にメモリ使用量を減らすことができます。
グループ ¶
Group Dynamic Objects DOPを使えばシミュレーションで使うオブジェクトをグループ化できます。これは、パーティクルネットワークでパーティクルをグループ化したり、ジオメトリネットワークでフェースをグループ化するのと同じことです。
オブジェクトIDやオブジェクト名でオブジェクトをグループ化することができます。また、グループ名でも他のグループをグループ化することができます。
グループにはダイナミックシミュレーションで3つの使い方/効果があります:
-
グループをセットアップすれば、複雑なマスクを使わなくても、グループ名でオブジェクトをまとめて参照することができます。
-
技術的に、アフェクターリレーションシップをグループ間に接続することができます。一方、個々のオブジェクト間ではそれができません。
-
グループ内のオブジェクトはお互い影響し合うので、グループ内のすべてのオブジェクトは常に同期して処理されなければなりません。
衝突表現 ¶
RBD Solverには、2通りの衝突表現があります。それは、 ボリューム と 薄いプレート です。通常のオブジェクトにはボリュームベースの衝突を使い、体積のないオブジェクトには薄いプレートの衝突を使います。
ボリュームベースの衝突検出では、各オブジェクトの ボリューム表現 を作成します。オブジェクトのボリューム表現は可視化することができ、RBD Objectノードのパラメータから Collision タブの Volume タブのオプションでそれをどのように作成するのか制御することができます。
衝突を検出するために、Houdiniは、オブジェクトのサーフェス表現と他のオブジェクトのボリューム表現の交差、そしてその逆のパターンの交差も計算します。
ジオメトリのデフォルトのサーフェス表現は、オブジェクトのポイントです。この表現はジオメトリの密度が高ければうまく動きますが、エッジがシャープでポイントが少ないオブジェクトでは、うまく動きません。別の方法として、 エッジ を使ったサーフェス表現があります。オブジェクトのパラメータから Collisions タブの Surface タブで Surface Representation を Edges に設定します。
エッジ表現は、ポイントを使った場合よりも重く、複雑なモデルに対しては無駄が多いです。とはいえ、フェースにポイントを使わないキューブのようなジオメトリタイプでは、エッジを使用する必要があります。
オブジェクトに体積がない(例えば、紙や地面)なら、オブジェクトの Collision タブから Use Volume Based Collision Detection をオフにすれば、Houdiniはそれを薄いサーフェスとして処理します。
薄いプレートオブジェクトがボリュームベースのオブジェクトと衝突する場合は、ボリュームベースの衝突を使います。2つの薄いプレートオブジェクトが衝突する場合、Houdiniは三角形単位の衝突テストを使います。
薄い平面オブジェクトは上手く積み重なりません。もし、それらを積み重ねる必要があるなら、DOP Networkコンテナノードのサブステップの最小値を増やしてください。