最近Blenderの学習もしているので、アウトプットしていこうと思います。まだ学習して浅いので、もっといい方法あるよ、とかありましたら是非コメント・SNSでDMなどいただけると嬉しいです!今回は、BlenderのGeometry nodesを使用して、以下のGif画像の様な虹色の泡を作成していこうと思います。使用するのバージョンはBlender3.1となっております。違うバージョンだと、仕様が変わってくるかもしれないのでご注意ください。こちらのチュートリアルは動画化しております、動画の方がよい方は以下のリンクからどうぞ!

ベースとなる平面作成

- Planeを配置し、適当な大きさに拡大します。
- 作成したPlaneを選択した状態でGeometry Nodeを開きます。
球の作成

- Distribute Points on Facesで作成したPlane上にPointを作成します。Densityを変えるとPointの密度が変化します。今回は10としています。
- UV Sphereを作成します。RadiusはGeometry Inputで制御できるようにします。今回は0.05を入力しています。
- Set Shade Smoothで作成したUV Sphereを滑らかにします。
- Instance on Pointsで生成したPointに滑らかにした球を配置していきます。
作成した球のZ座標を操作:sine波の作成

- 作成した球のZ座標を操作することによって、球体を上下に移動させます。まず初めに上下に行ったり来たりさせるためにSine波を生成します。
- Geometry InputにJumping SpeedというInputを作成し、MathノードでFrame Countに掛けます。この値を操作することで、上下移動の速度をコントロールできます。
- MathノードのTo Radiusでラジアン変換します。
- MathノードのAddで0~2πまでのランダムな値を足します。こうすることで、Sine波の位相をずらし上下移動のタイミングをずらします。
- MathノードでSine波を生成します。-1~1までの値が生成されます。
- MathノードでAbsoluteして絶対値を取ります。これで0~1までの値となります。
作成した球のZ座標を操作:Z座標を編集

- Z座標を一定の高さではなく、各球体によって高さが変わるようにしていきます。
- MathノードでMultiplyでRandom Valueを掛け算します。Geometry Inputでmin heightとMax heightを操作できるようにします。今回は0~3範囲でランダムな値を生成しています。
- Positionを取得し、Separate XYZでZ成分を取り出します。
- Combine XYZでX,Y成分はそのまま、Z成分を先ほど作成したランダムな値を入力します。
- Set Positionで球体を作成した座標に移動させます。
- スペースを押してアニメーションを再生すると、球体がランダムな高さに上下移動したかと思います。
球体をスケーリング

- 球体の大きさを変化させていきます。上に上がるにつれて拡大していき、下がっていくにつれて縮小していくようにしていきます。
- MathノードでAbsoluteの0~1の値に最大倍率を掛けます。今回は5倍を掛けています。
- Scale Instanceで拡大していきます。
- アニメーションを動かすと上に行くにつれて大きくなり、下がっていくにつれて小さくなっていくと思います。
色付け

- マテリアルを作成しSet Materialで作成したマテリアルを割り当てます。
- Shader Editorで作成したマテリアルを編集します。
- GeometryでPositionを取得し、Separate XYZでZ座標を取得します。
- Map Rangeで取得したZ座標を0~1の値に変換します。この時、From Maxの値を制御できるようにします。この値を制御して、各色の高さを操作します。
- Roughnessを0にして光沢を出します。
- 後は適当にLightを配置し、黒いPlaneを後ろにおいて背景とすれば完成です。
完成


以上になります。私もまだ学習し始めなので、よくわかんない部分もありますが、しっかりインプットしできるだけこの場でアウトプットしていけたらと思っております。