BlenderのGeometry Nodeで懸垂線(カテナリー)を作る方法

Blender記事

皆さんオハスコリカ🎄黒城ナディアです。

前回の投稿から大変時間が空いてしまい、大変申し訳ございませんでした。

本記事はBlender Advent Calendar 2023 3日目の記事です。

今回はBlenderのGeometry Nodeで懸垂線を作ります。

対象Blenderバージョン:3.3以上

懸垂線(カテナリー)とは?

懸垂線(カテナリー)はざっくり説明すると紐の両端を持ち宙に垂らした時にできるカーブのことです。ロープや電線はこの形状をしています。

Blenderには懸垂線を作るアドオン(Add Curve: Extra Objects)がありますが、Extra Curvesのメニューから懸垂線を作るのは何かと面倒です…(作ったカーブを修正しづらいとか)

そこで今回はBlenderのGeometry Node機能を使って、メッシュの辺を結ぶ懸垂線を生成するGeometry Nodeを作りました!下のリンクからBlenderファイルをダウンロードできます。

今回のGeometry Nodeを使ってできる懸垂線の作例です。メッシュの各辺を結ぶ垂れ下がるカーブを作ることができます。厳密には懸垂線ではないですが、ロープ等の形状としては十分な見た目を表現できます。

Geometry Node全体像

Geometry Node

はい!こちらが今回のGeometry Nodeの全体像です。

ノードのうち下部が懸垂線を生成する部分になります。

ここで「Create Catenary」フレームでは[Mesh to Curve]ノードによりメッシュを構成するエッジ(辺)をカーブオブジェクトに変換し、[Set Spline Type]ノードによりそのカーブの形状をベジェ曲線に変更します。次の「Adjust Catenary」フレームでは[Set Handle Type]ノードでカーブのハンドルタイプを[Vector]に変更し[Set Handle Position]ノードで位置を下げることで垂れた形状を表現します。

上部の「Instance」フレームでは[Instans on Points]ノードによりメッシュの頂点にオブジェクトを配置することができます。例えばアンカーなどをセットすることで中継地点を作ることができます。

ロープのアンカーを設定するとそれっぽい

さらにノードの入力にスロットを追加して、入力の値をカーブハンドルの量に反映する処理を追加します。

GeometryNodeモディファイアのAttributes欄に新たにベクトルの設定欄ができます。続いてスロット右側の十字アイコン[Input Attribute Toggle]を押します。

するとスロットの状態が変化して頂点グループを指定することができるようになります。オブジェクトプロパティの[Data]タブにて頂点グループを追加後こちらのスロットに設定することで、頂点ごとに割り当てたウェイトにより懸垂線の深さを調整できます。

以上、Geometry Nodeを使った懸垂線の作り方でした。

今回のノードをベースにしてさらにノードを追加することで、カーブにひねりを加える、ロープ形状を別のカーブで指定するなど、さらに表現を工夫できるので試してみてください。

参考

前回の投稿内容

以前投稿を予定していた内容はもう少し複雑なノードの組み方だったんですが、[Mesh to Curve]ノードを使えば難しいノードを組まずともやりたいことができることに気づいてしまいました…

一応①の方法は懸垂線の深さを変えても形がいびつにならない利点はありますので、別のアプローチということで取っておきます。

●方法①

●方法②(Blender 4.0以上)

画像が見づらく大変恐縮ですが、「Create Catenary」の部分を[Mesh to Points]→[Points to Curves]→[Set Spline Type]:Bezier のノードに置き換えています。

コメント

タイトルとURLをコピーしました