Geometry Nodesって何?

スポンサーリンク

最近、BlenderのGeometry Nodesがすごく気になっていて、ついに本腰を入れて触ってみました😊

Geometry Nodesとは、Blender 2.92から搭載されたノードベースのプロシージャルモデリング機能です。簡単に言うと、「ノードと呼ばれるブロックをつないで、3Dモデルを自動的に生成・変形する仕組み」です。プログラムを書かなくてもロジカルにモデルを作れるので、組み込み系エンジニアとしてはなんとなく回路図を書いている感覚に近くて親しみやすかったです。

従来のモデリングは頂点や辺を手作業でいじる必要がありましたが、Geometry Nodesを使えばパラメータを変えるだけで形状がダイナミックに変化します。これが本当に面白い!

基本的なノード構成を理解する

まずはGeometry Nodesの画面構成から確認します。オブジェクトを選択した状態で、上部のワークスペースタブから「Geometry Nodes」を開くか、エディタタイプを「Geometry Node Editor」に変更します。

最初に押さえておきたい基本ノードはこのあたりです。

ノード名 役割
Group Input / Output ノードグループの入出力。必ず存在する
Mesh Primitive(例:UV Sphere) 基本形状の生成
Transform Geometry 移動・回転・スケールの変換
Join Geometry 複数のジオメトリを結合する
Instance on Points 点の上にオブジェクトを複製配置する

この中でInstance on Pointsが特に強力で、後述する自動配置に大活躍します。

木を自動生成してみた

最初の実験として、シンプルな「木」のような形状を自動生成してみました。幹になる円柱の上に、葉っぱ代わりの球体を複数配置するイメージです。

Points on Facesでランダム配置

まず円柱を用意して、Distribute Points on Facesノードを使って表面にランダムな点を生成します。次にその点の上にInstance on PointsでUV Sphereを配置しました。

【ノードの接続順序】
Cylinder
  └─ Distribute Points on Faces
       └─ Instance on Points ← UV Sphere を Instance として接続
            └─ Join Geometry(Cylinder と合流)
                 └─ Group Output

これだけで木のシルエットが完成します。DistributeノードのDensityパラメータを上げると葉っぱが増え、下げると減ります。スライダーひとつで見た目がガラッと変わるのが気持ちいい😊

Random Valueでサイズをバラけさせる

全部の球が同じサイズだと不自然なので、Random Valueノードを使ってスケールにランダム性を持たせます。

Random Value(Min: 0.3, Max: 1.0)
  └─ Instance on Points の Scale 入力へ接続

これで葉のサイズがバラバラになり、一気に自然な雰囲気になりました。たった数ノード追加するだけでクオリティが上がるのがGeometry Nodesの魅力です。

数学ノードで波打つ地形を作る

次はもう少し発展的な例として、波打つ地形を生成してみました。

Grid(平面メッシュ)を生成してから、PositionノードでXY座標を取得し、MathノードのSine(サイン関数)を使ってZ方向に変位させます。

Grid(Vertices X/Y: 50×50)
  └─ Set Position
       └─ Offset入力:
            Position
              └─ Separate XYZ(X成分を取り出す)
                   └─ Math(Sine)
                        └─ Combine XYZ(Z成分として渡す)

Sineの周期(倍率)を変えると波の細かさが変わり、振幅を変えると山の高さが変わります。パラメータをアニメーションに繋げばさざ波が動く海の表現もできます。これは組み込みで言うとPWM制御みたいな感覚で、数値をいじると動作が変わる楽しさがありますね。

Attribute Statisticsでデバッグする

Geometry Nodesを組んでいると、「なぜかうまく動かない」という場面が出てきます。そんなときに便利なのがAttribute StatisticsノードやViewerノードです。

デバッグ方法 使いどころ
Viewerノードをつなぐ 途中のジオメトリの状態をビューポートで確認できる
Attribute Statistics 数値の最大・最小・平均値を確認できる
Spreadsheetエディタ 各頂点・面の属性値を一覧で見られる

特にViewerノードはとても便利で、ノードチェーンの途中に挿しておくだけでその時点のジオメトリを確認できます。どこで意図しない変形が起きているか一目でわかるので、デバッグが格段に楽になりました。

まとめ:プロシージャルモデリングは楽しい

今回はGeometry Nodesの基本的な使い方から、木の自動生成・波状地形の作成までを試してみました。感想としては、「ロジックを組む楽しさとモデリングの楽しさが同時に味わえる」という感じで、エンジニア気質の人にはかなりハマれる機能だと思います。

特に以下の点が気に入りました。

  • パラメータを変えるだけで形が変わるので試行錯誤が速い
  • ノードが視覚的なのでロジックを把握しやすい
  • 一度作ったノードグループを別のプロジェクトで再利用できる
  • アニメーションと組み合わせると表現の幅が一気に広がる

次はCurve系のノードを使って蔦のような有機的な形状を自動生成してみたいと思っています。Blenderはまだまだ奥が深いので、引き続き探求していきます😊

同じくGeometry Nodesに挑戦している方がいれば、ぜひコメントで情報交換しましょう!

それでは、今回はここまで。ありがとうございました😊