izhoudiniTweetこの記事では一番簡単なVEXの用途である、VEXpressionについて単純な例を出しつつ紹介します。VEXpressionとは、HoudiniのノードのパラメータのエクスプレッションをVEXを使って記述する方法です。HScriptやPythonでのエクスプレッションと異なり、VEXpressionは全てのノードで利用することはできません。ノード内にVEXpressionパラメータが存在するノードに限り、VEXpressionパラメータ内でVEXpressionを記述することが可能です。Wangleなどが挙げられます。VEXpressionは通常のVEXと異なり、記述形式が複数あり、どのように記述をする必要があるかはノードによってまちまちです。最初に、VEXpressionパラメータの名前の部分にカーソルを当てて、説明を確認する必要があります。WangleノードにおけるVEXpressionパラメータの説明です。スニペットを記述しろ、以外には特に記載がありません。これは通常のVEXと同じような記法で記述が可能ということです。Attractノードです。これはgoalというローカル変数を使用して記述しろ、ということになります。このノードはパーティクルを特定の座標Goalに引き寄せるような力を与えるノードとなりますので、そのGoalの位置を示すベクトル変数goalをVEX内で利用し、この変数goalにGoalの座標を代入する必要があります。Expressionノードです。こちら確認すると、非常に長い記載が確認できます。ここでは、通常のVEXの記述形式ではなく、VEXのベクトル型の変数あるいはアトリビュート名を記述するような形となっております。z)の形式で記述することが求められています。通常のVEXとは異なり、行末のセミコロンは不要であることと、他の行を混ぜた複数行の記述は不可能ということです。Expressionノードです。単一行のみ記述することができ、代入式は記述できず、行末のセミコロンは不要であると記載されています。これらのパラメータの詳細はどれもノードのドキュメントに記載されております。使うノードのVEXpressionの項目は、一度ドキュメント上で確認をしておくことをお勧めします。次に、実際にVEXpressionを記載していこうと思います。Expressionノードを例に出してみます。このノードを用いて、CdアトリビュートをVEXpressionで作成していきます。今回のファイルはこちらです。ネットワークは簡単です。Gridノードを作成し、その下にMountainノードを繋げることで、グリッドに山のようなノイズを与えています。Expressionノードを接続しました。Expressionノードから順に、パラメータを見ていこうと思います。2文字のみとなっております。この@はアトリビュートのことを指します。Typeのパラメータの設定と同様のクラスに存在するアトリビュートはVEXpression上で、@nameの形式で取得が可能です。AttributeのPが@Pの形式で取得できます。今回は、その値がそのままCdアトリビュートの値として入力されています。Spreadsheetを確認してみると、Pの値がそのままCdに入っていることがわかります。代入されていることがわかります。Pというのは各Pointの座標を示すアトリビュートです。Viewで見るとよくわかりますが、Mountainノードがない状態では軸付近以外は綺麗に4色に分かれているのが確認できます。左下はZのみプラスなので青、左下はX,Zがプラスなのでピンクになっております。Mountainノードを入れることで、Y成分にMountainノードによるノイズが発生し、値に変化が起きるので、ご覧のように、色にもG成分が付与されるようになることが確認できます。Expressionノードを見てみましょう。今度は少し複雑なVEXpressionが記述されております。先ほど異なり、標高を考慮した、山に比較的合うような色合いが再現できています。Expressionノードには下記のような、VEXpressionが記述されております。abs(@P.y)*0.3)先ほど紹介したset()関数が使われております。こちらはベクトルなどを新規に定義する際に使う関数です。ここでは、緑の値は1で固定し、赤と青の値には、以下のようなエクスプレッションが記述されています。abs(@P.y)HScriptの記事でも似たような関数をご紹介したかと思いますが、ここでは、VEXのabs()関数が使用されています。abs()はその数字の絶対値を取得する関数です。今回は@P.yという記法を用いてPアトリビュートのyコンポーネント、つまり各ポイントのY座標を取得しており、それをabs()関数に入力して、負の値を正にしております。最後に青の値のみ、abs()関数の結果に0.3を乗算して、色味を調整しております。これにより、Yの値が0に近い部分は緑の色味が強く、0から遠ざかるに従って赤と青も強くなるので、茶色に近づくような色合いになるようにしております。ちなみに今回のVEXpressionは元のジオメトリの高さを考慮に入れていないので、このようにジオメトリの大きさを大きく変えると、正常に動作してくれない場合があります。Wrangleノードを利用し、複数行のVEXを記述する必要があります。以上が簡単なVEXpressionの使用例となります。次の記事以降では、VEXの構文であったり、基礎的な知識について、少し掘り下げてご紹介していこうと思います。Inc.の商標または登録商標です。他のすべてのブランド名、製品名、および商標はそれぞれの所有者に帰属します。当サイトは株式会社インディゾーンが運営しています。