ここでは VOP とWrangleノードのさわりを巻き取ったホースを例に紹介する。
- Wrangle を使った元になるカーブの作成 (別ページ)
- VOP を使ったノイズの追加 (このページ)
- VOP ネットワークの構築
- パラメータの露出
- Sweep によるサーフェスの作成 (別ページ)
VOP ネットワークの構築
VOP とは Vector OPerator の略。パーティクルや頂点などのポイント情報を処理するために、VEX (Vector EXpression の略)を用いて演算を行う。VEX とは SIMD (Single Instruction Multiple Data) の一種でマルチスレッドで効率よく演算を行うことが出来る。
- 前のページで作成した (vopwrangle_endofp1.hip の) resample1 ノードの出力から TAB->Attribute->Attribute VOP ノードを作成。attribvop1 が出来る。
表示フラグを attribvop1 に移し、ダブルクリックするなり、'i' キーを押すなりして、中に入る。
このパネルの右上に薄字で VEX Builder とある通り、ここは VEX (Vector EXpression) を組むところであり、ビジュアルプログラミング環境である。詳細説明を書き出すとそれだけで終わってしまうので、ここで必要な要点だけを書くと- 左側にあるgeometryvopglobal1 (以下 globals と省略) は、この VOP ノード (attribvop1) の入力 (この場合 resample1) から取得できるデータの種類のリスト。プログラミング的に言えば、グローバル変数。例えば、
- P: Position (位置) 情報: ベクトル型
- v: Velocity (速度) 情報: ベクトル型
- force: フォース情報: ベクトル型
- id: ポイントID: 整数型
- Cd: Diffuse Color (色)情報: ベクトル型
- uv: UV情報: ベクトル型
- N: Normal (法線) 情報: ベクトル型
- 右側の geometryvopoutput1 (以下 output と省略) が この VOP ノード (attribvop1) の出力を司る。ここにも、P, v, force, Cd, N の 5つがある。つまりこれら5つが、この VOP ノードがデフォルトで出力する情報。ここに無いものは追加可能。
- 基本的には、入力である globals ノードと 出力の output ノードの間に必要なノードを作成、データを左から右にデータをわたしていく。
- 各パラメータは、省略形で書かれていて、タイプごと (vector, float, int, string 等) で色分けされている。カーソルをパラメータの上に置けば簡単なヘルプ情報が表示される。
- 同じデータタイプ同士の接続は実線で表示され、そうでない場合は破線で表示される。
- ノードの入力には必ずしも接続が無ければならない訳ではない。接続線が globals とあるノードの間に無くとも接続があるものとみなされる場合もある。これは、有効に働く場合もあるし、そうでない場合もあるので注意が必要。
P (位置情報) と Cd (色情報) はどちらもベクトル型なので実線で接続される。
ビューポートのカーブは以下のようになる。
X,Y,Z の値が R,G,B に渡されていることがわかる。- これは本編とあまり関係が無いので外してしまっても構わない。
- 左側にあるgeometryvopglobal1 (以下 globals と省略) は、この VOP ノード (attribvop1) の入力 (この場合 resample1) から取得できるデータの種類のリスト。プログラミング的に言えば、グローバル変数。例えば、
- TAB->Patterns->Anti-Aliased Noise を実行して aanoise1 ノードを追加。globals の P から aanoise1 の pos 入力に接続。
globals の P と aanoise1 のposは薄緑色でベクトル形を示しているが、aanoise1 の出力である noise はちょっと濃い緑色で実数 (float) 型であり、型が違うことを意味している。- この状態でnoise を output の P に接続すると、接続自体は可能で破線で表示されるが、カーブにノイズが加わる代わりに一箇所に固まってしまう。
- aanoise1 の Signature を "3D Input, 1D Noise" から "3D Input, 3D Noise" に変更。こうすると、noise の色が薄緑色に変更、ベクトル型で出力されるように変更されたことがわかる。
ビューポートの様子は以下のようになった。
元のカーブの形状を保ちつつノイズがかかった状態からは程遠い。 - 今ある aanoize1 を削除して新たに Anti-Aliased Noise を作り直すか、aanoise1 と output を切断、aanoise1 の Signature を "3D Input, 1D Noise" に戻す。
- TAB->Math->Add を実行、add1 ノードを追加。
- 入出力ともに白で、これは型が未だ決まっていないことを示している。例えば、globals の P を input1 に接続すれば薄緑色に変更され、出力 (sum) も同じ色に変更される。
例えば以下の用に接続この接続状態では、X, Y, Z それぞれに同じノイズ量が加わるようになっている。X と Z には同じ値でも Y には別の値を加えたい。そこで、global から取る P をバラバラにしてそれぞれコントロールできるようにする。今の3つの接続はすべて解除し、Add ノードを配置したばかりの状態に戻す。
- add1 を選択、Ctrl+C でコピー、Ctrl+V を2度繰り返し、add2, add3 を追加。それぞれ add_x, add_y, add_z と名前を変更しておくと後々わかり易い。
- TAB->Convert->Vector to Float を実行、vectofloat1 ノードを追加。
- TAB->Convert->Float to Vector を実行、floattovec1 ノードを追加。
- Anti-Aliased Noise ノードをもう一つ追加、元の aanoise1 を aanoise_xz に名称変更、今作成された aanoise2 を aanoise_y に変更。globals の P 出力から接続、aanoise_y の noise 出力を add_y の input2 に接続。
ビューポートの様子は以下の通り
これで接続は終了。ここまでが、vopwrangle_connected.hip
パラメータの露出
attribvop1 の中から抜けて一つ上のレベルにあがると、attribvop1 そのもののパラメータには、今までに追加してきたノードを操作するパラメータが一切表示されていない。
設定を変更するには、再度中に入り、各ノードを選択した上で、パラメータの変更を行う必要がある。これでは使い易いとは言えない。そこで、必要なパラメータのみを露出 (プロモート) することで、ノード内に入ることなく必要な変更が行なえるようにする。
パラメータのプロモートは、パラメータビューで各パラメータの右端に位置するギアアイコンから LMB (左マウスボタン) -> Promote Parameter を実行することで行う。
- 再び attribvop1 ノードの中に入る。
- aanoise_xz ノードを選択。
- Amplitude で Promote Parameter を実行。
- Roughness で Promote Parameter を実行。
- aanoise_y ノードを選択。
- Amplitude で Promote Parameter を実行。
- Roughness で Promote Parameter を実行。
ただ、この状態では Amplitude と Roughness が 2 つずつあり、わかり易いとは言えない。 - aanoise_xz ノードを選択。
- よって、上記画像の赤枠で囲ったギアアイコンから Edit Parameter Interface... を実行。
- 表示される Edit Parameter Interface の 中央の Existing Parameters リストで変更したいパラメータをハイライト選択、右側の Parameter Description 以下の Label を変更し、わかり易い名前にする。
パラメータの名前 (Name) は変えずにラベルの変更だけを以下のように行う。パラメータを一つ変更するたびに Apply を押すこと。- (最初の) Amplitude を XZ Amplitude に
- (最初の) Roughness を XZ Roughnessに
- (2 番目の) Amplitude を Y Amplitude に
- (2 番目の) Roughness を Y Roughness に
- コンパイラフラグと Force Compile ボタンが見たくなければ、それぞれ Interface Options 以下の Invisible をオンにすることで、パラメータビューに表示されなくなる。
ここまでを実行して Accept ボタンを押した結果は以下の通り。
これで中に入ることなしにコントロールが可能になった。
次のページで Sweep によって面を張る。
0 件のコメント:
コメントを投稿