※この記事では、主にSOPでのVEXの使用について扱っています。
概要
公式ドキュメント
VEX
https://www.sidefx.com/ja/docs/houdini/vex/index.html
VEX言語リファレンス
https://www.sidefx.com/ja/docs/houdini/vex/lang.html
使用方法

ネットワークエディタでのVEXコーディングには、Attribute Wrangleノードを使用します。

変数 / variable
概要
変数は、ひとつのAtribute Wrangleノード内で一時的に使用する値です。
関数などに使用します。作成した値を外で扱いたい場合は、後述のアトリビュートとして書き出すと良いです。
値には型の種類があります。
記述ルール
//型の定義 変数の名前 = 代入する値
int namae = 1;
型の種類と記述ルール
| VEXでの記述 | 名称 | 概要 |
| int | integer | 整数値。個数や繰り返し数、番号など |
| float | float | 浮動小数点のスカラー値。スカラー値とは”1つ”の数値(変数) |
| vector | vector | 3つのfloat値を持つもの。xyzやrgbなど |
| string | string | 文字列。 「’」「”」どちらかで囲む。”hiho” |
※他にもarrayやvector2,4など様々な型があります。
コードのサンプル
int integerVar = 1;
float x = 5.5;
float y = 4*2;
vector vecVar = {0.0 , 0.5 , 1.0};
string stringVar "aiueo";
アトリビュート / attribute
概要
VEX上でアトリビュートを扱うことができます。
既にあるアトリビュートの値を取得し編集することができます。
VEX上でアトリビュートを作成し、オブジェクトに受け渡すこともできます。
記述ルール
//型の定義@アトリビュートの名前 = 代入する値;
f@namae = 9.0;
VEXでは「attribute」を「@」と記述します。
@前に型の頭文字(i,f,v,s)を入れて型を指定します。
@の後にアトリビュート名を入れます。
型の種類と記述ルール
| @の前に入れる文字 | 型 |
| i | integer |
| f | float |
| v | vector |
| s | string |
//float型のdepthアトリビュートに 6.0 を代入
f@depth = 6.0;
//vector型のCdアトリビュートに 0.1, 1.0, 0.5 を代入
v@Cd.r = 0.1;
v@Cd.g = 1.0;
v@Cd.b = 0.5;
//他の書き方
v@Cd = {0.1 , 1.0 , 0.5};
//他の書き方2
v@Cd = set(0.1 , 1.0 , 0.5); /*変数を使う場合は{}での書き方ではエラーが出てしまう為、set関数を使う*/
ループとフロー制御
条件分岐
if
if(条件){条件がtrueのときに実行する処理}
//if文で使う変数を作成。float型の変数名「yPos」としてポイントのy座標の値を代入した変数を作成
float yPos = v@P.y;
if(yPos >= 1.0){ /*条件:y座標が1.0以上のときに*/
v@Cd = set(0, 1, 0); /*実行する処理:色(@Cd)を緑色(0,1,0)に設定*/
}
if-else
if(条件){条件がtrueのときに実行する処理}else{条件がfalseのときに実行する処理}
//if文で使う変数を2つ作成
//float型の変数名「xPos」「yPos」としてポイントのx,y座標の値を代入した変数をそれぞれ作成
float xPos = v@P.x;
float yPos = v@P.y;
if(xPos < 5.4 && yPos >= 1.0){ /*条件:x座標が5.4未満かつy座標が1.0以上*/
v@Cd = set(1, 0, 0); /*trueのときに実行する処理:色(@Cd)を赤色(1,0,0)に設定*/
}
else{
removepoint(0, @ptnum); /*falseのときに実行する処理:ポイントを削除*/
}
ループ
forループ
for(繰り返し回数の初期値;繰り返し回数の条件;増分){条件がtrueのときに実行する処理}
//for分でループの繰り返し数として使う変数を作成。int型の変数名「num」を作成。
int num = chi("num");
for(int i = 0; i < num; i++){
@set += 1;
}
for-eachループ
whileループ
while(条件){条件がtrueのときに実行する処理}
int stopper = 0; /*ループのストッパーを作成。int型の変数名「stopper」を作成*/
float sum = 0; /*処理の繰り返し数を作成。float型の変数名「sum」を作成*/
while(stopper == 0){ /*条件:stopperが0*/
//trueのときに実行する処理
sum += 1; /*sumに1加算代入*/
if(sum >= 100){ /*sumが100以上か確認。100以上だった場合*/
stopper = 1; /*stopperに1を代入*/
}
}
//sumが100以上になったときにループが終了する
演算子
等価比較演算子
==
!=
>
<
>=
<=
短終論理演算子
&&
||
関数 / Functions
大量の関数があるため、少しずつ覚えると良いと思います。(私も)
VEXコードの関数に文字入力カーソルをあわせて「F1」を押すと、その関数のヘルプが開けます。
チャンネル関数 / Channel Functions
調整できるパラメータを作成します。
int number = chi(“number”);
v@Cd = chramp(“colorRamp”, value);

コードを書いた後、スライダーアイコンを押しspare parameterを作成します。(①)
「Edit Parameter Interface…」から、値のTypeやRangeなど、扱いやすいように編集できます。(②)


コメント