On this page | |
Since | 12.5 |
概要 ¶
これは非常に強力な低レベルにアクセス可能なノードであり、VEXに詳しい熟練者が、コードを使って値を調整することができます。
このノードは、Point Wrangle SOPや他の“Wrangle”ノードに似ており、VEXスニペットにより、ジオメトリを操作できます。
Warning
このノードを扱うには、VEX言語を理解している必要があります。 そうでないと、このノードを使えば不正なコードを記述しがちです。
このノードはクッキング時にスニペットを実行します。 入力するワイヤーの値は、VEX変数として使用することができます。 スニペットは変数を修正できます。 その後、その値はノードの出力として通過します。スニペットが値を修正してもしなくても、各入力にはそれに対応する出力があります。
例えば、foo
という名前の入力ワイヤーがある場合、次のようなスニペットを書くことができます。
foo *= 2
すると、foo
出力は、foo
入力の値の2倍になります。
-
ノードのを押すと、スニペットからのエラー出力を確認できます。
-
VEX関数の
ch
を使ってパラメータを評価することができます。 パスは、このノードの相対パスです(ch("parm")
は、このノードのparm
パラメータを評価します)。 この評価は、現行時間で実行されます。
入力を作成する ¶
-
このノードには、どのようなデータタイプのワイヤーでも受け取ることができる“マルチ入力”があります。 この入力に接続すると、ノード上に新しい入力が作成されます。 その入力の値は、入力の内部の名前を変数として参照することで使用することができます。 VOPノードの入力/出力上にマウスポインタを重ねると、その内部の名前が確認できます。
-
Variable name # パラメータにより、数字による入力を固定の名前に変更することができます。 例えば、1番目の入力が変数
foo
にマップされるとします。これにより、コードを変更しなくても入力を再接続できます。 -
直接、グローバル変数の読み込みや書き出しができます(例えば、SOPコンテキストの
P
およびCd
)。 しかし、 グローバル変数を直接使用することは推奨しません 。 HoudiniではVOPがコードを生成する順序については保証がないため、グローバル変数に値を割り当てると予期せぬ結果が起こることがあります。 それよりもむしろ、グローバルノードからこのノードへ明示的に接続してください。 -
Inline VOPと異なり、変数の前に
$
を付けないでください。(スニペットは関数の定義内に含まれます。)
ジオメトリアトリビュートをVEX変数にバインドする ¶
SOPコンテキストやジオメトリに適用したCVEXシェーダでは、普通、スニペットでジオメトリアトリビュートの読み込みや書き出しを行なう必要があります。 ジオメトリアトリビュートにアクセスする一番よい方法は、Bind VOPをこのノードに接続することです。
しかし、VOPネットワークがロックされている間にスニペットパラメータをプロモートしてユーザが変数をバインドできないようにする必要があるかもしれません。
この場合、ユーザは、以下で説明している@
構文によりアトリビュートにアクセスすることができます。
VEX Snippet パラメータは、VEXコードのスニペットを入力して、入力ジオメトリに対して実行することができます。 VEX Snippetパラメータで利用可能な構文に関する基本的な情報は、VEXスニペットを参照してください。 VEX言語の一般的な情報は、VEXの章を参照してください。
パラメータ ¶
Code Snippet
Pointアトリビュートを操作するVEXコードのスニペット。
@variable_name
構文を使えば、ジオメトリアトリビュートにアクセスすることができます。
Include Files
シェーダの先頭に含める必要のあるファイルをリストにします。
この仕組みを使用すれば、それらのファイルに複雑な関数を書き込み、それから1行のVEXコードで呼び出すことができます。
これは、単にvoplib.h shading.h
のようなファイルリストです。
Outer Code
このパラメータは、シェーダ関数定義の外側(前)に表示するソースコードを指定します。
Expand Expressions in Code
一時的な変数に$
を使用したい場合、変数名の拡張ができないようにする必要があります。
これを行なわないと、一時的な名前が拡張されます。しかし、$
の使用は推奨しません。
Variable Name #
このオペレータに接続した各入力については、入力用の名前を指定することができます。 空っぽの文字列をテーブルで指定する場合、名前は各入力に接続されたオペレータからコピーされます。 これは、入力から読み込む、および出力へ書き出す、その両方のコードスニペット内で使用される名前になります。
Bindings to Export
アドホック(一時的)なバインドが@
構文により作成される時、そのバインドは、読み取り専用のパラメータとして、生成されたVEX関数へ取り込まれます。
しかし、そのバインドがこの文字列に一致する場合、そのバインドはエクスポートのフラグが付きます。
例えばVOP SOPコンテキストでは、これにより、そのバインドが新しいアトリビュートを作成します。
Enforce Prototypes
スニペット内でまず型宣言として@
バインドを宣言しないと、それらのバインドが使用できないようにします。
これは、アトリビュート(例えば、@Cd
)と@ptnum
や@Frame
といった“便利”バインドのどちらにも当てはまります。例:
// バインドを宣言します。 int @ptnum; float @Frame; vector @Cd; // 宣言の後にバインドを使用します。 int pointnum = @ptnum; float red = @Cd[0] / @Frame;
@
構文を使った自動バインドは便利ですが、シーンが複雑になるにつれて、@
バインドのタイプミスが原因で不意に存在しないアトリビュートをバインドしてしまう危険性があります。
Force Code Generation
スニペットは、例えばジオメトリを作成したり出力をプリントするなどの副次的効果を持つことができるので、 このコードは、たとえスニペットの出力が不要でも、生成されたVEXコードに常に追加されます。 副次的効果がいらないことがわかっていれば、Force Code Generationを無効にして、その出力が使用しなかった場合にスニペットコードを生成しないようにすることができます。
Standard Variable Names Only
一部のコンテキストでは、アトリビュート名にコロンなどのネームスペース区切り文字を含めることができます。 そのような文字は、標準のVEX変数名では無効です。
このオプションを有効にすると、標準でない文字に遭遇した時点で@
バインドの変数名が終了します。
このオプションを無効にすると、標準でない文字はコンパイラエラーを回避するために暗号化されたVEX変数名の一部として受け入れられます。 これによって、VEX変数をそのようなアトリビュートにバインドすることができます。
入力 ¶
Next Input
次の入力値を接続する場所です。各入力は、それに対応する出力を作成します。
See also |