見出し画像

文系の 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 オブジェクトを指定する。

オブジェクト情報  位置設定
As Instance(インスタンス化) にチェックを入れる。

インスタンスはオブジェクトなどの情報を収める仮の器のような存在。インスタンス化することで、多くの同形状のオブジェクトを配置する場合、処理の軽減になる。


STEP 01

動画をみると、ひとつひとつのボールは直線上を往復しているだけだが、端ですこし速度が落ちているので、それをサインカーブで再現する。

Mathematical Mysteries Sine Wave

上のグラフの縦軸の値を利用することにより、自然な往復運動を表現できる。

  • 下のノードを追加し、Set Position ノードの Offset に接続する。

  • Sine ノードの Value には、 #frame/15  と入力する。

#frame はタイムライン上のフレームナンバー。スペースキーでアニメーションを開始すると、フレームナンバーが値に適用される。上では、#frame を 15 で割ることで、円の移動の速度をやや遅くしている。

Math(数式)- サイン  XYZ合成

Sineノードの波形の出力値を、CombineXYZ ノードのX軸に渡し、Offset に接続。Circle オブジェクトの移動を X 軸のみに限定している。

スペースキーを押すと、ここでは、左右 1 m の範囲で、Circle オブジェクトがなめらかに往復運動する。

スペースキーは、タイムラインエディターの再生 ▷ を押す、のショートカット。



STEP 02

動画では、12 個のボールが異なる角度で往復しているので、ボールの往復路の Z 軸の角度を変更する。

  • Transform Geometry ノードを追加し、Rotation(回転) の Z の値を 90 度とした。

ジオメトリトランスフォーム Object Info は畳んだ。

スペースキーを押すと、今回は、縦に往復運動する。この回転値をこの後利用する。


STEP 03

移動角度を変えた 12 個のボールを設置する準備として、上のノードをグループ化する。

  • STEP 02 の 5 個のノードを B キーなどで選択し、⌘(Ctrl) + G キー でグループ化、下のノードを追加する。

  • To Radians の Degrees は、左の Group Input の空のソケットへ接続。

Math(数式)- ラジアンへ XYZ合成

グループ外から、Z軸の回転値を受け取れるようにしている。

ラジアンはジオメトリノードの標準の度の単位。1度は、π÷180 ラジアン

グループ全体

グループの作成は、ジオメトリノードエディターの、Node(ノード) > Make Group(グループ作成)でも。

グループの展開は、右上のアイコンを押し、グループの解除は、Node(ノード) > UnGroup(グループ解除)を選択する。

  • 必須ではないが、後々わかりやすくするため、N キーで左からプロパティ画面を表示させ、Value を Zrotation へ名前を変更する。

Groupタブ表示時。Group Input のソケット名も変更される。




ボールの配置


各ボールは、Zrotation の値で往復路の角度を変えることができるようになったので、Repeat ノードで、30度づつ角度を変えながら、12 個のボールを設置する。

STEP 01

  • Tab キーを押し、グループ画面から全体のノード画面へ戻る。

  • グループ名は、ここでは Balls とした。


  • Repeat Zone を追加し、下のノードを組む。

リピート  ジオメトリ統合

Repeat Zone の詳細については、Repeat 繰り返し を参照してください。

上では、 Ball グループが、繰り返しごとに Join Geometry ノードで統合され、Iterations(反復)の数だけ増える。 


STEP 02

このままでは同じ位置に Ball グループが配置されるだけなので、グループによって回転を変えるため、グループの Zrotation に渡すための値を用意する。

  • Repeat ノードを選択し、N キーでプロパティ画面を表示

  • Node タブを選択。+ボタンでアイテムを追加、名前を Rotate とした。

  • Socket Type は Float を選択。

Math(数式) - Add(加算)ノードを追加し、下のように接続する。

Iteration は 12 Add ノードの加算値は 30

Rotate の値は、Iteration(反復)による繰り返しごとに、値が 30 増え、0, 30, 60, 90… のようになり、その値を、上で設定した Zrotation に渡している。

結果

スペースキーでアニメーションを開始する。反復する花火のように単純に全体が伸び縮みするだけで、もちろんお手本の動画のようではない。

ボールの初期位置が、すべて同じだからだ。


修正


ボールの開始位置、すなわち、各ボールのフレーム初期位置をボールによって変化させる。

STEP 01

  • Balls グループの右上のアイコンをクリックし、グループを展開する。

  • Sine ノードの左に、Math - Add ノードを加え、下のように設定。

  • 上記と同じ手順で、Add ノードの Value を、Group Node の空ソケットに接続。

Math(数式) - Add(加算) 紫のフィールドは、同じく #fame/15  と入力
  • Group Input の入出力値は、上記と同じ手順で、Start とした。

Start から出力される値で、ボールの開始フレームを足す(前へ進める)ことができるようになった。

STEP 02

  • Tab キーで Balls グループを畳む。

  • Math − Add ノードを以下のように追加し、Repeat ノードの空ソケットに接続。

Rotate の加算値は 15度に変更。開始位置の加算値は、ここでは 0.26 とした。
  • 上記と同じ手順で、Repat ノードにできたソケットは、StartFrame とし、上のように接続した。

StartFrame はリピート毎に、0.26, 0.52, 0.78… のように増え、Balls グループの Start に渡されることで、各ボールの開始位置がすこしづつ先にずれる。

なぜ 0.26 かということはわからない。素養のあるかたは計算で導くことができるのだろうが、文系なので、値を変えながら見出した。

結果

全体の円の大きさが半分になり、アニメーションを開始すると、円全体がお手本の動画のように回転する。不思議。

わかりやすいように背景をつけた。


Balls グループ全体
メインノード全体


完成


 お手本に似せて別途溝をつくり、ボールは立体化した。


まとめ


工程をひとつひとつ説明するとすこし長くなりますが、ノードじたいは比較的単純で、ジオメトリノードに慣れてくると、さほど時間もかかりません。

とくに、アニメーションで、複数のオブジェクトの開始位置をなんらかの法則や関数によってずらす、という手法はかなり広く応用できるのではと思います。

参考になれば幸いです。

再現にはほぼ100%成功したのですが、いまだに、なぜあの動きになるのか、なんどみても、ノードで組んでも、さっぱりわかりません。


いいなと思ったら応援しよう!