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

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

こんにちは、映像ディレクター/VFXアーティストの涌井嶺です。

お仕事が忙しく、ブログの更新が滞ってしまいました・・・。
今回はリベットやバルブなどの生成アルゴリズムの紹介をしていきたいと思います!

その前に、Geometry Nodes Pipesについて、80LevelさんCG情報ブログの3D人さんに掲載いただきました!
ありがとうございます!

80Level
「Get Geometry Nodes Pipes in Blender for Free」

3D人
「Geometry Nodes Pipes v1.1 – Geometry Nodesを活用したパイプ半自動生成の為のBlenderプロジェクトファイルが無償配布中!」

「Geometry Nodes Pipes」のダウンロードはこちら

※動作にはBlender 3.0以上が必要

リベット(ボルトのような物)

リベットも別オブジェクトとして用意し、フランジの上にインスタンスとして生成しています。
リベットはフランジの生成ポイントから放射状に360度、等間隔に並びますが、それぞれのリベットの生成位置をベクトル幾何など使って計算するのは面倒でした。なのでフランジの生成位置に、フランジと同じ向きでn角形を仮想的に生成し、そのn角形の各頂点にリベットを生成する、というアルゴリズムで簡略化しています。 (うまくノードを使えばこういう簡略化ができるところがいいですね)

n角形の頂点数や半径は「circle curve」ノードで指定できます。半径はフランジの半径とパイプの半径から、フランジからはみ出さずパイプにも干渉しない位置にリベットが生成されるよう計算しています。頂点数はユーザーが指定できるように設定し、この値でリベットの数が決まります。

バルブや六角形のフランジなど、追加部品

さらにパイプに表情を持たせるため、ランダムにバルブや六角形のフランジが生成されるようにしました。入力のベジェカーブを仮想的に細分化し、それぞれのコントロールポイントの間に新しくコントロールポイントを作ってそこだけに追加部品を配置するという仕組みです。
(コントロールポイントのIDが奇数のところにだけ配置するようにしています)

ただ、コントロールポイントのところにはフランジが作られるようになっているので、コントロールポイントどうしが近すぎる場所に追加部品を生成するとフランジに埋まってしまう問題がありました。そこで、コントロールポイントのハンドルの長さを計算し、それが一定以下の場合には追加部品の生成をキャンセルするようなアルゴリズムになっています。
ここにはもっといい解決方法が絶対ある気がするのですが……どなたか思いついた方はご一報ください!笑

あと現状は、バルブも六角形のフランジも同じアルゴリズムで生成しています。六角形のフランジは、パイプの太さに合わせて太さが変わるように作らなければいけないのですが、バルブもその挙動に合わせて大きさが変わってしまうようになっています。パイプが太くなっても、バルブの大きさは一定でいてほしいので、最終的に追加部品ごとにアルゴリズムを変える必要があるなと思っています。

以上の全てのジオメトリを結合することで、パイプが完成します。 ここまでお付き合いいただきありがとうございました!

次回は修正ポイントがまとまったらアップデート内容などを紹介しようと思います!

「Geometry Nodes Pipes」のダウンロードはこちら

※動作にはBlender 3.0以上が必要

VFX映像制作のご依頼や
ご相談はこちら