On this page | |
Since | 13.0 |
これは非常に強力な低レベルにアクセス可能なノードであり、VEXに詳しい熟練者が、コードを使ってボクセル値を調整することができます。
このノードは、Gas Field VOP DOPに相当しますが、VOPネットワークの代わりにテキストのVEXスニペットを使用します。
このノードは、 入力ボリューム内のすべてのボクセル に対してスニペットを実行します。 スニペットは、アトリビュートを変更することで、入力ジオメトリを編集することができます。 アトリビュートとVEX関数を使うことで、他のジオメトリの情報にアクセスすることができます。
-
ノードをクリックすると、スニペットからのエラー出力を確認することができます。
-
VEX関数の
ch
を使ってパラメータを評価することができます。 パスは、このノードの相対パスです(ch("parm")
は、このノードのparm
パラメータを評価します)。 この評価は、現行時間で実行されます。
構文 ¶
ボクセル値の読み込みと修正 ¶
ボリューム内の現行ボクセル値は、@volume_name
として利用可能です。
この変数を読み込むことで、現行値を取得することができ、その変数を割り当てることで値を変更することができます。
例えば、foo
Floatボリュームのすべてのボクセルの値に0.1
を加算するには:
@foo += 0.1
ボリュームに名前がなければ、そのボリュームは、自動的に@density
にバインドされます。
入力に複数の名前付きボリュームがあれば、単一のスニペットを書くだけで、別々の方法で別々のボリュームを修正することができます。例:
@foo += 0.1 @bar += 0.2 @baz += 0.3
VEX変数 ¶
一時変数を作成することができます。 例えば、以下のコードは、ポイントからのオフセット位置を読み込みます。
vector temp = @P; temp += {0.1, 0.2, 0.3}; @density = volumesample(@OpInput1, 0, temp);
バインド変数 ¶
いくつかの変数がVolume VOPコンテキストにバインドされています。
変数の頭に@
を付けることで、それらの変数にアクセスすることができます。
ix
, iy
, iz
現行ボクセルの整数インデックス。VDBでは、これはマイナスの値になる場合があります。
resx
, resy
, resz
現行ボリュームプリミティブの解像度。VDBでは、これはアクティブボクセル領域のサイズです。
dPdx
, dPdy
, dPdz
0番目のボクセルのX,Y,Zのエッジの長さと向きを指定したベクトル。
center
SOP空間内のボリュームの中心。
SimTime
現行シミュレーション時間(秒)。
SimFrame
現行シミュレーションフレーム。
Time
現行プレイバー時間(秒)。
Frame
現行プレイバー時間(フレーム)。
TimeInc
フレーム間の時間の増分値(秒)。
OpInput1
, OpInput2
, OpInput3
, OpInput4
Fileパラメータを受け取るVEXオペレーションで、このSOPの該当する入力を参照するために使用することができる文字列。
パラメータ ¶
Code ¶
Group
入力ジオメトリ内の、これらのボリュームのみに対してプログラムを実行します。 このフィールドを空っぽのままにすると、入力ジオメトリ内のすべてのボリュームを修正します。
(上記のボクセル値の読み込みと修正を参照してください。)
VEXpression
Pointアトリビュートを操作するVEXコードのスニペット。
@variable_name
構文を使えば、ジオメトリアトリビュートにアクセスすることができます。
Fields to Write to
フィールドの名前がこのパターンに一致すれば、それらのフィールドのみを修正します。 デフォルトのパターンでは、どのフィールドも修正することができます。 スニペットで 実際に 修正されるフィールドのみをリストにすることで、ノードを高速化することができます。
例えば、以下のスニペットでは、density
フィールドのみが修正されます。
temperature
フィールドは修正されず、単に読み込まれるだけです。
@density = @temperature;
しかし、曖昧な記述なので、このノードはdensity
を修正するためにtemperature
を コピー しています。
これは時間とメモリを費やします。
これを回避するには、このパラメータをdensity
に設定することで、ノードはtemperature
のコピーをしなくなります。
もちろん、これをするには、書き込み可能なフィールドのリストを明示的に管理する必要があります。
Enforce Prototypes
スニペット内でまず型宣言として@
バインドを宣言しないと、それらのバインドが使用できないようにします。
これは、アトリビュート(例えば、@Cd
)と@ptnum
や@Frame
といった“便利”バインドのどちらにも当てはまります。例:
// バインドを宣言します。 int @ptnum; float @Frame; vector @Cd; // 宣言の後にバインドを使用します。 int pointnum = @ptnum; float red = @Cd[0] / @Frame;
@
構文を使った自動バインドは便利ですが、シーンが複雑になるにつれて、@
バインドのタイプミスが原因で不意に存在しないアトリビュートをバインドしてしまう危険性があります。
Bindings ¶
Evaluation Node Path
ch()
などのVEX関数は、通常では、このノードを基準に評価します。
ここでパスを指定すれば、パス検索の開始場所を上書きすることができます。
これは、トップレベルのデジタルアセットが検索ルートになるようにデジタルアセットへ組み込む時に役に立ちます。
Export Parameters
このパターンを使ってVEXシェーダのExportオプションを上書きすることで、特定のボリュームへの書き込みを回避することができます。 パターンはVEXパラメータに一致しますが、バインドしたボリュームには一致しません。 そのボリュームは、読み取り専用になります。
Stencil Field
VOPネットワークが評価される領域のステンシルとして使用するスカラーフィールド。 ステンシル値が完全に0.5を超えたボクセルに対してVOPネットワークが実行され、他のボクセルは未変更のままになります。
VEX Precision
VEXは32ビットまたは64ビットの精度で評価することができます。 特にトランスフォームに対して64ビットは高い精度を持つことができます。
フィールドは常に32ビットなので、現在のところ、Autoモードは32ビットモードで実行されます。
Inputs ¶
Input 1, 2, 3, 4
これらの入力は、VOP内部にアクセス可能な4つの仮想入力を制御します。
これらの入力は、VOPからOpInput1-4ワイヤを使ったり、VEXpressionで@OpInput1-4
文字列パラメータを使ってアクセスすることができます。
これらの入力は、入力番号を受け取るVEX関数を使って0-3の数値でアクセスすることができます。
None
この入力に接続されるジオメトリはありません。
SOP
VEXを実行する前にSOPジオメトリがクックされて、その結果がこの入力に接続されます。
DOP Data
参照する現行シミュレーション内のデータ。オブジェクト/データ、例えばpyro1/vel
として指定することで、
pyro1
オブジェクトのVelocityフィールド(これは3つのボリュームプリミティブとして表示されます)を参照します。
Nth Context Geometry
これらの入力が親のDOP Network自体に接続されたSOPを参照します。
SOP Path
接続するSOPのパス。
DOP Data
このシミュレーションのDOPデータに接続するObject/Dataパス。 Use This Object’s Data が有効な場合、ここには、現在計算されているオブジェクトに追加するデータのデータパスを指定します。
Use This Object’s Data
有効にしたら、 現在計算されているオブジェクトに追加するデータの名前を DOP Data で指定します。
通常では、これは$OBJID/DataName
と同等ですが、$OBJID
を使用する場合には、相互アフェクターがRBDなどのソルバに作用しないように Solver Per Object トグルを設定する必要があります。
参照データが現在処理されているジオメトリの場合、( Myself バインドオプションと同様に)コピーが作られます。
Use Timestep
Time Scale を現行タイムステップでスケールするかどうか。オフなら、 Time Scale は絶対時間(秒)になります。
Time Scale
実際のタイムステップに適用される全体スケール。
See also |