Wrangle(SOP)のVEX例文。メモより抜粋。
よう使うglobal変数
//SOP @Cd //Point Color @P //Point位置 @v //Point Velocity @ptnum //処理中のPoint番号 @pscale //Particle Scale @numpt //Point総数 @N //法線 //時間 @Frame; //Frame @Time; //Time
Attribute読み書きあれこれ
//Type別 f@Float = 1.0; //float i@ID = @ptnum; //int v@Vec = {0,1,2};//vector u@UV = {4,5}; //vector2 s@Text = "name";//string //個別にアクセス(位置) @P.x = @P.x + rand(@ptnum); @P.y = anoise(@P.y); @P.z = fit01(@P.z,0,5); //個別にアクセス(色) @Cd = {1,0,0}; @Cd.g = @Cd.g+1;
Pointを追加する
vector pos = {0,0,0}; addpoint(geoself(), pos);
Primitiveを追加する(Line)
int prim = addprim(geoself(), "polyline"); addvertex(geoself(), prim, 0); addvertex(geoself(), prim, 1);
(ポイント0とポイント1を繋ぐ)
Primitiveを追加する2(Line)
int nPoly = chi("n"); int startPt = chi("stratPoint"); if(@ptnum == startPt){ int prim = addprim(0, "polyline"); for(int i=0; i<nPoly; i++){ addvertex(0, prim, @ptnum+i); } }
(指定したスタートポイントから、指定した数のポイントを繋ぐ)
Primitiveを追加する3(面)
int prim = addprim(geoself(), "poly"); addvertex(geoself(), prim, 0); addvertex(geoself(), prim, 1); addvertex(geoself(), prim, 2);
(ポイント0とポイント1とポイント2を繋いで面を作る)
Primitiveを追加する4(面)
int nPoly = chi("n"); if(@ptnum%3 == 0){ int prim = addprim(0, "poly"); for(int i=0; i<nPoly; i++){ addvertex(0, prim, @ptnum+i); } }
(ポイント3つごとに面をはる)
Pointを消す
if (@ptnum%5==0){ removepoint(geoself(),@ptnum); }
(ptnumが5の倍数のpointを消す)
Primitiveを消す
if (@primnum%2==1){ removeprim(geoself(), @primnum, 1); }
Groupを作る
if(@ptnum &amp;amp;amp;lt; chi('threshold')){ i@group_mygroup=1; } if(@ptnum == 10){ i@group_mygroup=0; }
@group_*の形式でグループを設定、参照できる。*には任意のグループ名。int型。
グループに属するかどうかは@group_* == 1でチェックできる。
グループに追加する場合は、i@group_*=1
グループから外す場合は、i@group_*=0
Group作る(別解)
string gpName = "testGroup"; for(int i=0; i &amp;lt; @numpt; i++){ if(@P &amp;lt; 0){ setpointgroup(geoself(), gpName, @ptnum, 1 ,"set"); } }
(primitiveのグループを作るときは”setprimgroup”)
記述からパラメータ作成
先に書いといて、横っちょにあるボタンを押すと、記述したパラメータを作成してくれる。
初期値はParameter Interfaceで設定しろってことかな。
使用バージョン:Houdini 14
Wrangleの記述方法はバージョンによって変更される場合があるので注意が必要。
コメント