VOPとVEX


こんにちは、篠島です。

VOPとVEXは非常に似ていてます。VEXはHoudini独自のプログラミングの言語であり、そのVEXの関数をノードとして視覚的に組み合わせられるのがVOPだと思って大丈夫だと思います。

VEXの日本語のヘルプはこちら。
http://sidefx.jp/doc/vex/index.html

VOPで組み上げたネットワークはWrangleノードを使ってVEXコードを書く事で同等の処理をさせる事が可能です。Attribute VOP やAttribute Wrangle は両方共マルチスレッド対応になります。

 

まず簡単な例として、Boxを上に1ユニットだけ上げる処理をAttribute VOP と Attribute Wrangleによって行ってみようと思います。この例はジオメトリの頂点を編集してオブジェクトを上に移動しているのであって、オブジェクトのトランスフォームでジオメトリ全体を移動しているのとは異なります。

今回のサンプルファイルです。
vopvex.zip

box

まずVOPネットワークは下のようになります。Pの値のYの値を編集し、Pに出力しています。vop

同じことをAttribute WrangleによってVEXコードを書いたものが下になります。 プログラミング経験が無い方はすごく難しく思えるかもしれませんが、慣れると簡単な処理はWrangleノードでVEXを書いたほうが断然早いです。wrangle

まず、@P というのがPosition (位置) を表しています。@の記号は変数の様な物で、Geometry Spreadsheetにあるアトリビュートとptnum(ポイントの番号)などのグローバル変数を@によってアクセスする事が可能です。

attribute

そして@P.y とありますが、これは@Pで得られた位置ベクトルのY座標を意味しています。@P.y = の部分は「ポイントのY座標の位置をセットしますよ」という意味です。そして右側の@P.y + 1 の部分ではポイントのY座標の値を読み込み、それに1を足すことで全てのポイントのY座標の位置に1を足しています。VEXはC言語をベースに作られているので、文の最後にはセミコロンを付けます。この文を簡潔にして

@P.y += 1;

と書いても同様の意味です。

今回は非常に簡単な例でしたが、詳しいVOPやVEXの使い方をこれから少しずつ紹介していこうと思います。