On this page |
Terrain Object DOPは、DOPシミュレーション内にStaticオブジェクトを作成します。 このノードは、まさにStatic Object DOPに似ていますが、 ソースジオメトリを操作して、薄いジオメトリ(例えば、グリッドやVEX Mountain SOPで修正されたグリッド)から役立つボリューム表現を生成します。 この薄いジオメトリは、他の方法では役立つボリューム表現を生成することはできないでしょう。
ボリューム表現は、シミュレーションで他のソルバと上手く相互作用することができます。 このDOPで作成されたボリューム表現を見る(そして、ソースジオメトリとうまく一致させる)には、 Show Collision Guide Geometry パラメータを有効にするやり方が良いです 悪いボリュームは、 Base Normal パラメータを修正することで訂正できることがあります。
このオブジェクトの位置とVelocityは、ソースオブジェクトのアニメーションするトランスフォーメーションから抽出されます。 そのため、Terrainオブジェクトが必ずしも静止するとは限りません。 Terrainオブジェクトはシミュレーションによって移動することができ、また変形することもできますが、シミュレーション内の他のオブジェクトから影響を受けません。
Terrain Objectの使い方 ¶
-
Terrain Objectに変換するオブジェクトを選択します。
-
Rigid Bodies タブのTerrain Objectツールをクリックします。
Note
色々なフレームで、Terrain Objectを移動、回転、スケール、キーフレームをすることができます。
パラメータ ¶
Creation Frame Specifies Simulation Frame
作成フレームが、グローバルのHoudiniフレーム($F
)またはシミュレーション固有のフレーム($SF
)のどちらを参照するか決めます。
後者は、DOP Networkレベルのオフセット時間とスケール時間の影響を受けます。
Creation Frame
オブジェクトが作成されるフレーム番号。 現行フレーム番号がこのパラメータの値と同じ時にだけオブジェクトが作成されます。 つまり、DOP Networkは、指定したフレームでのタイムステップを評価しなければならないことを意味します。そうしないとオブジェクトが作成されません。
例えば、この値を3.5に設定すれば、必ずDOP Networkがフレーム3.5でタイムステップを持つように、DOP Networkの Timestep パラメータを1/(2*$FPS)
に変更しなければなりません。
Object Name
作成されるオブジェクトの名前。 これはGeometry Spreadsheet Viewで表示される名前で、この特定のオブジェクトを外部から参照するために使用します。
Note
同じ名前でたくさんのオブジェクトを持つことができますが、それでは参照の書き込みが困難になるので、名前には$OBJID
のような変数を使用することを推奨します。
SOP Path
このオブジェクトのジオメトリとなるSOP(または、表示SOPを使用する場合にはObject)のパス。
このパラメータには、ObjectやSOPのリストも指定することができ、ワイルドカード、オペレータグループ、バンドルを使用することができます。
複数のObjectやSOPがこの文字列に一致すると、一致したSOP毎に、別々のシミュレーションオブジェクトが作成されます。
OBJ Path
Terrainオブジェクトの動きの制御に使用されるオブジェクトのパス。 このオブジェクトのアニメーションするワールド空間トランスフォーメーションは、このオブジェクトの位置やそのVelocityの計算に使用されます。
Base Normal
ボリュームを生成するために、ソースサーフェスの投影先の平面の法線を定義します。 このパラメータは、ソースジオメトリの主軸の向きがY軸でない時に役に立ちます。
このパラメータを操作する時、作成されるボリューム表現を表示するために、 Show Collision Guide Geometry パラメータをオンにしてください。
Use Deforming Geometry
オブジェクトのジオメトリをタイムステップ毎に、選択したSOPから引き出します。 SOPのジオメトリがアニメーションするなら、Terrainオブジェクトのジオメトリもアニメーションします。
Create Active Object
オブジェクトの初期アクティブ状態を設定します。非アクティブオブジェクトは、シミュレーションで他のオブジェクトに反応しません。 Terrainオブジェクトがアクティブな場合、そのオブジェクトをStatic Solverに接続してください。 このソルバは、Terrainオブジェクトを非アクティブであるかのように動作させます。
Display Geometry
ジオメトリをビューポートに表示するかどうか制御します。シミュレーションが変わっても、そのシミュレーションをリセットしません。
Display Extrusion
Terrainジオメトリは、 Base Normal 方向に押し出されて、最終的な閉じたボリュームを作成します。 この押し出されたサーフェスを表示することで、その Base Normal が正しいか判断することができます。
Physical ¶
Bounce
オブジェクトの弾力性を指定します。 Bounceが1.0の2つのオブジェクトが衝突すると、それらのオブジェクトはエネルギーを消失せずに跳ね返ります。 Bounceが0.0の2つのオブジェクトが衝突すると、それらのオブジェクトは停止します。
Bounce Forward
オブジェクトの接線方向の弾力性。Bounce Forwardが1.0の2つのオブジェクトが衝突すると、それらの接線方向の動きは、摩擦からの影響のみを受けます。 Bounce Forwardが0.0の2つのオブジェクトが衝突すると、それらの接線方向の動きは、一致します。
Friction
オブジェクトの摩擦係数を指定します。 0の値は、摩擦なしを意味します。
これは、接線Velocityが衝突と静止接触で影響を受ける強さを制御します。
Dynamic Friction Scale
滑るオブジェクトは、静止しているオブジェクトよりも摩擦係数が低いです。このパラメータは、2つのオブジェクトに関連したスケール係数です。 これは摩擦係数ではなくて、0から1の間のスケールです。
1の値は、動摩擦と静摩擦が同じになることを意味します。0の値は、静摩擦を越えると、オブジェクトが摩擦なしで作用することを意味します。
Temperature
Temperatureはオブジェクトの温度をマークします。このパラメータは、燃料の着火ポイントまたは浮力計算のためにガスシミュレーションで使用します。
これは現実世界の温度スケールとは直接関係しないので、環境温度は通常では0と見なされます。
Collisions ¶
Volume ¶
Use Volume Based Collision Detection
このオプションを有効にすると、RBD solverが衝突検出に対して、このオブジェクトのボリューム表現を使用します。
ボリューム表現は、一時的な相互貫通に寛容的なので、非常に高速な衝突検出と非常に強固な結果になります。 このデメリットは、ボリューム表現を使用すると、グリッドや中が空洞の球を表現することができないことです。
このトグルをオフにすると、衝突検出がボリュームベースではなくジオメトリベースになります。 この場合、衝突コードは、時間軸で移動するオブジェクトの軌跡を追跡して、衝突を判定します。 これにより、ボリュームベースの衝突検出よりも正確な結果を取得することができます。 これを動作させるには、 Cache Simulation を必ずDOPネットワーク上で有効にしてください。
Collision Guide
衝突検出に使用される内部表現が可視ジオメトリに変換されます。 これは、衝突検出での問題をデバッグするのに役に立ちます。
このパラメータは、ガイドジオメトリのカラーを制御します。
Mode
Ray Intersect
ジオメトリと光線の交差を使用して、ジオメトリの正確なボリューム表現を作成します。
Meta Balls
光線を使用してポイントが内側/外側を判断するのではなく、メタボールフィールドを評価します。
これは、メタボールだけで構成されているジオメトリの Laser Scanning を無効にして使用してください。
Implicit Box
ジオメトリの境界ボックスを計算して、その境界ボックスを正確に満たすボリューム表現を作成します。 このボックスは常にDOPオブジェクトのローカル空間と座標軸が平行で、Positionデータで設定します。
Note
Use Object Transform は、オブジェクトトランスフォームをジオメトリのトランスフォームにベイクして、 Position Data をワールド空間のままにします。 これをオフにすると、オブジェクトトランスフォームが Position Data に送られ、オブジェクトのローカル空間の向きが変わります。
Implicit Sphere
ジオメトリの境界球を計算して、その境界球を正確に満たすボリューム表現を作成します。
Implicit Plane
ジオメトリの境界ボックスを計算して、その一番小さい軸方向にそのボックスを分割するボリューム表現を作成します。 その平面より下側がすべて内側、上側がすべて外側になります。
このモードは、グランド平面または移動不可の壁を作成するのに主に役に立ちます。
Minimum
サーフェスまたはカーブまでの距離を使用します。 Offset Surfaceが0なら、ボリュームは作成されません。 プラスのOffset Surfaceはオブジェクトのサーフェスからオフセットしたボリュームを作成します。 これは、薄いオブジェクトまたはワイヤーを実際のソリッドに変換するのに役に立ちます。
Volume Sample
このモードでは分割数が無視され、その代わりに、ジオメトリ内の1番目のボリュームまたはVDBのプリミティブから分割数が計算されます。 ソースボリュームのボクセルサイズに合うように分割数が計算されます。 ボリュームプリミティブはそのままサンプリングされて、符号付き距離フィールドとして扱われます。 これは、ソースがIso OffsetまたはVDB From PolygonsのSOPの出力であることが前提です。 正しい符号付き距離フィールドでない場合、RBD衝突で異常な事が起きる場合があります。
Division Method
Non Square を選択した場合、指定したサイズが指定したボクセル分割数に分割されます。 それらのボクセルの辺が同じになっていないと、歪んだシミュレーションになる可能性があります。
軸を指定した時、その軸が分割数を決める基準と見なされます。 選択した軸のサイズで均一に分割することでボクセルサイズが決まります。 他の軸の分割は、必要なサイズに合うように一番近い整数の複数値に調整されます。
最終的には、非選択の軸方向のサイズが均一なボクセルサイズになるように変わります。 Max Axis オプションを選択した場合、その最大サイズの軸が使用されます。
By Size を指定した時、 Division Size によって、指定したサイズのボックスに合うボクセル数が計算されます。
Divisions
このオブジェクトのボリューム表現の作成を制御します。 これは、目的のジオメトリの特徴をキャプチャーするのに十分な細かさに設定してください。
Uniform Divisions
ボクセルグリッドのキー軸の解像度。これは、1つのパラメータで全体の解像度を制御して、均一なボクセルを保持することができます。 Uniform Voxels オプションには、参照として使用する軸を指定します。通常では、最大軸を使用するのは一番安全です。
Division Size
ボクセルの明示サイズ。ボクセル数は、このサイズのボクセルの整数の数を、指定した境界に合わせることで計算されます。
Laser Scan
Laser Scanモードでは、主軸に沿って光線を送信することでボリューム表現が構築されます。 一番近い交差と一番遠い交差だけが使用されます。 それらの2つの交差のポイント間の空間を内側、それ以外を外側として分類されます。
Laser Scanモードは、法線の定義が不完全だったり、自己交差があったり、完全に密閉していないジオメトリでも動作します。 このデメリットは、内部の特徴を検出できないので、それを表現することができないことです。
Laser Scanモードをオフにしても、主軸に沿って光線を送信することでボリューム表現がまだ構築されます。 とはいえ、すべての交差が検索されます。各交差のペアをテストして、そのセグメントが内側か外側か確認します。 これは、上手く定義されたジオメトリの法線(つまり、自己交差のないマニフォールド)と密閉したジオメトリが頼りになります。 しかし、穴のある複雑な形状を正確に表現することができます。
Fix Signs
非常にうまく作成されたジオメトリでさえも、不正確な数値が間違えた符号を選択してしまう可能性があります。 このオプションは、不正な符号を探すためにボリューム表現をポスト処理します。 通常では漏れ口を塞いだり、穴を埋めることでそれらの符号を正しくします。
これは時間がかかり、問題なくボリューム表現が生成されるのがわかっていれば、オフにすることができます。
Force Bounds
Fix Signs メソッドだけが、平滑化し、通常では符号反転を軽減します。 しかし、不正な符号の領域がボリューム表現の境界で安定化させることができます。 このオプションは、境界上のすべてのボクセルを外側としてマークします。 Fix Signs メソッドは、間違えて安定化させることはほぼないです。
Invert Sign
中が空洞のボックスが欲しい場合、1つのメソッドが他のボックスの内側に1つのボックスを構築して、 Laser Scan を使用しないことです。 より強固なメソッドは、内側のボックスを指定して、符号反転を使用することです。 これは、ボックスの外側のすべてを内側と見なし、より強固な Laser Scan メソッドを使用することができます。
Sign Sweep Threshold
Fix Signs 処理が完了した後でも、SDF内に不正な領域がまだ存在している可能性があります。 大きなブロックは、安定化されて、SDFから突き出る可能性があります。 2番目のSign Sweep Passを実行すれば、それらのブロックの軽減を試みることができます。
Sign Sweep Thresholdは、不正と見なされる符号の変化に対して起こす飛躍の大きさを制御します。 SDFの値が、この閾値とセル幅を乗算した値よりも大きく変化した場合、その値が無効な符号の変化と見なされます。 元のジオメトリは、光線と交差することで内側/外側が判断され、その結果を使用して、どの符号が正しいのか判断されます。 正しい符号は、モデルを通じて伝搬します。
Max Sign Sweep Count
Sign Sweepは、符号が反転しなくなるまで(つまり、すべての変化が閾値以内にある)または、この最大値に到達するまで繰り返されます。 Sign Sweep Thresholdが非常に小さいと、その処理が収束しなくなることがあります。 反対に大きいと、非常に速く収束します。
Offset Surface
符号付き距離フィールドをオフセットする一定量。 これを使えば、オブジェクトを若干膨張または収縮させることができます。 オリジナルのサイズから大きく膨張させることはしないでください。そうしないと、それが符号付き距離フィールドの境界ボックスに当たってしまいます。
Tolerance
これには、SDFを計算する時の光線の交差に使用する許容値を指定します。 この値は、ジオメトリのサイズで乗算され、スケールには依存していません。
Proxy Volume
SDFの計算をするベースジオメトリの代わりに使用するジオメトリ。 Volume Sample モードの場合、このジオメトリにはボリュームまたはVDBを指定して、キャッシュデータに対してより良い制御をすることができます。
File Mode
このオブジェクトのボリュームデータに対するオペレーションを制御します。
Automatic
指定した名前のファイルが既に存在すれば、そのファイルがディスクから読み込まれます。 そうでないなら、このページ上の他のパラメータに基づいてボリュームが作成され、指定したファイルがディスクに作成されます。 このファイルは、アプリケーションを終了しても自動的に削除されません。
Read Files
指定したファイルがディスクから読み込まれます。
Write Files
このページ上の他のパラメータに基づいてボリュームが作成され、指定したファイルがディスクに作成されます。
No Operation
ファイルの読み込みまたは書き込みを行ないません。このページ上のパラメータは、ボリュームの作成に使用されます。
File
上記の File Modes の選択に応じてアクセスするファイルの名前。 このファイルは常に.simdataファイルフォーマットです。.bgeo拡張子で保存しても、.bgeoファイルに保存 されません 。
Surface ¶
Surface Representation
ボリュームに対する衝突ポイントやボリュームに対する衝突エッジを選択します。
オプションで、nopointvolume
とnoedgevolume
のPointアトリビュートをジオメトリに追加することで、個々のポイント/エッジが、ボリュームオブジェクトに対する衝突検出に関わらないようにさせることができます。
端点を無効にすれば、そのエッジも無効になります。
Convert To Poly
これは、ジオメトリ内のプリミティブ(例えば、球)からポリゴンへの変換を有効にします。 ポリゴンのみが衝突検出に使用されます。
Triangulate
このフラグをオンにすると、ジオメトリ内のポリゴンが三角形化されます。
LOD
これは、三角形化のLevel Of Detailを制御します。UとVの方向でのポイント密度を指定するために使用します。
Add Barycenters
各ポリゴンの重心をポイントまたはエッジ(プリミティブの頂点と接続)として衝突検出に含めることができます。
出力 ¶
First
このノードで作成されたTerrainオブジェクトが、単一出力を通して送り出されます。
ローカル変数 ¶
ST
ノードが評価されるシミュレーション時間です。
この値は、変数Tで表現される現在のHoudiniの時間と同じではなく、DOP Networkの Offset Time と Scale Time のパラメータの設定に依存しています。
STは、シミュレーションの開始時間がゼロになるようになっています。
つまり、シミュレーションの最初のタイムステップをテストする時は、$T == 0
や$FF == 1
を使うのではなくて、$ST == 0
のようなテストを使うのがベストです。
SF
ノードが評価されるシミュレーションフレーム(正確には、シミュレーションタイムステップ番号)。
この値は、変数Fで表現される現在のHoudiniのフレーム番号と同じではなく、DOP Networkパラメータの設定に依存しています。 代わりに、この値は、シミュレーション時間(ST)をシミュレーションタイムステップサイズ(TIMESTEP)で割算した値と同じです。
TIMESTEP
シミュレーションタイムステップのサイズ。 この値は、1秒あたりのユニットで表現した値をスケールするのに役に立ちますが、タイムステップ毎に適用されます。
SFPS
TIMESTEPの逆数。 シミュレーション時間の1秒あたりのタイムステップ数です。
SNOBJ
シミュレーション内のオブジェクトの数。 Empty Object DOPなどのオブジェクトを作成するノードでは、SNOBJは、オブジェクトが評価される度に値が増えます。
固有のオブジェクト名を確保する良い方法は、object_$SNOBJ
のようなエクスプレッションを使うことです。
NOBJ
このタイムステップ間で現行ノードで評価されるオブジェクトの数。 この値は、多くのノードがシミュレーション内のオブジェクトすべてを処理しないので、SNOBJとは異なります。
NOBJは、ノードが各オブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJ
ノードで処理される特定のオブジェクトのインデックス。 この値は、指定したタイムステップで常にゼロからNOBJ-1まで実行されます。 この値は、OBJIDやOBJNAMEなどのシミュレーション内の現行オブジェクトを識別せず、現在の処理順でのオブジェクトの順番を識別します。
この値は、オブジェクト毎に乱数を生成するのに役に立ちます。他には、処理別にオブジェクトを2,3のグループに分けるのに役に立ちます。 この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
OBJID
処理されているオブジェクトの固有ID。 すべてのオブジェクトは、すべての時間のシミュレーション内のオブジェクトすべてで固有な整数値が割り当てられています。たとえオブジェクトが削除されても、そのIDは決して再利用されません。 オブジェクトIDは、オブジェクト毎に別々の処理をさせたい場面(例えば、オブジェクト毎に固有の乱数を生成したい)で非常に役に立ちます。
この値は、dopfieldエクスプレッション関数を使って、オブジェクトの情報を検索するのにベストな方法です。
OBJIDは、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
ALLOBJIDS
この文字列には、現行ノードで処理されているオブジェクトすべての固有のオブジェクトIDをスペース区切りにしたリストが含まれています。
ALLOBJNAMES
この文字列には、現行ノードで処理されているオブジェクトすべての名前をスペース区切りにしたリストが含まれています。
OBJCT
現行オブジェクトが作成された時のシミュレーション時間(変数STを参照)。
そのため、オブジェクトが現在のタイムステップで作成されたかどうかチェックするには、$ST == $OBJCT
のエクスプレッションが常に使われます。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJCF
現行オブジェクトが作成された時のシミュレーションフレーム(変数SFを参照)。
この値は、OBJCT変数にdopsttoframeエクスプレッションを使ったものと等価です。この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJNAME
処理されているオブジェクトの名前を含んだ文字列値。
オブジェクト名は、シミュレーション内で固有であることが保証されていません。 しかし、オブジェクト名が固有になるように注意して名前を付けていれば、オブジェクトの識別は、オブジェクトIDよりも、オブジェクト名を指定するほうが簡単です。
オブジェクト名は、同じ名前を持つオブジェクトの数を仮想グループとして扱うこともできます。
“myobject”という名前のオブジェクトが20個あれば、DOPのActivationフィールドにstrcmp($OBJNAME, "myobject") == 0
を指定すると、DOPがその20個のオブジェクトのみを操作します。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら空っぽの文字列を返します。
DOPNET
現在のDOP Networkのフルパスを含んだ文字列値。 この値は、ノードを含むDOP Networkのパスを知りたりDOPサブネットのデジタルアセットで非常に役に立ちます。
Note
ほとんどのダイナミクスノードには、そのノードのパラメータと同じ名前のローカル変数があります。 例えば、Position DOPでは、以下のエクスプレッションを記述することができます:
$tx + 0.1
これはオブジェクトをタイムステップ毎にX軸方向に0.1単位分移動させます。
See also |