On this page |
Apply Relationship DOPは、オブジェクトのグループ間に1つ以上のリレーションシップを作成します。 リレーションシップは、オブジェクトが相互に反応する挙動を制御し、さらには、シミュレーションで計算されるオブジェクトの順番も制御します。 リレーションシップのいくつかの例として、拘束、衝突、煙ソース、単純なグループがあります。
リレーションシップでは、2つのオブジェクトセット(影響を与えるオブジェクトと影響を受けるオブジェクト)があります。 相互に影響し合うオブジェクトをリレーションシップで定義する場合には、同じオブジェクトを両方のグループに入れます。 オブジェクトを計算する時、他のオブジェクトに影響を与えるオブジェクトは、影響を受けるオブジェクトよりも先に計算されます。 この例外は、相互に影響し合うオブジェクトです。それらのオブジェクトは同時に計算されなければなりません。
オブジェクトのグループ間で循環のリレーションシップを作成することで、間接的に相互に影響し合うリレーションシップをセットアップすることも可能です。 シミュレーションに対して、 Geometry Spreadsheet の Affector Matrix を見れば、シミュレーション内の全体の影響関係を調べることができます。
各リレーションシップタイプノード(例えば、Constraint and Collision Relationship)は、2つのオブジェクトグループ間に単一のリレーションシップを作成することができます。 Apply Relationshipノードは、膨大な数のリレーションシップが少しの数のノードとスタンプによって作成されることを許可することで、それらの能力を増強します。
このノードのパラメータは、2つのパートに分けられています。 1つ目のパートでは、作成されるリレーションシップの数、影響を与えるオブジェクトと影響を受けるオブジェクトのセットを設定します。 2つ目のパートでは、取り付けたリレーションシップノードを使用して各リレーションシップをカスタマイズすることができるstamp変数を定義します。
各リレーションシップには、それらを識別するための固有な名前を付けなければなりません。 この名前を使用することで、シミュレーションオブジェクト上のデータにアクセスするために使用するすべての同じメソッドを使用しているリレーションシップ情報にアクセスすることができます。
Tip
2つのDOP間に相互の拘束を構築する時、 Create Relationships を Number of Relationships Per Object Pair に設定してください。 これは、その拘束がgoalオブジェクトを検索するのに必要です。また、1方向のアフェクターリレーションシップを回避するために、 Make All Objects Mutual Affectors も有効にしてください。
パラメータ ¶
Create Relationships
リレーションシップを作成するためのオペレーションのプライマリモードを制御します。
Number of Relationships
作成されるリレーションシップの正確な数を指定します。 Affector Objects と Affected Objects のフィールドは、リレーションシップ毎に1回評価されます。
Number of Relationships Per Affected Object
Affected Objects パラメータでリストにした個々のオブジェクトに対してリレーションシップが作成されるように指定します。 Affector Objects パラメータは、Affected Object毎に再評価されます。
Number of Relationships Per Affector Object
Affector Objects パラメータでリストにした個々のオブジェクトに対してリレーションシップが作成されるように指定します。 Affected Objects パラメータは、Affector Object毎に再評価されます。
Number of Relationships Per Object Pair
影響を与えるオブジェクトと影響を受けるオブジェクトの各ペアに対してリレーションシップが作成されるように指定します。 Affector Objects と Affected Objects のパラメータは、ペアにするオブジェクトのリストを取得するために1回評価されます。
Affected Objects
これらのオブジェクトは、作成されるリレーションシップ内の影響を受けるオブジェクトになります。 Create Relationships パラメータを Number of Relationships Per Affector Object または Number of Relationships に設定した場合、 このパラメータは、リレーションシップ毎に再評価されます。それ以外は、1回評価されます。
Affector Objects
これらのオブジェクトは、作成されるリレーションシップ内の影響を与えるオブジェクトになります。 Create Relationships パラメータを Number of Relationships Per Affected Object または Number of Relationships に設定した場合、 このパラメータは、リレーションシップ毎に再評価されます。それ以外は、1回評価されます。
Number of Relationships
Create Relationships パラメータの値に応じて、影響を与えるオブジェクト毎、影響を受けるオブジェクト毎、またはリレーションシップの絶対数で作成されるリレーションシップの数。 Number of Relationships 以外のすべての設定では、このパラメータは、影響を与えるオブジェクト毎、影響を受けるオブジェクト毎、またはそれらの組毎に対して再評価されます。
Relationship Name
リレーションシップを識別する固有な名前。このパラメータは、このノードで作成されるすべてのリレーションシップに対して再評価されます。 このパラメータが既存のリレーションシップ(このノードでそのリレーションシップが作成されたかどうかにかかわらず)の名前に評価した場合、その既存のリレーションシップを置換します。
Unique Relationship Name
このパラメータをオンにすると、 Relationship Name パラメータで生成される名前が必ず固有になるので、既存のリレーションシップが上書きされることはありません。 ただし、そのリレーションシップの名前は長くなり、その名前を使用するのが面倒になる可能性があります。
Make All Objects Mutual Affectors
このパラメータをオンにすると、このノードで作成された各リレーションシップは、影響を与えるオブジェクトと影響を受けるオブジェクトすべてを、 リレーションシップのAffector ObjectsとAffected Objectsの両方のリストに格納します。 このパラメータは、このノードで作成されるリレーションシップの数には影響を与えません。
Activation
このパラメータがゼロの場合、リレーションシップが入力オブジェクト間で作成されません。
このパラメータは、各リレーションシップを作成する前に評価されるので、このパラメータを使用することで特定のリレーションシップを無効にすることができます。
Number of Variables
作成される各リレーションシップに対して設定するグローバルパラメータの数を設定します。
これらのグローバルパラメータは、stampエクスプレッション関数を使用することで、入力リレーションシップノードからアクセス可能です。
Variable # Name
この変数の名前。これは、この変数にアクセスするためのstampエクスプレッション関数の2番目の引数として渡さなければならない値です。
Variable Evaluation
この変数を評価する方法を制御します。
Evaluate For Each Copy
この変数の値は各リレーションシップに対して計算されます。 このオプションは、グローバルパラメータの値の生成に関しては一番柔軟性がありますが、大量のコピーが伴うと一番時間がかかります。
Evaluate Once
この変数の値は、REL
ローカル変数がゼロに設定される度に計算されます。
これは、 Create Relationship パラメータに依存します。
この手法は、各リレーションシップがカスタマイズされなくなりますが、このノードからその上流の入力データノードまでの情報を渡すのが簡単です。
Evaluate Once, One Token Per Copy
この変数を意味するパラメータは、REL
変数がゼロに設定される度に評価され、 Create Relationship パラメータに依存します。
このモードでは、 Variable Type パラメータに関わらず、 String Value が評価されます。そして、各リレーションシップに関しては、 評価される文字列内で該当するトークンを使用して、グローバルパラメータの値を設定します。 そのトークンは、 Variable Type パラメータに応じて、floatまたは文字列の値として扱われます。 例えば、 Variable Type が Float 、 String Value が“0 1 2 3”、 Number of Copies が6と仮定します。 6つのリレーションシップに対して設定されるグローバルパラメータの値は、0, 1, 2, 3, 0, 1になります。
Variable Type
グローバルパラメータが浮動小数点か文字列の値のどちらかを指定します。
Float
グローバルパラメータが浮動小数点になります。このグローバルパラメータの値には、入力データノードのstampエクスプレッション関数を使ってアクセスします。
String
グローバルパラメータが文字列になります。このグローバルパラメータの値には、入力データノードのstampエクスプレッション関数を使ってアクセスします。
Float Value
Float Variable Type に対して、 Variable Evaluation がEvaluate Once, One Token Per Copyでない時、 このパラメータが、このグローバルパラメータに割り当てられる値を制御します。
String Value
String Variable Type に対して、 Variable Evaluation がEvaluate Once, One Token Per Copyの時、 このパラメータには、このグローバルパラメータに割り当てられる文字列の値、一連の数値、文字列のトークンが含まれます。
入力 ¶
First
このノードの1番目の入力には、リレーションシップを定義する時に使用可能なオブジェクトを指定します。
Subsequent
このノードの残りの入力には、作成されるリレーションシップの性質を定義します。
出力 ¶
First
このノードのオブジェクトまたはデータの入力が、単一出力を通して送り出されます。
ローカル変数 ¶
REL
現行のリレーションシップ番号。この値の範囲は、0から(NREL-1)です。このローカル変数はstamp変数の設定に使用することができ、それ以外にもリレーションシップをカスタマイズすることができます。
このインデックスは、複数のリレーションシップ入力を考慮していません。そのため、INPUT
変数を使用することができます。
NREL
このノードが作成を試みるリレーションシップの合計数です。この値は、 Number of Relationships パラメータの値と同じです。 このローカル変数は、 Create Relationships パラメータで定義した通りに、リレーションシップの周期毎に再評価されます。
INPUT
処理されるリレーションシップ入力のインデックス。
RELID
これは、このタイムステップの範囲内で、このノードで実際に作成されるリレーションシップの数に対する単純なカウンターです。 Activation パラメータの値の変更と色々な Create Relationships メソッドが原因で、これは、他のローカル変数の値から計算できるものではありません。
AFFECTEDID
Create Relationships の形式が Per Affected Object または Per Object Pair の場合、この変数には、このリレーションシップに対する単一の影響を受けるオブジェクトのオブジェクトIDが含まれます。 それ以外の場合、この値は-1になります。
AFFECTORID
Create Relationships の形式が Per Affector Object または Per Object Pair の場合、この変数には、このリレーションシップに対する単一の影響を与えるオブジェクトのオブジェクトIDが含まれます。 それ以外の場合、この値は-1になります。
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単位分移動させます。
Examples ¶
ApplyRelationship Example for Apply Relationship dynamics node
このサンプルでは、Apply Relationship DOPを使って、Pin拘束をワイヤーオブジェクトに追加する方法を説明しています。
BridgeCollapse Example for Apply Relationship dynamics node
このサンプルでは、Apply Relationship DOPを使って、自動的に拘束を伝搬させて、崩壊する橋のRBDシミュレーションを作成する方法を説明しています。
ConstrainedTeapots Example for Apply Relationship dynamics node
このサンプルでは、Apply Relationship DOPを使って、RBD Pin Constraintノードで複数の拘束を作成する方法を説明しています。
MutualConstraints Example for Apply Relationship dynamics node
このサンプルでは、Apply Relationshipノードを使って、2つのDOPオブジェクト間を相互に拘束する方法を説明しています。