On this page |
概要 ¶
このノードは、通常ではGeometryコンテナオブジェクトから既存ジオメトリを受け取り、 (内部のRipple Configure Objectノードを使用して)そのジオメトリをRipple Solverで必要なデータと一緒に構成します。 これにより、Ripple Solverがサーフェスを横切る波の伝搬をシミュレーションすることで、サーフェスを変形することができます。
波紋シミュレーションに関する一般的な情報は、Ripple Solverのヘルプを参照してください。
Ripple Objectは、2つのサーフェスで構成します:
-
Rest(静止) サーフェス。これは、波のない“通常の”形状のサーフェスです。 波は、この静止形状を上下に変形させます。
-
初期 サーフェス。これは、サーフェスの開始状態です。 このサーフェスとRest(静止)サーフェスとの差分により、サーフェスを横切る最初の波が決まります。
現行の波紋状態とRest(静止)ジオメトリは、理に適った結果が得られるように、同じトポロジー(ポイントの数と接続性が同じ)でなければなりません。 もし初期サーフェスとRest(静止)サーフェスが同じトポロジーでない場合、ランダムに波打った変わった形状になってしまいます。
(ダイナミックネットワーク内でTabメニューからRipple Objectノードを作成すると、 そのノードは、内部の“デモ”サーフェスのペアで事前に構成されたサーフェスを使い始めます。 その時は、 Initial SOP Path と Rest SOP Path にジオメトリを指定してください。)
波紋オブジェクトをセットアップする一番簡単な方法は、サーフェスジオメトリを作成してから、SOP(例えば、Edit SOP)を使ってそのジオメトリを変形し、 このノードの Rest SOP Path パラメータに元のサーフェスを含んだSOPを、 Initial SOP Path パラメータに変形したサーフェスを含んだ下流ノードを指定することです。
以下の方法で、Rest(静止)状態を指定することもできます。
-
Rest Position SOPを使って、初期ジオメトリ上に
rest
とrnml
のアトリビュートを配置します。 -
Rest(静止)状態を含んだダイナミクス
Geometry
データを取り付けます。
異なる方法で2つ以上のRest(静止)サーフェスを指定した場合、Ripple Objectは、取り付けたRestデータの方を優先します。 その理由は、そのデータの方が柔軟性が高いからです。
Tip
Ripple ObjectとRipple Solverは、Ripple SOPと関連性を持っていません。
Attributes ¶
Ripple Objectの初期ジオメトリ上にアトリビュートを作成/ペイントして、そのジオメトリの挙動に影響を与えます。 それらのアトリビュートのほとんどは、 このノードのパラメータを上書き することで、Ripple Solverを微調整することができます。
波の速度がゼロの“島”をペイントすることができます。 波は、それらの島の領域から跳ね返り、その領域内のサーフェスは静止状態のままになります。
名前 | クラス | タイプ | 説明 |
---|---|---|---|
v
|
Point | Vector |
ポイントの現行Velocity。これによって、フレームからフレームへMomentum(運動量)が渡されます。 |
conservation
|
Point | Float |
ポイント毎にRipple Solverの Conservation パラメータを上書きします。 |
wavespeed
|
Point | Float |
ポイント毎にRipple Solverの Wave Speed パラメータを上書きします。 Note Adaptive Substep は、上書きされた |
springk
|
Point | Float |
ポイント毎にRipple Solverの Rest Spring パラメータを上書きします。 |
パラメータ ¶
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)
に変更しなければなりません。
Number of Objects
単一オブジェクトを作成するのではなく、いくつかの同一オブジェクトを作成することができます。
$OBJID
エクスプレッションを使用することで、各オブジェクトのパラメータを個々に設定することができます。
Object Name
作成されるオブジェクトの名前。 これはGeometry Spreadsheet Viewで表示される名前で、このオブジェクトを外部から参照するために使用します。
Note
同じ名前でたくさんのオブジェクトを持つことができますが、それでは参照の書き込みが困難になるので、名前には$OBJID
のような変数を使用することを推奨します。
Solve On Creation Frame
有効にすると、新しく作成されたオブジェクトは、そのオブジェクトが作成された時のタイムステップでソルバによって計算されます。
このノードが、シミュレーションの初期状態でのオブジェクトを作成するのではなく、シミュレーション中にオブジェクトをコピーするのであれば、通常では、このパラメータをオンにします。
Allow Caching
巨大なオブジェクトをキャッシュ化しないようにすることで、衝突ジオメトリの前のフレームのキャッシュに十分な空き容量を確保することができます。
このオプションは、非常に大きなシミュレーションを扱う時にだけ設定してください。 可能であればより大きなメモリキャッシュを使用する方が望ましいです。
Initial SOP Path
初期波紋ジオメトリとなるSOP(または、表示SOPを使用する場合にはObject)のパス。
Rest SOP Path
波動方程式のRest(静止)状態となるSOPのパス。 Rest(静止)スプリングは、波紋ジオメトリをこの状態へ引っ張ります。 また、これはポイントからポイントへ波紋を伝搬させるための曲率を決めるためにも使われます。
Use Deforming Rest
タイムステップ毎にRest(静止)ジオメトリを再読み込みします。 Rest(静止)ジオメトリをアニメーションさせることで、現行状態を直接編集することなく、新しい凸凹をシステムに追加することができます。
Use Object Transform
選択したSOPを含んだオブジェクトのトランスフォームをジオメトリに適用します。 これはジオメトリの初期位置をオブジェクトトランスフォームで定義する場合に役に立ちます。
オブジェクトレベルでオブジェクトをトランスフォームしたい場合は、代わりにObject Position DOPを使用してください。
Position
オブジェクトのワールド空間の位置。これはアニメーションが可能です。
Rotation
オブジェクトの初期の向き。これはRX/RY/RZ書式です。 これはアニメーションが可能です。
Pivot
オブジェクトのワールド空間でのピボット。これをアニメーションさせることができます。
出力 ¶
First
このノードで作成されたRipple Object。
ローカル変数 ¶
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単位分移動させます。