0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Houdini x For loop + if】ノードネットワークで反復処理の中の条件分岐

0
Last updated at Posted at 2026-05-27

はじめに

プロシージャルリギングのために、
PointにtagとしてSkeltonやRig情報を埋め込みたいです。

そのためにはまず、Topologyを読み取る必要があり
その足掛かりとして、どんなときに何が起こっているのかを目で見て確認するために
ここでは、VEXではなくノードで反復処理と条件分岐を組む方法として

For loop with FeedbackとSwitch-ifを使った、
Gridの境界エッジのpointグループを拡張して、iterationが偶数回目なら赤,奇数回目なら緑で塗分ける仕組みについて解説します。

ComfyUI.gif

完成したノードネットワーク

image.png

おおよその処理の流れ


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回目以降から処理を反復します

image.png

ifのブロックについて

今回の肝の部分
image.png

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番目に入力されたノードを使う
image.png

最後に

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?