On this page |
Modify Data DOPを使えば、既存のシミュレーションデータ上の特定のオプションの値を変更することができます。 それと同じ作業は、通常では修正するデータタイプに特化したDOPノードの“Set Never”に設定したパラメータ以外のすべてのParameter Operationを使って行なうことができます。 しかし、このノードを使う方が特定の状況では簡単または分かりやすいです。
このノードを使えば、追加カスタムオプションをネットワークの他の一部に使用するデータに取り付けることもできます。
例えば、オブジェクトVelocityをゼロ以外にするなら、hasmoved
というオプションをオブジェクトのPositionデータに取り付け、そのオプションを1に設定します。
オブジェクトまたはデータの入力をこのノードに接続することができます。 データ入力を接続した場合、そのデータは、このノードが修正するデータになります。 このモードは、新しいオプションを既存データに追加するのに非常に役に立ちます。 オブジェクト入力をこのノードに接続した場合、このノードに、修正するオブジェクト上のデータを知らせるために Data Name パラメータを設定しなければなりません。
Modify Data DOPを使えば、独自のアドホック(一時的な)データタイプを作成することができます。 Empty Data DOPを使えば、空っぽのデータホルダーを作成することができ、Modify Data DOPがそれらの値を設定することができます。
Note
いくつかのオプションが読み取り専用であれば、このノードで編集することができません。例えば、Point PositionのVelocityとPositionです。
パラメータ ¶
Activation
入力データは、このパラメータがゼロ以外の時にだけ修正されます。 そうでない時は、そのデータは、修正されずに出力されます。
Group
オブジェクト入力を指定すると、 Group パラメータは、その入力内のどのオブジェクトを修正するか決めます。
Data Name
オブジェクト入力を指定すると、 Data Name パラメータは、それらのオブジェクトに取り付けられたデータのどれを修正するか決めます。
ここにはフルデータパスを指定することができます。つまり、Forces/Gravity
は、オブジェクトに取り付けられたForces
コンテナ内部のGravity
という名前のデータを修正しようとします。
Number of Modifications
このノードが設定するオプションの数。これは、このノードが持つオプション固有のパラメータのセットの数を制御します。
Value # Name
修正するオプション値の名前。この名前が既存オプションに一致しなかった場合、ノードはこの名前で新しいオプションを作成します。
Value # Type
修正するオプションのタイプを決めます。オプションのタイプは、 Value # Float や Value # String がオプション値を設定するかどうか決めます。
いくつかの場合では、文字列値が使われることに違和感を感じることがあります。 例えば、ベクトルとマトリックスの両方が文字列値で初期化されます。
Integer
オプションは整数です。 Value # Float を使って値を設定します。
Bool
オプションはブーリアン(TrueまたはFalse)です。 Value # Float を使って値を設定します。0の値がFalse、それ以外の値がTrueです。
Float
オプションは浮動小数点です。 Value # Float を使って値を設定します。
String
オプションは任意の文字列です。 Value # String を使って値を設定します。
2 Vector
オプションは長さが2のベクトルです。 Value # String を使って[1, 2]
のような形式で値を設定します。
3 Vector
オプションは長さが3のベクトルです。 Value # String を使って[1, 2, 3]
のような形式で値を設定します。
4 Vector
オプションは長さが4のベクトルです。 Value # String を使って[1, 2, 3, 4]
のような形式で値を設定します。
Quaternion
オプションは長さが4のベクトルです。このベクトルはクォータニオン回転として解釈されます。
Value # String を使って[1, 2, 3, 4]
のような形式で値を設定します。
3×3 Matrix
オプションは3行3列のマトリックスです。 Value # String を使って[[1, 2, 3] [4, 5, 6] [7, 8, 9]]
のような形式で値を設定します。
4×4 Matrix
オプションは4行4列のマトリックスです。 Value # String を使って[[1, 2, 3, 4] [5, 6, 7, 8] [9, 10, 11, 12] [13, 14, 15, 16]]
のような形式で値を設定します。
UV
オプションは長さが2のベクトルです。このベクトルは2Dテクスチャ座標のセットを意味します。
Value # String を使って[1, 2]
のような形式で値を設定します。
UVW
オプションは長さが3のベクトルです。このベクトルは3Dテクスチャ座標のセットを意味します。
Value # String を使って[1, 2, 3]
のような形式で値を設定します。
Value # Float
オプションタイプがBool、Integer、Floatの場合の新しいオプション値。 それ以外のオプションタイプは、適切な書式の文字列で Value # String パラメータを使わなければなりません。
Value # String
オプションタイプがBool、Integer、Float以外の場合の新しいオプション値。 VectorやMatrixのオプション値の書式は、エクスプレッション言語のVectorやMatrixと同じです。
入力 ¶
First
修正されるデータまたはそのデータを取り付けたオブジェクトのどちらかを1番目の入力に接続します。
出力 ¶
First
データを入力に接続した場合、修正された入力データが出力に送られます。 オブジェクトを入力に接続した場合、それと同じオブジェクトが出力に送られます。
ローカル変数 ¶
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 |