On this page | |
Since | 12.5 |
概要 ¶
これは非常に強力な低レベルにアクセス可能なノードであり、VEXに詳しい熟練者が、コードを使ってボクセル値を調整することができます。
このノードは、Volume VOP SOPに相当しますが、VOPネットワークの代わりにテキストのVEXスニペットを使用します。
このノードは、 入力ボリュームのすべてのボクセル ( Bind Each Volume to Density パラメータがオンでない限り)に対してスニペットを実行します。 スニペットは、アトリビュートを変更することで、入力ジオメトリを編集することができます。 アトリビュートとVEX関数を使うことで、他のジオメトリの情報にアクセスすることができます。
-
ノードをクリックすると、スニペットからのエラー出力を確認することができます。
-
VEX関数の
ch
を使ってパラメータを評価することができます。 パスは、このノードの相対パスです(ch("parm")
は、このノードのparm
パラメータを評価します)。 この評価は、現行時間で実行されます。 -
Volume Mix SOPとは違い、このノードはローカル変数を使用しません。 さらに、すべてのバッククォートによるエクスプレッションと
$F
変数は、現行時間ではなく、フレーム1で評価されます。 代わりにFrame
、Time
、TimeInc
を使ってください。 -
Volume VOPは、書き込むボクセルのみを処理します(そして、同じ位置にあるボクセル毎に1回だけ処理します)。
構文 ¶
ボクセル値の読み込みと修正 ¶
ボリュームの現行ボクセル値は、@volume_name
として利用可能です。
この変数を読むことで、現行値を取得することができ、その変数を割り当てることで、値を変更することができます。
例えば、floatボリュームfoo
のすべてのボクセルの値に0.1
を加算するには:
@foo += 0.1
ボリュームに名前がなければ、ボリュームは自動的に@density
にバインドされます。
入力に複数の名前付きボリュームがあれば、別々の方法で別々のボリュームを修正する単一のスニペットを記述することができます。例:
@foo += 0.1 @bar += 0.2 @baz += 0.3
あるいは、 Bind Each Volume to Density を有効にすることができます。
これは、すべての入力ボリュームの名前がdensity
として動作するので、同じスニペットを使って、すべてのボリューム内のすべてのボクセルを修正することができます:
// 同じ方法で@foo, @bar, @bazを修正します。 // (Bind Each Volume to Densityがオンの時) @density += sin(@P.x)
Note
Point WrangleやAttribute Wrangleのノードの挙動とは異なり、
不明な@name
変数へ書き込んでも、ボリュームは作成されません。
VEX変数 ¶
一時的な変数を作成することができます。 例えば、以下のコードは、ポイントからのオフセット位置を読みます。
vector temp = @P; temp += {0.1, 0.2, 0.3}; @density = volumesample(@OpInput1, 0, temp);
バインド変数 ¶
いくつかの変数がVolume VOPコンテキストにバインドされています。
変数の頭に@
を付けることで、それらの変数にアクセスすることができます。
P
現行ボクセルの中心の位置。
ix
, iy
, iz
現行ボクセルの整数インデックス。VDBでは、これはマイナスの値になる場合があります。
resx
, resy
, resz
現行ボリュームプリミティブの解像度。VDBでは、これはアクティブボクセル領域のサイズです。
dPdx
, dPdy
, dPdz
0番目のボクセルのX,Y,Zのエッジの長さと向きを指定したベクトル。
center
SOP空間内のボリュームの中心。
primnum
反復が行なわれているプライマリボリュームのプリミティブ番号。 2つ以上のボリュームまたはVDBが配置されている場合、実行されるパスは1つのみで、これは、それらのどちらかのみになります。 Bind Each to Densityはプリミティブ毎に1パスを保証します。
Time
現行時間(秒)。
Frame
現行時間(フレーム)。
TimeInc
フレーム間の時間の増分値(秒)。
OpInput1
, OpInput2
, OpInput3
, OpInput4
Fileパラメータを受け取るVEXオペレーションで、このSOPの該当する入力を参照するために使用することができる文字列。
パラメータ ¶
Code ¶
Group
入力ジオメトリ内の、これらのボリュームのみに対してプログラムを実行します。 このフィールドを空っぽのままにすると、入力ジオメトリ内のすべてのボリュームを修正します。
(上記のボクセル値の読み込みと修正を参照してください。)
Bind Each Volume to Density
ノードがスニペットを適用する方法を変更します。
これをオフにすると、名前によって入力内の特定のボリュームを参照しなければなりません(例えば、@foo
)。
これをオンにすると、すべての入力ボリュームが@density
として扱われるので、1つのスニペットを記述するだけで、
名前に関係なく、すべての入力ボリュームに影響を与えることができます。
(上記のボクセル値の読み込みと修正を参照してください。)
VEXpression
Pointアトリビュートを操作するVEXコードのスニペット。
@variable_name
構文を使えば、ジオメトリアトリビュートにアクセスすることができます。
Volumes 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 ¶
Autobind by Name
name
Primitiveアトリビュートを使って、どのボリュームがどのパラメータにバインドさせるのかを決定します。
name
アトリビュートが存在しなければ、1番目のボリュームがdensityにバインドされます。
“foo”のようなname
は、floatパラメータ“foo”にバインドされます。
“foo.x”のname
は、ベクトル(3つのfloat)パラメータ“foo”のX成分にバインドされます。
“foo.zx”のようなname
は、マトリックス(3行3列)パラメータ“foo”のZ、X成分にバインドされます。
Number of Bindings
Autobind by Name が無効な時、確立するバインドの数を入力します。 各バインドは新しいパラメータセットを追加します。 Remove ボタンを使用すれば、既存のバインドを削除することができます。
Primitive, Primitive Name, VEX Parameter
各プリミティブのバインドを手動で指定します。これは、指定した名前のname
アトリビュートを持ったプリミティブと等価です。
Primitive Nameが空っぽでない場合、それに合致した名前のプリミティブが、指定したVEXパラメータにバインドされます。
Only Output Created Geometry
入力のボリュームを出力しません。その代わりに、VOPで作成されたジオメトリのみが出力されます。 これは、ボリュームからポイントを生成する時に役に立ちます。 繰り返したいボリュームにダミーの書き出しをしなければならないことに注意してください。
Signed-Flood Fill Output SDF VDBs
狭帯域SDFが処理されると、その内側セルの意味が消えてしまうことがあります。 これが原因で、内側セルがデフォルト背景値で誤って出力されてしまいます。 このオプションは、スイープを実行して、これらのタイルを正しい意味にリセットします。 グリッドクラスSDFのVDBにのみ効果があります。
Evaluation Node Path
ch()
などのVEX関数は、通常では、このノードを基準に評価します。
ここでパスを指定すれば、パス検索の開始場所を上書きすることができます。
これは、トップレベルのデジタルアセットが検索ルートになるようにデジタルアセットへ組み込む時に役に立ちます。
Export Parameters
このパターンを使ってVEXシェーダのExportオプションを上書きすることで、特定のボリュームへの書き込みを回避することができます。 パターンはVEXパラメータに一致しますが、バインドしたボリュームには一致しません。 そのボリュームは、読み取り専用になります。
VEX Precision
VEXは、32ビットまたは64ビットの精度で評価することができます。 64ビットの方が特にトランスフォームでは精度が高いです。
Note
入力のアトリビュートは、元の精度を維持するので、32ビットのポジションに対して64ビットVEXを使用すると、まず最初にそれらの位置が64ビットに変換されてから、処理が適用され、書き出し時に32ビットに変換して戻されます。
Autoモードは、入力ジオメトリの優先精度に基づいて32ビットと64ビットを切り替えます。 64ビット精度で実行すると、作成されたアトリビュートがどれも64ビットになります。 32ビット精度で実行すると、作成されたアトリビュートがどれも32ビットになります。 Attribute Castを使用することで、この優先精度を変更することができます。
See also |