Blender5.0でシェーダーノードでも使えるようになったRepeat Zone(リピートゾーン)についてまとめた記事です。その名の通り、一連のノードを繰り返し実行できるため、階段状の構造を作る、複雑なパターンを生成する、フラクタル図形を作るといった処理を簡単に行えるようになります。
一方で、「繰り返し」を扱うノードは少し複雑で、慣れないうちは動作が直感的に理解しづらい部分もあり、自分も苦手としているノードのため、Repeat Zoneの基礎的な使い方、注意点、そして使いこなすためのコツについて整理して解説します。
この記事は、BlenderのRepeat Zone(リピートゾーン)について解説している初心者向けの記事です。
難易度
Repeat Zoneとは
Repeat Zoneは、一連のノードを複数回実行するための機能です。
ゾーンは、左側に入力ノード、右側に出力ノード、中央のオレンジ色の領域には繰り返し実行するノードを配置します。
ゾーンが最初に実行されると、入力が評価され、内部ノードに渡されます。Iterationsで設定された回数がゾーン内でリピートされ、終了すると出力ノードから結果を出力します。
ゾーン内のノードは、ゾーン外のノードから入力を受け取ることも可能です。しかし、ゾーン内のノードは出力をゾーン外に送ることはできません。

Repeat Zoneノードのパラメータ
入力(Inputs)
- Iterations(反復回数)…ゾーンを実行する回数を指定します。Iterationソケットは現在の反復のインデックスを提供し、0から始まります。
- Geometry(ジオメトリ)…デフォルトのジオメトリ入力です。複数のノードを追加で接続できます。
プロパティ(Properties)
右のNodeタブの中にあるプロパティの説明です。
- Repeat Items(リピートアイテム)…ゾーンの入力を追加、削除、並べ替え、名前変更するためのリストビューです。
- Socket Type(ソケットタイプ)…選択した入力のデータタイプです。
- Inspection Index(インスペクションインデックス)…ソケットインスペクションやViewerノードで表示する反復の番号です。

実際はリピート回数5回にしていても、Inspection Indexを3にすると、ソケットやビューアをつないだときに表示される情報が3回目の情報になる。リピート回数が増えるごとにどんな値を出力しているか確認できます。
基礎的な使い方
※わかりやすいジオメトリノードでの使い方を主に説明します。
右図では立方体の位置をX軸方向に1mずつ移動させています。
オフセットをRepeatした累積
- Iteration0回目: 0(初期値) 内部ノードは実行されていません
- Iteration1回目: 1mオフセット
- Iteration2回目: 1m(前回の位置) + 1mオフセット = 2m
Iteration2回としたときの出力は、立方体の位置がX方向に2mの位置になります。

ジオメトリを追加していく
ジオメトリを追加していくこともできます。
その場合は外部に追加したいジオメトリノードを置き、Join Geometryノードでリピートゾーン内に引き入れます。
ジオメトリをRepeatして追加する累積
- Iteration0回目: 0(初期値) ポイントは追加されていません
- Iteration1回目: ポイント1個が追加
- Iteration2回目: 前回1個+追加ポイント1個=2個
- Iteration3回目: 前回2個+追加ポイント1個=3個

ジオメトリをどんどん増やしていくようなアニメ、パターン・ジオメトリの作成に使えます。
追加されたジオメトリのインデックスは変化する
上のノードは、Set PositionノードでIndex×0.2だけ位置が右にズレていくようにしてあります。
また、ポイントの真ん中に表示されているのはIndexなのですが、右図を見るとわかるように、ポイントが追加されるごとにインデックス番号がズレていくことがわかります。
ジオメトリが追加されると、その追加されたジオメトリのインデックスが0になり、以前追加されていたジオメトリの番号が後ろへズレていきます。

