文系の blender 4.1 はじめての Geometry Node | 不思議なボール
不思議な動きをするボールの動画があり、ジオメトリノードでもできないかと、再現してみました。
環境 Blender 4.1.0 , Mac Mini M1 OS 14.4
ことばでは説明がむつかしいので、動画をご覧ください。
準備
半径 0.05 m の平面の円を作成し、名前はCircle とした。
Geometry Node
平面など任意のオブジェクトを追加
上部メニューの Geometry Nodes を選択
New(新規)ボタンをクリック
Group Input (グループ入力) はここでは必要ないので削除し、下のノードを組む。ジオメトリノード名は Circling Balls とした。
Object Info には Circle オブジェクトを指定する。
STEP 01
動画をみると、ひとつひとつのボールは直線上を往復しているだけだが、端ですこし速度が落ちているので、それをサインカーブで再現する。
下のノードを追加し、Set Position ノードの Offset に接続する。
Sine ノードの Value には、 #frame/15 と入力する。
スペースキーを押すと、ここでは、左右 1 m の範囲で、Circle オブジェクトがなめらかに往復運動する。
STEP 02
動画では、12 個のボールが異なる角度で往復しているので、ボールの往復路の Z 軸の角度を変更する。
Transform Geometry ノードを追加し、Rotation(回転) の Z の値を 90 度とした。
スペースキーを押すと、今回は、縦に往復運動する。この回転値をこの後利用する。
STEP 03
移動角度を変えた 12 個のボールを設置する準備として、上のノードをグループ化する。
STEP 02 の 5 個のノードを B キーなどで選択し、⌘(Ctrl) + G キー でグループ化、下のノードを追加する。
To Radians の Degrees は、左の Group Input の空のソケットへ接続。
グループ外から、Z軸の回転値を受け取れるようにしている。
必須ではないが、後々わかりやすくするため、N キーで左からプロパティ画面を表示させ、Value を Zrotation へ名前を変更する。
ボールの配置
各ボールは、Zrotation の値で往復路の角度を変えることができるようになったので、Repeat ノードで、30度づつ角度を変えながら、12 個のボールを設置する。
STEP 01
Tab キーを押し、グループ画面から全体のノード画面へ戻る。
グループ名は、ここでは Balls とした。
Repeat Zone を追加し、下のノードを組む。
上では、 Ball グループが、繰り返しごとに Join Geometry ノードで統合され、Iterations(反復)の数だけ増える。
STEP 02
このままでは同じ位置に Ball グループが配置されるだけなので、グループによって回転を変えるため、グループの Zrotation に渡すための値を用意する。
Repeat ノードを選択し、N キーでプロパティ画面を表示
Node タブを選択。+ボタンでアイテムを追加、名前を Rotate とした。
Socket Type は Float を選択。
Math(数式) - Add(加算)ノードを追加し、下のように接続する。
Rotate の値は、Iteration(反復)による繰り返しごとに、値が 30 増え、0, 30, 60, 90… のようになり、その値を、上で設定した Zrotation に渡している。
結果
スペースキーでアニメーションを開始する。反復する花火のように単純に全体が伸び縮みするだけで、もちろんお手本の動画のようではない。
ボールの初期位置が、すべて同じだからだ。
修正
ボールの開始位置、すなわち、各ボールのフレーム初期位置をボールによって変化させる。
STEP 01
Balls グループの右上のアイコンをクリックし、グループを展開する。
Sine ノードの左に、Math - Add ノードを加え、下のように設定。
上記と同じ手順で、Add ノードの Value を、Group Node の空ソケットに接続。
Group Input の入出力値は、上記と同じ手順で、Start とした。
Start から出力される値で、ボールの開始フレームを足す(前へ進める)ことができるようになった。
STEP 02
Tab キーで Balls グループを畳む。
Math − Add ノードを以下のように追加し、Repeat ノードの空ソケットに接続。
上記と同じ手順で、Repat ノードにできたソケットは、StartFrame とし、上のように接続した。
StartFrame はリピート毎に、0.26, 0.52, 0.78… のように増え、Balls グループの Start に渡されることで、各ボールの開始位置がすこしづつ先にずれる。
結果
全体の円の大きさが半分になり、アニメーションを開始すると、円全体がお手本の動画のように回転する。不思議。
完成
お手本に似せて別途溝をつくり、ボールは立体化した。
まとめ
工程をひとつひとつ説明するとすこし長くなりますが、ノードじたいは比較的単純で、ジオメトリノードに慣れてくると、さほど時間もかかりません。
とくに、アニメーションで、複数のオブジェクトの開始位置をなんらかの法則や関数によってずらす、という手法はかなり広く応用できるのではと思います。
参考になれば幸いです。