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パス。 If Use This Object’s Data is enabled, this specifies the data path for data attached to the currently solved object.
Use This Object’s Data
When enabled, the DOP Data specifies the name of data attached to the currently solved object.
This is usually equivalent to $OBJID/DataName
, but using $OBJID
requires one to set the Solver Per Object toggle which prevents mutual affectors from working with solvers such as RBD.
If the referenced data is the geometry being currently processed, a copy is made (similar to the Myself binding option).
Use Timestep
Time Scale を現行タイムステップでスケールするかどうか。オフなら、 Time Scale は絶対時間(秒)になります。
Time Scale
実際のタイムステップに適用される全体的なスケール。
See also |