Iteration出力を使う
Repeatの入力ノードにはIteration出力ソケットがあり、この数値も内部で計算などに使えます。どのような数値が出力されているのかを見ていきます。
右図のノードはiteration出力を使ってポイントを追加していきます。
ポイントの個数に注目してください。右図でIteration(リピート)回数を4と設定したとき、配置されてるポイントは6個になっています。この累積は、以下のような段階を経ています。
Repeat ZoneのIteration出力の累積
- 1回目(Iteration=0): 0(初期値) + 0 = 0
- 2回目(Iteration=1): 0(前回の出力) + 1 = 1
- 3回目(Iteration=2): 1(前回の出力) + 2 = 3
- 4回目(Iteration=3): 3 (前回の出力)+ 3 = 6
- 5回目(Iteration=4): 6(前回の出力) + 4 = 10
つまり、これは三角数列(1+2+3+…)と同じパターンになります。
また、Iteration1回目は数値としては0を出力していることに注意してください。

複数のリピート出力を使う
Repeat入力ソケットにValueノードや、他のジオメトリを入力して、別のリピートルートを作ることができます。(※プロパティでアイテム(ソケット)を追加することもできます)
右図では
- 上:追加するCubeを追加していくジオメトリのためのリピートのソケット
- 下:Valueを足していくためのソケット
を作っています。
これらは、リピートゾーン内でそれぞれ別にリピートされるので、同時に様々な値やジオメトリを累積させることができます。

使いこなすポイント
どんな表現に向いているか把握する

サイズや位置を少しずつズラして累積させる表現
リピートゾーンでは、内部で計算したものを次のリピートで使えることが大きなメリットです。
だんだん小さくする、だんだん位置をズラす、などの積み上げ構造が簡単に作成できます。
iterationsの出力も使えるので、三角数列(1+2+3+…)を使った変化のあるものの表現もできます。
フラクタル構造の表現
また、同様の理由で同じ構造が拡大縮小しながら現れるフラクタル構造を表現するのにも適しています。

以下の記事でいろんなフラクタルの作り方を解説しています。
まずは小さく試す
複雑な構造をいきなり作ろうとせず、1~3回の反復で挙動を確認すると理解しやすいです。
初心者のうちは、簡単に繰り返しのノードをそのまま組んでみて、「繰り返しの部分」を見つけたらリピートゾーンにその部分を入れてみる、など手順を踏んだ方がやりやすいかもしれません。

入力ノードから出力ノードまでノードをつなげる
自分もよくやるミスですが、リピートゾーン内で、入力と出力がつながってないとうまくリピートが機能しません。
ノードを挟んでも、ノードの線はきちんとリピート入力ノードから出力ノードまでつながるようにしましょう。
リピートさせたくない場合
リピートしなくてもいい場合はつながってなくてもいいです。
例えば右図だと、Join Geometryで追加したCubeは、最初に一回追加されるだけで、あとは追加されません。一個だけ追加したい場合もあるので、その場合はつながなくても大丈夫です。

Viewerノードで確認
各反復の結果を確認するために、Inspection IndexやViewerノードを活用すると、どの反復でどの値が生成されているか追いやすくなります。
マテリアルシェーダーでの使い方
シェーダーにおける Repeat Zone は、座標・距離・色などの値を、前回結果を使いながら反復的に更新することができます。
わかりやすいのは座標を更新していく処理ですが、結構難しいので上級者向けだと思います。
ジオメトリノードのように実際に何か物体が目に見えて変わるわけではないので何が起こってるのか理解しにくいです。
右図では元の生成座標を局所的にSnapしていくことで変則的なモザイク画像を作っています。

For Eachとの違い
ジオメトリノードにはFor Eachノードがありますが、この2つは明確に違います。
For Each は「要素ごとに同じ処理を独立して行う」 ノード。
各ポイント / 面 / 辺 / インスタンスに対して特定の処理を一斉に適用
前の要素の結果が引き継がれることはありません。
Repeat Zone とは「前の計算結果を次のループに渡しながら繰り返す」 仕組み。
「前回の結果を覚えながら進む」処理です。
まとめ
Repaet Zoneノードも実際使ってみることで段々と慣れてわかってきます。
文章を読んでいるだけではピンとこないなという方は、まずはSet Positionノードなどで、位置をズラしてみるとなんとなく機能をつかめると思います。
このノードは上級者が作ると、出力結果はなんだかすごいものができあがっているのに内部で何が起こってるのかさっぱりわからなくなるノードでもあります。ただの足し算や引き算でも、どんどんと出力結果が詰みあがっていくと最後は予想もしない法則性がでてきたり、実験してみると面白いものが作れます。


コメント