Blenderプロジェクト「Geometry Nodes Pipes」
第3回 Geometry Nodes Pipesのメカニズムの続き

こんにちは、映像ディレクター/VFXアーティストの涌井嶺です。
今日は先日制作した配管のモデル「Geometry Nodes Pipes」について、制作のきっかけと完成品の紹介を行いたいと思います。
皆さんが3Dモデリングを楽しむ中で、細かい物をたくさん配置して作品に説得力や情報量を増す作業というのがあるかと思います。サイバーパンク、スチームパンクなどのシーンのディティールを詰めていくときに、あるとクオリティが上がって見えやすく、使いやすいアイテムがあります。それが「配管」です。
絵の大きさで見ると細かく、主役として目に入ってくるような見た人の記憶に残るアイテムではありませんが、配管が多いとシーンの情報量が増えて、作品の世界に程よい現実感を与えられ、説得力が増します。
しかし、これをひとつひとつ手作業で作っていくのは結構大変です。
室外機や自販機、電柱などのように、複製してたくさん置いていけばいいアセットとは違い、壁や天井、接続されている電子機器などの形に合わせて作っていく必要があるためです。
そこで配管作りの作業の煩雑さを解消すべく、Blender 3.0を用いて「Geometry Nodes Pipes」というプロジェクトを作成しました。
「Geometry Nodes Pipes」のダウンロードはこちら
※動作にはBlender 3.0以上が必要
つたない英語ではありますが、解説動画を撮ってみました。字幕は日本語でも作成しました。
簡単に言うと、「ベジェカーブオブジェクトに沿って自動でパイプを生成してくれ、バルブやフランジ(コネクター部分)もいい感じに足してくれる」プロジェクトです。自動生成した配管の太さやバリエーションなども調整できます。
※ベジェカーブオブジェクト……ポリゴンでできている通常の3Dモデルと違い、点をつないで曲線が描けるように出来たオブジェクト
今までの配管づくり
これまでBlenderで配管を作る方法といえば、ベジェカーブオブジェクトを作って、それに太さを加えて、さらにディテールを追加していく……という流れが主流だったと勝手に思っています。
参考「Making Pipes in Blender – Lazy Tutorials」
しかしこの方法は、途中でカーブオブジェクトをメッシュに変換するので「破壊的な」モデリング方法でした。一度変換してしまうと後から曲がり具合などを調整できないのです。
自分なりの改善
「これがもっと非破壊でできないかな?」というのをずっと考えていました。
Cinema 4DやHoudiniのように「プロシージャルモデリング(数式とかノードでモデリングする方法)」が得意なソフトウェアでは、このようなパイプをはじめ様々なモデリングを非破壊で行う例がありました。
Blenderはそういったプロシージャルなモデリングに弱かったのですが、2021年2月に公開された「Blender 2.92」で追加された「ジオメトリノード」によりある程度のことができるようになりました。
先日公開されていた、他ソフトHoudiniを使ったプロジェクトの例「Project Titan | Tools」
最終的にこういうのが作りたいと思いました。
ジオメトリーノードについて僕なりに簡単に説明します。
Blenderでモデリングする際に、立方体を複製するとしたらポリゴンをコピーして横に動かすと思います。
プロシージャル非破壊なモデリングでは、「この立方体の位置座標に+2したものを、元の立方体の横に足す!」といった指示を数式で作ることでコピーを行います。

数式でコピーしているので、元の立方体の形を変えればコピー先で反映されます。それにより、例え100個コピーしたとしても全部の形を手作業で直さなくてもいいわけです。このような数式による操作を、ノードを用いてもっと複雑に組み合わせることでモデリングを行えるのがジオメトリノードです。
今までの配管のモデリング方法だと、ベジェカーブ(後からいくらでも形をいじれる非破壊なオブジェクト)→メッシュ(破壊的なオブジェクト)に変換しなければならず、ここでどうしても後戻りできなくなってしまいました。
しかし、 ジオメトリノードなら「ベジェカーブの周りに沿って半径いくつの円柱を作って!この条件でランダムにバルブを配置して!」といったことを数式で指定して作成することができます
「ジオメトリノードがあれば、ノードベースで非破壊モデリングができる!」……と思いましたが、2.9系までは機能的に足りなくてできることが少ない印象でした。
しかし、3.0系で大幅なアップデートが入り、Geometry Nodes Fieldsというシステムが導入されました。
カーブ関連のノードがたくさん追加され、「これでついにやりたいことができるかも」と思い開発をスタートしました。
Blender 2.9系からいろんなノードや根本的な考え方が大幅に変わっているので、調べても参考になるドキュメントが少なく大変でした。(2.8で大きく変わったBlenderに初めて触れた時のことを思い出しました……)
簡単なアルゴリズム紹介
- ベジェカーブに太さを与えてパイプのメイン部分を作る
- コントロールポイントの位置に軸の向きを合わせてコネクタの部品を配置
- その位置から適切な距離・配置でリベットをぐるっと配置
マテリアルについては、パイプの長さからUVを計算し、ランダムに見えるよう1mごとにテクスチャをずらしています。また太さも1mごとに少しずつランダムな変化をつけています。
バルブと六角形のボルトのような部品は、コントロールポイントの間隔が一定以上広い場所にランダム生成するようにしました。

今後修正したい点
- 同じベジェカーブオブジェクトの中でスプラインが複数あると、表示がおかしくなる
- 太さをランダムで途中で変えているが、カクッと変化するようにするために現状ポリゴンを多めに分割する必要があり、無駄にハイポリになってしまっている
- サイドに自動でもっと細い配管が追従して生成されたり、分岐したりするようにしたい

プロジェクトファイルを無料で公開します
試行錯誤しながらも、3日くらいですべてのノードを組めました。
プロジェクトファイルからノードも見れるので、もっとこうしたほうが簡単にできるよとかあったら教えてください!
マテリアルを変えたい場合は適宜テクスチャをお好みのものに変更してください。
「Geometry Nodes Pipes」のダウンロードはこちら
※動作にはBlender 3.0以上が必要
解説動画
しばらくは無料で公開します。まだ直したいところや機能のアップデートしたいところがたくさんあるので、最終的にはアドオンにして販売とかできたらいいなと思っています。
今回は以上です。ここまでお読みいただきありがとうございました!
次回はこのGeometry Nodes Pipesについて、さらに細かいノードの解説についてお話しできればと思います。