Blenderプロジェクト「Geometry Nodes Pipes」
第3回 Geometry Nodes Pipesのメカニズムの続き
こんにちは、映像ディレクター/VFXアーティストの涌井嶺です。
「Geometry Nodes Pipes」を2022年2月5日に公開してから、すでにたくさんダウンロードいただきました(ありがとうございます……!)
何名かから「もっとこうしたほうがいいよ!」というアドバイスもいただき、本当にありがとうございます。
改善点がまとまり次第修正し、アップデートしたいと思います。
Geometry Nodes Pipesのメカニズム
今回はGeometry Nodes Pipesのメカニズムについて説明したいと思います。
ジオメトリノードの概要については前回記事にて説明させていただきましたので、そちらをご参照ください。
今回もテクニカルな話にはなりますが、具体的なチュートリアルというよりは「こういうアルゴリズムになっているんだよー」という概要の話になります。
僕の作成したノードの全画像を貼りますので、それを完全にコピーすれば同じものが作れます。
プロジェクトファイルの中でも見られるので、詳しく内容を確認したい方はこちらから無料DLお願いします。
「Geometry Nodes Pipes」のダウンロードはこちら
※動作にはBlender 3.0以上が必要
解説動画
これがパイプの全ノードです。
一見すごく複雑そうですが、部分的に見て解説していきたいと思います。
パイプのメイン部分
ノードは左から右に繋がっていきますので、まずは一番左から説明し、大枠を説明した後間の細かい部分を説明していきます。
- ノード①Group Input
- 「Geometry」とは、ユーザーが作ったベジェカーブオブジェクトのこと
- ノード②Curve to Mesh
- ただのカーブオブジェクトが、実体を持ったパイプのポリゴンに変換
- ノード③Curve Circle
- 作成した円形がパイプの断面として扱われるようにする
- ノード④Set Material
- パイプのマテリアルを適用
- ノード⑤Curve Parameter
- ベジェカーブオブジェクトの開始から終了まで0から1で表現する関数
- ノード⑥Spline Length
- ベジェカーブの長さを取得する関数を掛け合わせて、ベジェカーブの開始から1mごとに区切りを付けています。
- ノード⑦Random Value
- ノード③Curve Circleの直径 = パイプの直径をランダムに変化させています。これにより、パイプの太さが1mごとに少し変化してディテールを加えています。
またテクスチャを1mごとに90度回転させ、繰り返し感が少なくなるようにしています。 これも先ほどと同様に1mごとに付けた区切りごとに、テクスチャのUVを90度ぶんずらす操作を行っています
- ノード⑧Combine XYZ
- ノード⑦Random ValueでずらされたUVはGeometry NodesのOutput Attributesとして取り出され、ノード④で適用するマテリアルのUVとして利用されます。
わかりやすいように、ここまで説明したノードだけで完成するジオメトリの画像を以下に貼ります。
わずかですが、途中途中で太さが変わってます。
仮に、テクスチャを1mごとに90度ずらさなかったとすると、以下のような感じになってしまいます。
同じパターンの繰り返しが目立ち、味気ない感じになってしまいます。
フランジ(パイプの継ぎ目)部分
フランジは別オブジェクトとして用意しており、それをインスタンスとしてベジェカーブのコントロールポイントに生成するようになっています。
普通にコントロールポイントにフランジを配置すると向きがカーブに沿ってくれないので、①Curve Tangentノードと②Align Euler to Vectorノードでカーブの向きを取得し、そこに合わせて回転させています。
またパイプの軸中心にフランジをランダムに回転させ、これもまた繰り返しが目立たないようにしています
これで基本となるパイプ+フランジの構造ができました!
次回から細かい部品やリベットなどの解説に移ります。
「Geometry Nodes Pipes」のダウンロードはこちら
※動作にはBlender 3.0以上が必要