Help us understand the problem. What is going on with this article?

Houdini はじめてのBlock Begin/End

誰向け?

Houdiniのいくつかチュートリアルを触り始め、少し自分でもノードを組んでみようかな?という方向けの記事です。
私がHoudiniを触り始めて最初にぶつかった壁が「Block Begin/End」の使い方です。

Houdiniでの繰り返し

どんなノードを使うの?

繰り返しに使うためのノードはBlock Begin/Endノードです。
ネットワークグラフのペインで、Tabキー→Forで検索すると何種類か出てきます。

image.png

これらはすべて、パラメータ違いのBlock Begin/Endノードのセットです。
(時々、Block Begin/End以外のノードもついてきます)

image.png

繰り返したい処理を、このblockノードで挟みます。
繰り返し処理が行われる部分が、オレンジの枠で囲まれるようになります。

なぜ、こんなに何種類も分けられているのでしょうか?
それは、「何に対して繰り返し処理を行うのか?」がそれぞれ違うためです。

Method

この、「何に対して」を決めるためのパラメータが以下の3つです。
1.Block BeginのMethodパラメータ
2.Block EndのIteration Methodパラメータ
Block EndのIteration Methodパラメータ

順番にみていきましょう。

iteration

まず、「イテレーション」の意味を押さえておきます。
例えば、「箱から白い玉を取り出し、偶数回目なら赤、奇数回目なら青に塗る」という処理5回を行うとします。

この処理を、細かく手順分けすると以下のような書き方になります。

カッコ内の処理を5回行う{
 箱から玉を1つ取り出す
 もし今が偶数回なら
  玉を赤く塗る
 偶数回でないなら
  玉を青く塗る
}

このときの、「箱から玉を1つ取り出す」〜「玉を青く塗る」までの動作をひとまとまりと考えます。
これが、1つのイテレーションと考えます。

処理の中にある「今」とは、「今行っている処理が何回目のイテレーションか」ということを表します。

Block BeginのMethod

image.png

Block BeginのMethodパラメータでは、
各イテレーションが始まる際に、どのような状態のジオメトリーを受け取るか?を設定します。

Fetch Feedback

前のイテレーションで得た結果を受け取ります。

例えば、前のイテレーションで、箱にりんごを1こいれたとします。
Fetch Feedbackでは、1つのりんごが入った箱をそのまま受け取り、現在のイテレーションでりんごをもう1つ入れます。

image.png

Fetch Piece or Point

1つのピースまたは1つのポイントずつ、イテレーションの最初に受け取ります。

image.png

ピースとは、ひとかたまりになったプリミティブです。
ユーザーがアトリビュートによって指定することができます。

image.png

Fetch Metadata

このBlock Beginノードを「メタデータ」として扱うために設定する値です。

image.png

メタデータ用ノードのDetailアトリビュートには、「今現在のイテレーションは何回目か」を示す「iteration」アトリビュートなどが存在しています。
それぞれのイテレーションで違うことをしたいときに、detail()エクスプレッションを使ってこの値を読み込んで使用することができます。

Fetch Input

常にインプットされたジオメトリーを各イテレーションの最初に受け取ります。

例えば、前のイテレーションで、箱にりんごを1こいれたとします。
Fetch Inputでは、最初の箱をそのまま受け取り、現在のイテレーションでりんごを1つ入れます。

image.png

Block EndのIteration Method

image.png

このパラメータではイテレーションの回数をどのように決めるかを設定します。

Auto Detect from Inputs

入力されている情報から、イテレーション回数を検出します。
検出方法は以下の通りです。ヘルプから引用しました。

2番目の入力が存在した場合、Piece Iterationメソッドがそのジオメトリに使用されます。
同様に、Piece Block Pathが存在した場合、Piece IterationメソッドがPiece Blockの入力に使用されます。
どちらでもない場合、Countメソッドが使用されます。

By Pieces or Points

ピースまたはポイントの数だけ処理を繰り返します。
例えば、ピースが12種類あるなら、12回処理を繰り返します。

By Count

すぐ下にあるMax Iterationsパラメータに設定した回数分、処理を繰り返します。

Block EndのGather Method

image.png

ここでは、すべてのイテレーションの処理が終わったとき、その結果をどのように取得するかを設定します。

Feedback Each Iteration

ループの最後のジオメトリを取得します。
Block BeginのMethodをFetch Feedbackにしていると、ちょうど処理を累積した結果を得ることができます。

image.png

Merge Each Iteration

全てのイテレーションの結果を得ます。

Fetch piece or pointsのとき、ピースごとに処理を行っているので最後に結合してやる必要があります。

image.png

まとめ

最初は混乱しやすいパラメータについてまとめてみました。
For Loopが使えるようになると、グッとHoudiniでできることが増えるのでためしてみてください。
コメントや指摘などあればぜひお願いいたします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした