Houdini / VEX / 基本

VEX

VEX

VEX

VectorExpression
ゆるいCベース

Attribute Wrangle


VEXのコーディングにはAttribute Wrangleノードを使用します。「aw」で早く呼び出せます。

変数 / variable

型を指定します。
int        / integer 整数値 個数や繰り返し数、番号など
float     / 浮動小数点のスカラー値 スカラー値とは”1つ”の数値(変数)
vector  / 3つのfloat値を持つもの xyzやrgbなど
string  / 文字列 「’」「”」どちらかで囲む。表記はcamelCase

※他にもarrayやvector2,4など様々な型があります。

int integerVar = 1;
float x = 5.5;
float y = x*2;
vector vecVar = {0, 0.5, 1};
string stringVar = “philipKindredDick”;

変数はひとつのVEXコード内で使用する一時的なものです。
関数などに使用し、最終的にアトリビュートやポイント、プリミティブとして出力します。

アトリビュート / attribute

@前にi,f,v,s入れて型を指定します。
@の後に任意のアトリビュート名を入れます。

//float型のdepthアトリビュートにxを代入
f@depth
= x;

//vector型のCdに0.1, x, 0.5を代入
v@Cd.r = 0.1;
v@Cd.g = x;
v@Cd.b = 0.5;

//他の書き方
v@Cd = {0.1, x, 0.5};
//{}は変数では機能しない為set関数を使用
v@Cd = set(0.1, x, 0.5);

ループとフロー制御

条件分岐

if
if(条件){条件がtrueのときに実行する処理}

//ポイントのy座標をfloat型のyPosとして変数を作成
float yPos = v@P.y;

//y座標が1.0以上のときにCdを0,1,0(緑色)に設定
if(yPos >= 1.0){
  v@Cd = set(0, 1, 0);
}

if-else
if(条件){条件がtrueのときに実行する処理}else{条件がfalseのときに実行する処理}

//ポイントのx,y座標を、それぞれfloat型のxPos,yPosとして変数を作成
float xPos = v@P.x;
float yPos = v@P.y;

//条件 x座標が5.4未満かつy座標が1.0以上
//true Cdを1,0,0(赤色)に設定
//false ポイントを削除

if(xPos < 5.4 && yPos >= 1.0){
  v@Cd = set(1, 0, 0);
}
else{
  removepoint(0, @ptnum);
}

ループ

forループ

for-eachループ

whileループ
while(条件){条件がtrueのときに実行する処理}

//int型のstopperを0で初期化 ループのストッパーとして使用
//float型のsumを0で初期化 合計値として使用
int stopper = 0;
float sum = 0;

//条件 stopperが0
//true sumに1加算代入→sumが100以上か確認→100以上だった場合stopperに1を代入
//stopperに1が代入され、条件がfalseになり処理が終了
while(stopper == 0){
  sum += 1;
  if(sum >= 100){
   stopper = 1;
  }
}

//ループが終了する仕組みを作らないと、永遠に処理が行われてしまう

演算子

等価比較演算子

==
!=
>
<
>=
<=

短終論理演算子

&&
||

関数 / Functions

大量の関数があるため、少しずつ覚えると良いと思います。(私も)
VEXコードの関数に文字入力カーソルをあわせて「F1」を押すと、その関数のヘルプが開けます。

チャンネル関数 / Channel Functions

調整できるパラメータを作成します。

float value = chf(“value”);
int number = chi(“number”);
v@Cd = chramp(“colorRamp”, value);

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

コメント