| On this page | |
| Since | 21.0 |
Initial Overlap Relationship DOPは、Bullet Solverで使用されているローレベルツールであり、シミュレーションされるDOPオブジェクトから初期段階で既に重なっているオブジェクトを追跡します。
初期段階で既に重なっているオブジェクト同士が無理に押し離さないようにシミュレーション時にソルバはその接触点での貫通深度を調整します。
このDOPに取り付けられる Geometry サブデータには、重なり合っているオブジェクトに関する情報が格納されます。 格納されるデータは単一DOPオブジェクトの情報だけでなくDOPシミュレーション内のすべてのオブジェクトとの関係まで含まれているので、このサブデータはリレーションシップとして扱われます。
また、このリレーションシップをSolverサブデータとしてソルバに取り付けることで、各フレームでオブジェクトがシミュレーションされる前にジオメトリを操作することができます。
Bulletソルバは必要に応じて自動でリレーションシップを作成するので、ネットワークにInitial Overlap Relationship DOPを明示的に追加する主な用途はここにあります。
-
Bulletソルバがこのリレーションシップを使用できるようにするには、Bulletソルバの Initial Overlap Relationship パラメータが Relationship Name と同じになるように設定してください。
-
名前を設定したら、
SOP Solver(またはその他のマイクロソルバ)を接続することで、ジオメトリデータを操作することができます。
-
SOP Solverの中に入って、
relationship_geometryノードにAttribute Wrangleを接続することで、独自の効果を作成することができます。 例えば、毎フレーム
distanceアトリビュートに0.005を徐々に加算することで、オブジェクトを徐々に押し離すことができます。
アトリビュート ¶
ジオメトリ内の各ポイントは、初期段階で既に重なっているオブジェクトのペアを表しており、その2つのオブジェクトが最も重なっている位置を示しています。
| 名前 | クラス | タイプ | 説明 |
|---|---|---|---|
P
|
point |
vector
|
2つのオブジェクトの重なりが最大となる初期の接触位置。 |
distance
|
point |
float
|
2つのオブジェクト間の重なり距離を追跡します。 この値は、ソルバがオブジェクト間の接触点の貫通深度を調整するために使用されます。 また、オブジェクトが離れていくにつれて、それらが再び押し寄せられないように、時間の経過と共に調整されます。 |
currentdistance
|
point |
float
|
現在のシミュレーションフレームにおけるオブジェクト間の最大貫通深度。
これは主にオブジェクトが離れるにつれてソルバが |
objdopid
|
point |
int
|
1番目のオブジェクトのDOPオブジェクトID。 |
objelementid
|
point |
int
|
1番目のオブジェクトのポイント番号または |
objchildid
|
point |
int
|
1番目のオブジェクトがエージェントプリミティブ内のシェイプであった場合のそのジョイントインデックス。 |
otherobjdopid
|
point |
int
|
2番目のオブジェクトのDOPオブジェクトID。 |
otherobjelementid
|
point |
int
|
2番目のオブジェクトのポイント番号または |
otherobjchildid
|
point |
int
|
2番目のオブジェクトがエージェントプリミティブ内のシェイプであった場合のそのジョイントインデックス。 |
パラメータ ¶
Data Sharing
このノードで作成されるデータをシミュレーション内の複数のオブジェクト間で共有する方法を制御します。
データ共有はシミュレーションのメモリ使用量を大幅に削減することができますが、 その代わりにすべてのオブジェクトがまったく同じデータと関連している必要があります。
Activation
このノードが、指定したタイムステップで特定のリレーションシップに対して何でもするべきか決めます。 このパラメータがエクスプレッションであれば、リレーションシップ毎にパラメータが評価されます。
パラメータがゼロ以外の値に評価されれば、データがそのリレーションシップに追加されます。 パラメータがゼロに評価されれば、データが追加されず、このノードで以前追加されたデータが削除されます。
Group
Apply Relationshipノードと併用した時、このパラメータを使って、このノードが受けるリレーションシップを決めます。
そのリレーションシップがこのグループの一部として認識されない場合、このデータは、そのリレーションシップに追加されません。
Data Name
データをリレーションシップに追加するために使用される名前を意味します。
データをシミュレーションオブジェクトや他のデータに追加する場合とは違って、 リレーションシップは同時に単一のデータしか追加することができないので、このData Nameは、あまり重要ではありません。 そのため、このData Nameは単にリレーションシップの目的を区別するためだけに使用します。
Affected Objects
このノードの1番目の入力にオブジェクトを接続した場合、このパラメータには、リレーションシップで影響を受けるオブジェクトとなる入力オブジェクトのセットを指定します。
Apply Relationshipノードと併用した場合、そのノードが実際のリレーションシップを定義しているので、このパラメータは使われません。
Affector Objects
このノードの1番目の入力にオブジェクトを接続した場合、このパラメータには、リレーションシップで影響を与えるオブジェクトとなる入力オブジェクトのセットを指定します。
Relationship Name
このノードの1番目の入力にオブジェクトを接続した場合、このパラメータには、リレーションシップの名前を指定します。 このパラメータが既存のリレーションシップの名前と被った場合、そのリレーションシップが置換されます。
Unique Relationship Name
このノードの1番目の入力にオブジェクトを接続した場合、このパラメータをオンにすることで、このノードによって固有のリレーションシップ名が生成されます。
これにより、既存のリレーションシップがこのノードで定義されたリレーションシップで上書きされることはありません。
Make All Objects Mutual Affectors
このノードの1番目の入力にオブジェクトを接続した場合、このパラメータをオンにすることで、 Affector Objects と Affected Objects のパラメータの和集合が、 リレーションシップに対してAffectorとAffectedの両方のオブジェクトリストに格納されます。
このパラメータは、 Affector Objects と Affected Objects のパラメータの両方のオブジェクトと同じリストを指定するためのショートカットとしてよく使用されます。
入力 ¶
First Input
このオプションの入力を使用すれば、このノードで作成されるリレーションシップに関わるシミュレーションオブジェクトを制御することができます。
この入力を接続しなかった場合、このノードをApply Relationshipノードと併用することで、同時にたくさんのリレーションシップを作成することができます。
All Other Inputs
このノードにたくさんの入力コネクタがあれば、データノードを取り付けることで、そのデータノードをこのノードで定義されたリレーションシップのモディファイアとして動作させることができます。
意味のあるサブデータの特定のタイプは、ノードからノードで変化します。
入力コネクタをクリックすれば、意味のある取り付けができる利用可能なデータノードのリストが表示されます。
出力 ¶
First Output
この出力のオペレーションは、このノードに接続している入力に依存します。
オブジェクトストリームがこのノードの入力であれば、その出力も入力と同じオブジェクトを含んだオブジェクトストリーム(しかし、このノードで追加されたリレーションシップを持ちます)です。
オブジェクトストリームをこのノードに接続しなかった場合、その出力はリレーションシップデータ出力になります。
このデータ出力をApply Relationshipに接続することで、同時にたくさんのリレーションシップを作成することができます。
ローカル変数 ¶
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 |