文系の blender 4.1 はじめての Geometry Node | Repeat 繰り返し
前の記事で、ほとんどのプログラムは、if(条件分岐)と、for, while(繰り返し)でできている、と書きましたが、ほぼ本当です。
ジオメトリノードでは、for, while などのノードはありませんが、おもに比較的最近になって導入された Repeat ノードがそれにあたります。
ここでは、その Repeat ノードについて、簡単に紹介します。
環境 Blender 4.1.0 , Mac Mini M1 OS 14.4
Node の作成
Geometry Node
平面など任意のオブジェクトを追加
上部メニューの Geometry Nodes を選択
New(新規)ボタンをクリック
ここではモディファイア名を RepeatNodes とした。
Group Input(グループ入力)は削除し、以下のノードを組む。
上では、数値を文字列に変換し、確認のため、文字列をカーブとしてビューポートに表示している。
Repeat Node
STEP 1
Repeat ノードを追加し、N キーで左からプロパティ画面を表示させる。
Node タブをクリックし、Repeat ノードのプロパティを表示する。
STEP 2
Repeat ノードの入出力は、ここでは整数としたいので、デフォルトの Geometry を Value(任意)と変更し、Socket Type を Integer とする。
STEP 3
Repeat Node の出力を、Value to String ノードに接続。
Add ノードを Repeat ノード内に追加する。
Repeat Node の Iterations の数値を上げると、上の表示値も同時に上がる。Repeat ノード内で 1 を足す、という操作が 3 回繰り返され、リピート終了後、合計値が出力されているためだ。
1 〜 100 を足す
せっかくの繰り返しなので、1 から 100 までを足し合わせてみる。
1 + 2 + 3 + 4 …. + 98 + 99 + 100 = ?
上の Value は、0 , 1 , 2, 3 … となるので、それを放り込む箱として、Result という変数を別に用意する。
Repeat ノードを選択し、+ ボタンで、合計用の値、Result を追加し、Socket Type を Integer ( 整数 ) とする。
下のようにノードを組み、Value to String ノードへの接続を、Result に変更する。
上の Value の値は、リピート毎に、0, 1, 2, 3, 4 … と値が増え、Result は、同様にリピート毎に、Value の値が加算されて、1, 3, 6, 10, 15 … のように増える。
結果
Circle リピート 01
せっかくのジオメトリノードなので、ジオメトリを繰り返してみる。
STEP 1
上の同じ手順で、新しいジオメトリノードを作成。名前を RepeatCircles とする(必須ではない)
Group Input(グループ入力)は削除し、以下のノードを組む。
上の 100 までの足し算と同じで、ここでは、Geometry が合計値の箱の役割をし、Join Geometry(ジオメトリ統合)ノードで、リピート毎に新規の Curve Circle(カーブ円)を加えている。
ただ、このままでは Iterations を増やしても、同じ大きさのサークルが追加され、みためが同じなので、半径をリピート毎に増やしてみる。
STEP 2
上記と同じ手順で、Repeat ノードに 半径用の変数 Rad を作成し、Socket Type を、Float とし、下のノードを組む。
Rad は、初期値 0.1 から、リピート毎に 0.2 加算され、0.3, 0.5. 0.7 … の値をカーブサークルのRadius(半径)に渡している。上では、この処理を、6 回 繰り返している。
STEP 3
さらに、Transform Geometry ノードを加え、 カーブサークルの Translation をランダムに変化させた。
Transform Geometry | ジオメトリトランスフォーム
ジオメトリの Translation(移動)、Rotation(回転)、Scale(スケール)を変更することができる。
Random Value | ランダム値
ランダムな値、乱数を生成できる。上では、0 から 0.2 までの乱数を生成している。
Circle リピート 02
ノード自体は上と同様だが、すこし立体的なオブジェクトを作成してみる。
STEP 1
下のオブジェクトを作成し、名前を RingCircle とした。
ジオメトリノードの構成は、上の Curve Circle とほぼ同じ。相違点は、
Curve Circle の代わりに、Object Info(オブジェクト情報) ノードを接続し、上の RingCircle を指定。
ランダム値による変化を、Translation(移動)から、Rotation(回転)に変更。
結果
まとめ
すこし詳しい方なら(そもそもそんなひとは読んでないかもしれませんが)、それはリピートノードを使わなくてもできるよ、と指摘されるかもしれません。
そもそもオブジェクトは、点や線や面の連続、繰り返しで、それじたいがすでにリピート構造ともいえ、そのまま利用できるからです。
ただ、リピートノードでなくてはできないこともあるでしょうし、理解しておくと幅も広がるでしょう。わたしもこれから応用したいと思っています。ただ、すこし複雑になると、文系は頭もぐるぐる回ってきます。
この記事が気に入ったらサポートをしてみませんか?