今回、Blender3.1 Geometry Nodes を使用して、画像のようなオブジェクトを作成していきます。Blender のバージョンが違うと仕様が違ってくるかもしれませんのでご注意ください。こちらのチュートリアルは動画化しております、動画の方がよい方は以下のリンクからどうぞ!
球体に直線を配置
- 初期配置されている立方体に対して Geometry Nodes を開きます。
- Geometry Input を消去し、Ico Sphere を用意します。Subdivisions を 4 にします。
- Distribute Points on Faces で Ico Sphere 上に Point を生成します。
- Instance on Points で生成した Point に Instance を配置していきます。
- Curve Line と Combine XYZ で Z 方向に 3 の長さの直線を作成します。
- Resample Curve で生成した直線を分割します。今回は 40 分割にしました。
- 生成した直線を Instance on Points に接続し、Distribute Points on Faces の Rotation を Instance on Points の Rotation に接続します。
- 上画像の様になっていれば OK です。
生成した直線を Noise で変形
- Realize Instances で Instance を実体化します
- Capture Attribute に Spline Parameter を接続し、40 分割した各頂点を始点を 0、終点を 1 とした時の値を取得します。
- Capture Attribute をもう 1 つ用意し、Vector 型とし Position を取得します。
- Noise Texture を使用します。4Dnois にします。
- Scene Time を用いて、Frame Count を取得します。Math で10で割り、Noise Texture の W に接続します。
- Frame Count を Map Range で 2 ~ 4 に変換し、Noise Texture の Scale に接続します。
- Vector Math で Noise Texture の Color 端子から取得できる値から各成分 0.5 を引きます。
- Frame Count を Map Range で 3 ~ 14 に変換し、Vector Math で先ほど 0.5 を引いた値に掛けます。
- Vector Math で元の Position に生成した値を足し、Set Position の Offset 端子に接続します。上画像の様に、直線が変形したかと思います。
- Capture Attribute で Position を取得しておきます。こちらは後々使用しますが、今は特に関係ありません。
- Set Curve Radius を用意します。
- 前項で取得した Spline Parameter の値(0 ~ 1)を 0 ~ π に変換し、Math の Sine を接続し、0⇒1⇒0 の値に変換します。
- Math の Multiply で Sine で取得した値に 0.05 を掛けて、Set Curve Radius の Radius に接続します。
- Curve to Mesh で変形した曲線に厚みを持たせていきます。Profile Curve に Curve Circle を接続します。
- 上画像の様に、始点と終点の半径が小さく、中間部で太いようなジオメトリが生成されました。
中心部の球体の生成
- Set Shade Smooth で最初に生成した Ico Sphere を滑らかにします。
- Scale Elements で拡大していきます。Scene Time で Frame Count を取得し、Map Range で 1 ~ 4.5 に変換します。この値で Scale していくことで、Frame Count が大きくなるにつれて球体が大きくなります。
- Join Geometry でアウトプットしておきます。
球体を変形
- Capture Attribute で Position を取得します。取得する型を Vector 型にするのを忘れないようにしてください。
- 前回と同様、Noise Texture を使用し、4 DNoise で球体を変形させます。
- Frame Count を取得し、Map Range で 0 ~ 5 に直したものを W に、0 ~ 2 に直したものを Scale に接続します。
- Vector Math の Add で各成分に-0.5 を足します。
- Vector Math の Multiply で変形の強さを調節します。今回は 1.5 を掛けています。この値を大きくすると変形が大きくなります。
- Vector Math の Add で元の Position に生成した値を足します。
- Set Position の Position に接続します。
- Frame Count が大きくなるにつれて、球体が大きくなりながら、Noise で変形していきます。
マテリアルの設定
- 太さを持たせた曲線部分と変形させた球体、それぞれにマテリアルを割り当てます。Plasma と Core という名前でマテリアルを割り当てています。
Attribute をアウトプット
- マテリアルの設定で使用したい Attribute をアウトプットしておきます。
- まずは、曲線に太さを持たせるまえの Capture Attribute から Position を取得し、Vector Math の Distance で中心からの距離を取得します。PlasmaDist という名前でアウトプットしておきます。
- AttributeDomain は Face にします。
- 次に、球体をスケールさせる際に使用した Capture Attribute の Position と中心の距離を取得します。CoreDist という名前でアウトプットし、AttributeDomain は Face とします。
マテリアルの設定 Plasma 部分
- Attribute を用意し、Name に PlasmaDist を入力します。
- Map Range で Attribute の値を 0 ~ 1 に変換します。
- Color Ramp で好きな色に設定しまます。今回は中心部付近が白、外側に行くにつれて青くしていきます。
- Principled BSDF の Subsurface Color と Emission に接続します。Emission Strength は 2 にしています。
- Render Property の Bloom にチェックを入れておきます。
マテリアルの設定 Core 部分
- Core 部分のマテリアルも設定していきます。先ほどと同様の方法で設定していきます。Attribute の値は CoreDist をで設定していきます。
完成
TimeLine を動かすと最初の Gif 画像の様に変形していくと思います。パラメーターを変化させて自分の気に入った具合にしてみてください。