はじめに
プロシージャルリギングのために、
PointにtagとしてSkeltonやRig情報を埋め込みたいです。
そのためにはまず、Topologyを読み取る必要があり
その足掛かりとして、どんなときに何が起こっているのかを目で見て確認するために
ここでは、VEXではなくノードで反復処理と条件分岐を組む方法として
For loop with FeedbackとSwitch-ifを使った、
Gridの境界エッジのpointグループを拡張して、iterationが偶数回目なら赤,奇数回目なら緑で塗分ける仕組みについて解説します。
完成したノードネットワーク
おおよその処理の流れ
Gridを入力
----------
#initialize
境界エッジをPointグループで取得
そのPointグループを赤で塗る
赤用_空のPointグループの作成
緑用_空のPointグループの作成
----------
#iteration
境界エッジのPoint、赤用のPoint、緑用のPoint それぞれのグループを結合
結合したPointグループを1Point分拡張
拡張後と拡張前のポイントグループの差分をiteration毎に塗り分けるためのPointグループにする
#if
iterationが奇数回目か偶数回目かで、detailクラスにattribute odd = 1 ,odd = 0 を追加
奇数回目なら差分のグループを、緑用のPointグループに追加
偶数回目なら差分のグループを、赤用のPointグループに追加
----------
緑用のPointグループを緑で塗る
赤用のPointグループを赤で塗る
💡 概念の補足:なぜ初期化(Initialize)が必要なのか?
ここで空のグループを作っているのは、コードを書くときに誰もがやっている「ループや条件分岐に入る前に、あらかじめ変数を用意しておく」、あるいは「配列を扱う前に、空の配列 [] を作って初期化しておく」という処理とまったく同じです。
3DツールであるHoudiniのノードネットワークも、本質的には「コードの視覚化」に過ぎません。この「器をあらかじめ用意しておく」という感覚が分かると、ノードで組んでいる処理とコード(プログラミング)が頭の中でスッと繋がるはずです。
For-Loop with Feedbackについて
画像のように
0回目では処理をせずにそのままbeginへ渡し、1回目以降から処理を反復します
ifのブロックについて
When_odd
// Run Over: Detail
int iteration = detail("op:../repeat_begin_metadata", "iteration", 0);
// 奇数の時
if (iteration % 2 == 1) {
i@odd = 1;
// 偶数の時
} else {
i@odd = 0;
}
作成したメタデータのdetail attributeを読み込んで、モジュロ演算を使って偶奇を分離
Switch-if
この設定では全ての条件を満たしたときに、2番目に入力されたノードを使う

最後に
反復処理と条件分岐がノードで組めれば、複雑なことでも局所的に観察して、取るべき対応ができるはずなので今後のためにもここで扱うための基礎固めができると良いと思います。



