On this page |
概要
これは非常に強力な低レベルにアクセス可能なノードであり、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変数にバインドする
パラメータ
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
@
構文を使った自動バインドは便利ですが、あなたのシステムが複雑になるほど、@
バインドでのタイプミスが、存在しないアトリビュートと
何も警告せずにバインドしてしまう危険性があります。
このオプションは、すべての@
バインドを使用前にプロトタイプとして明示的に宣言するように強制します。
これは、アトリビュートバインドだけでなく、すべての@
バインドに適用されるので、@Frame
を使用したい場合は、それをfloat @Frame;
としてプロトタイプする必要があります。
Force Code Generation
スニペットは、例えばジオメトリを作成したり出力をプリントするなどの副次的効果を持つことができるので、 このコードは、たとえスニペットの出力が不要でも、生成されたVEXコードに常に追加されます。 副次的効果がいらないことがわかっていれば、Force Code Generationを無効にして、その出力が使用しなかった場合にスニペットコードを生成しないようにすることができます。
Standard Variable Names Only
一部のコンテキストでは、アトリビュート名にコロンなどのネームスペース区切り文字を含めることができます。 そのような文字は、標準のVEX変数名では無効です。
このオプションを有効にすると、標準でない文字に遭遇した時点で@
バインドの変数名が終了します。
このオプションを無効にすると、標準でない文字はコンパイラエラーを回避するために暗号化されたVEX変数名の一部として受け入れられます。 これによって、VEX変数をそのようなアトリビュートにバインドすることができます。
入力
Next Input
次の入力値を接続する場所です。各入力は、それに対応する出力を作成します。
Examples
The following examples include this node.
Stadium Crowd Example Example for Crowd Solver dynamics node
スタジアムのセットアップを説明した群衆サンプル。
このセットアップは、スタジアムの群衆を作成します。 回転するcheer_bboxオブジェクトをエージェントの境界ボックスとして使用しています。 エージェントがそのオブジェクトの中に入ると、座っている状態から応援している状態へ推移します。 数秒後には、応援している群衆がまた座っている状態に戻ります。
Note
アニメーションクリップは、シーンを再生する前にベイクするのに必要です。これは、サンプルをCrowdsシェルフから作成した場合に自動的に行なわれます。 そうでない場合は、シーンファイルを希望の場所に保存し、'/obj/bake_cycles' ROP NetworkのRenderをクリックして、ファイルを書き出します。 それらのファイルのデフォルトのパスは、${HIP}/agentsです。
Tip
群衆の一部だけをもっと高速にプレビューしたいのであれば、/obj/crowdsource/switch_all_subsectionにSwitchノードがあります。 そのスイッチを0に設定すると、すべてのエージェントが表示され、1に設定すると、一部のみが表示されます。
Fuzzy Logic Obstacle Avoidance Example Example for Fuzzy Defuzz VOP node
このサンプルでは、Fuzzy Logicコントローラを使用して実装されたエージェントの障害物回避とパスへの追従を説明しています。
See also |