VOP and Wrangle Part 2

ここでは VOP とWrangleノードのさわりを巻き取ったホースを例に紹介する。

  1. Wrangle を使った元になるカーブの作成 (別ページ)
  2. VOP を使ったノイズの追加 (このページ)
    1. VOP ネットワークの構築
    2. パラメータの露出
  3. Sweep によるサーフェスの作成 (別ページ)

VOP ネットワークの構築

VOP とは Vector OPerator の略。パーティクルや頂点などのポイント情報を処理するために、VEX (Vector EXpression の略)を用いて演算を行う。VEX とは SIMD (Single Instruction Multiple Data) の一種でマルチスレッドで効率よく演算を行うことが出来る。

  1. 前のページで作成した (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 とあるノードの間に無くとも接続があるものとみなされる場合もある。これは、有効に働く場合もあるし、そうでない場合もあるので注意が必要。
    例えば、globals の P を output の Cd に接続してみる。
    P (位置情報) と Cd (色情報) はどちらもベクトル型なので実線で接続される。
    ビューポートのカーブは以下のようになる。

    X,Y,Z の値が R,G,B に渡されていることがわかる。
      これは本編とあまり関係が無いので外してしまっても構わない。
  2. TAB->Patterns->Anti-Aliased Noise を実行して aanoise1 ノードを追加。globals の P から aanoise1 の pos 入力に接続。

    globals の P と aanoise1 のposは薄緑色でベクトル形を示しているが、aanoise1 の出力である noise はちょっと濃い緑色で実数 (float) 型であり、型が違うことを意味している。
      この状態でnoise を output の P に接続すると、接続自体は可能で破線で表示されるが、カーブにノイズが加わる代わりに一箇所に固まってしまう。
  3. aanoise1 の Signature を "3D Input, 1D Noise" から "3D Input, 3D Noise" に変更。こうすると、noise の色が薄緑色に変更、ベクトル型で出力されるように変更されたことがわかる。

    ビューポートの様子は以下のようになった。

    元のカーブの形状を保ちつつノイズがかかった状態からは程遠い。
  4. 今ある aanoize1 を削除して新たに Anti-Aliased Noise を作り直すか、aanoise1 と output を切断、aanoise1 の Signature を "3D Input, 1D Noise" に戻す。
  5. TAB->Math->Add を実行、add1 ノードを追加。
      入出力ともに白で、これは型が未だ決まっていないことを示している。例えば、globals の P を input1 に接続すれば薄緑色に変更され、出力 (sum) も同じ色に変更される。 例えば以下の用に接続
      • globals の P を add1 の input1 に
      • aanoise1 の noise 出力を add1 の input2 に
      • add1 の sum 出力を output の P に

        ビューポートの結果は以下の通り
      この接続状態では、X, Y, Z それぞれに同じノイズ量が加わるようになっている。X と Z には同じ値でも Y には別の値を加えたい。そこで、global から取る P をバラバラにしてそれぞれコントロールできるようにする。今の3つの接続はすべて解除し、Add ノードを配置したばかりの状態に戻す。
  6. add1 を選択、Ctrl+C でコピー、Ctrl+V を2度繰り返し、add2, add3 を追加。それぞれ add_x, add_y, add_z と名前を変更しておくと後々わかり易い。
  7. TAB->Convert->Vector to Float を実行、vectofloat1 ノードを追加。
    • globals の P を vectofloat1 の vec 入力に接続。
    • vectofloat1 の fval1, fval2, fval3 を add_x, add_y, add_z の input1 入力に接続。
    • aanoise1 の noise 出力を を add_x と add_z の input2 入力に接続。
  8. TAB->Convert->Float to Vector を実行、floattovec1 ノードを追加。
    • add_x, add_y, add_z のそれぞれの sum 出力を floattovect1 の fval1, fval2, fval3 入力に接続
    • floattovect1 の vec 出力を output の P に接続。

      aanoise1 の Roughness を 0.38 にしたときのビューポートの様子。
  9. 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 を実行することで行う。

  1. 再び attribvop1 ノードの中に入る。
    • aanoise_xz ノードを選択。
      • Amplitude で Promote Parameter を実行。
      • Roughness で Promote Parameter を実行。
    • aanoise_y ノードを選択。
      • Amplitude で Promote Parameter を実行。
      • Roughness で Promote Parameter を実行。
    再び一つ上に上がりパラメータビューを確認すると以下の通り。

    ただ、この状態では Amplitude と Roughness が 2 つずつあり、わかり易いとは言えない。
  2. よって、上記画像の赤枠で囲ったギアアイコンから Edit Parameter Interface... を実行。
  3. 表示される Edit Parameter Interface の 中央の Existing Parameters リストで変更したいパラメータをハイライト選択、右側の Parameter Description 以下の Label を変更し、わかり易い名前にする。

    パラメータの名前 (Name) は変えずにラベルの変更だけを以下のように行う。パラメータを一つ変更するたびに Apply を押すこと。
    • (最初の) Amplitude を XZ Amplitude に
    • (最初の) Roughness を XZ Roughnessに
    • (2 番目の) Amplitude を Y Amplitude に
    • (2 番目の) Roughness を Y Roughness に
  4. コンパイラフラグと Force Compile ボタンが見たくなければ、それぞれ Interface Options 以下の Invisible をオンにすることで、パラメータビューに表示されなくなる。
    ここまでを実行して Accept ボタンを押した結果は以下の通り。

    これで中に入ることなしにコントロールが可能になった。
ここまでが vopwrangle_endofp2.hip

次のページで Sweep によって面を張る。

0 件のコメント:

コメントを投稿