ジオメトリノード(ver4.1)

まだ途中。

ノードの追加は追加ボタンかソケットのドラッグ。
パスの切断はCtrl+右ドラッグ


modeling->geometry nodes




ジオメトリノードは、Blender 2.92以降に導入された、手続き的にジオメトリを生成および変更するための新しいノードベースのシステムです。
モディファイアであって、元のモデルを変更しません。

各種定義

Claude3による。ジオメトリノードに関して、ChatGPT4は論外。Claude3はぎりぎりアホです。

ジオメトリ

Blenderにおけるジオメトリの定義は以下の通りです。

メッシュ (Mesh):
頂点、辺、面で構成される3Dオブジェクトの基本的な形状を表現します。ポリゴンメッシュとも呼ばれ、モデリングの主要な要素です。
カーブ (Curve):
制御点とハンドルを使って定義される滑らかな線や曲面を表現します。パスやシェイプの作成に使用されます。
サーフェス (Surface):
NURBSサーフェスを使って滑らかな曲面を定義します。精密なモデリングや、カーブからの3Dオブジェクト作成に用いられます。
メタボール (Metaball):
有機的な形状を作成するために使用される、影響範囲を持つ点の集合体です。複数のメタボールを組み合わせることで、滑らかに融合した形状を作ることができます。
テキスト (Text):
3D空間にテキストオブジェクトを作成します。フォントや様々なプロパティを設定でき、メッシュに変換することも可能です。
グレースペンシル (Grease Pencil):
2Dの手書きアニメーションや、3Dシーンでのスケッチに使用されるツールです。ストロークを3Dオブジェクトとして扱うことができます。

これらのジオメトリは、モディファイアやマテリアルを適用することで、さらに詳細な形状やアピアランスを表現できます。また、これらを組み合わせることで、複雑で多様な3Dモデルを作成することが可能です。

メッシュ

メッシュ (Mesh) は、3Dモデルを構成する基本的な要素であり、以下の3つの主要な構成要素から成り立っています。

頂点 (Vertex):
3D空間内の点を表します。複数の頂点を組み合わせることで、メッシュの形状を定義します。
辺 (Edge):
2つの頂点を結ぶ線分です。辺は、面を形成するために使用されます。
面 (Face):
3つ以上の頂点と辺で囲まれた平面または曲面の一部を表します。面は、メッシュの表面を構成する基本的な単位です。

これらの要素を組み合わせることで、ポリゴンメッシュと呼ばれる3Dオブジェクトの形状を表現します。メッシュは、三角形、四角形、またはその他の多角形で構成されることが一般的です。

メッシュは、以下のような特性を持っています。

トポロジー (Topology):
頂点、辺、面の接続関係を表します。トポロジーは、メッシュの形状を定義する上で重要な役割を果たします。
法線 (Normal):
面や頂点の向きを表すベクトルです。法線は、ライティングや陰影計算に使用されます。
UVマップ (UV Map):
メッシュの表面にテクスチャをマッピングするための2D座標系です。UVマップを使用することで、テクスチャを3Dモデルに適用できます。

メッシュは、Blenderにおける3Dモデリングの主要な要素であり、モディファイアやマテリアルを適用することで、より詳細で複雑な形状を表現することができます。

インスタンス

あるオブジェクトを基準として生成されるコピー。

Blenderのジオメトリノードにおけるインスタンス(Instance)は、オブジェクトを複製する際に使用される特殊なタイプのオブジェクトです。インスタンスを使用することで、同じオブジェクトを複数回参照し、メモリを節約しながら効率的にシーンを構築することができます。

インスタンスには以下のような特徴があります:

  1. リンク:インスタンスは、元のオブジェクト(インスタンス化されたオブジェクト)へのリンクを持ちます。つまり、インスタンスは元のオブジェクトを参照し、そのデータを共有します。

  2. メモリ効率:インスタンスは、元のオブジェクトのデータを複製するのではなく、参照するだけなので、メモリを節約できます。多数のオブジェクトを複製する場合に特に効果的です。

  3. 同期された変更:インスタンス化された元のオブジェクトに変更を加えると、その変更はすべてのインスタンスに反映されます。これにより、一括して変更を適用することができます。

  4. 個別の変換:インスタンスは、位置、回転、スケールなどの変換を個別に持つことができます。これにより、同じオブジェクトを使用しながらも、それぞれのインスタンスを独自に配置したり、変形したりすることができます。

  5. ジオメトリノードでの使用:ジオメトリノードでは、「Instance on Points」ノードや「Instantiate Geometry」ノードを使用して、ポイントの位置にオブジェクトをインスタンス化することができます。

インスタンスは、大量のオブジェクトを効率的に扱う必要がある場合に非常に便利です。例えば、森のシーンで木を大量に配置する場合、木のオブジェクトをインスタンス化することで、メモリ使用量を大幅に削減できます。

また、インスタンスを使用することで、複雑なシーンの構築や、手続き的なモデリングが容易になります。インスタンスは、パラメトリックなモデリングやプロシージャルな生成においても重要な役割を果たします。

ただし、インスタンスを編集する場合は注意が必要です。インスタンスに加えた変更は、他のすべてのインスタンスにも影響を与えることを理解しておく必要があります。

属性

ジオメトリノードの文脈における属性 (Attribute) は、ジオメトリの各要素(頂点、辺、面、またはスパン)に関連付けられたデータを表します。属性は、ジオメトリの特性や追加情報を保持するために使用されます。

属性には以下のような種類があります:

  1. 位置 (Position): 頂点の3D座標を表します。

  2. 法線 (Normal): 頂点や面の向きを表すベクトルです。

  3. カラー (Color): 頂点や面に割り当てられた色情報を表します。

  4. UV (UV): 頂点のテクスチャ座標を表します。

  5. 重み (Weight): 頂点グループや辺の重みを表します。

  6. 速度 (Velocity): 頂点の移動速度を表します。

  7. 半径 (Radius): 頂点やスパンの半径を表します。

  8. インデックス (Index): 頂点、辺、面、またはスパンのインデックスを表します。

  9. カスタム属性 (Custom Attribute): ユーザーが定義した任意のデータを保持できます。

属性は、ジオメトリノード内で作成、修正、削除することができます。属性の値は、ノードを介して読み取ったり、書き込んだりすることが可能です。

属性統計ノードは、これらの属性値を入力として受け取り、指定された統計情報を計算します。計算結果は、他のノードで利用したり、属性値として書き込んだりすることができます。

属性は、ジオメトリノードにおけるデータの流れと操作の中心的な役割を果たします。属性を効果的に利用することで、ジオメトリの特性を制御し、複雑なモデリングや効果を実現することができます。

ドメイン

ジオメトリの構成要素を指し示すために使用される概念。
つまり、ジオメトリからこの要素を選択するということを、このドメインを選択するという風に使う。

各ジオメトリの種類に対応するドメインは以下の通りです:

  1. メッシュ(Mesh):

    • ポイントドメイン(Point Domain)

    • エッジドメイン(Edge Domain)

    • フェースドメイン(Face Domain)

    • コーナードメイン(Corner Domain)

  2. カーブ(Curve):

    • ポイントドメイン(Point Domain)

    • エッジドメイン(Edge Domain)

    • カーブドメイン(Curve Domain)

  3. サーフェス(Surface):

    • ポイントドメイン(Point Domain)

    • サーフェスドメイン(Surface Domain)

  4. メタボール(Metaball):

    • ポイントドメイン(Point Domain)

    • メタボールドメイン(Metaball Domain)

  5. テキスト(Text):

    • ポイントドメイン(Point Domain)

    • エッジドメイン(Edge Domain)

    • フェースドメイン(Face Domain)

  6. インスタンス(Instances):

    • インスタンスドメイン(Instance Domain)

これらのドメインは、それぞれのジオメトリ内で操作の対象となる要素を表します。ジオメトリノードでは、これらのドメインを指定することで、特定の要素に対して属性の設定や変換などの操作を行うことができます。

ただし、すべてのジオメトリがすべてのドメインを持つわけではありません。例えば、カーブジオメトリにはフェースドメインがなく、メタボールジオメトリにはエッジドメインがありません。また、インスタンスは他のジオメトリのコピーを配置するためのジオメトリであり、独自のドメイン(インスタンスドメイン)を持ちます。

モディファイア

Blenderのモディファイアは、オブジェクトの形状、構造、またはレンダリングに対して非破壊的な変更を加えるための強力な機能です。モディファイアを使用することで、元のオブジェクトのジオメトリに手を加えることなく、様々な効果や変形を適用することができます。

モディファイアには以下のような特徴があります:

  1. 非破壊性:モディファイアを適用しても、元のオブジェクトのジオメトリは変更されません。モディファイアのパラメータを調整したり、モディファイアを削除したりすることで、いつでも元の状態に戻すことができます。

  2. スタック構造:複数のモディファイアを重ねて適用することができます。モディファイアは、スタック内の上から下へ順番に処理されます。これにより、複雑な効果を組み合わせることが可能になります。

  3. パラメータ調整:各モディファイアには、効果を制御するためのパラメータが用意されています。これらのパラメータを調整することで、desired の結果を得ることができます。

  4. プレビュー機能:モディファイアの効果をリアルタイムでプレビューすることができます。これにより、パラメータを調整しながら、その結果をすぐに確認することができます。

  5. 適用と適用解除:必要に応じて、モディファイアを確定して実際のジオメトリに変更を反映させることができます。また、適用したモディファイアを元に戻すこともできます。

Blenderには、多種多様なモディファイアが用意されています。例えば:

  • Subdivision Surface:オブジェクトの表面を滑らかにするためのモディファイア

  • Mirror:オブジェクトを対称的に複製するためのモディファイア

  • Boolean:複数のオブジェクトの組み合わせや差し引きを行うためのモディファイア

  • Array:オブジェクトを一定間隔で複製するためのモディファイア

  • Displace:テクスチャに基づいてオブジェクトの表面を変形させるためのモディファイア


グループ入力とグループ出力


新規作成時のこいつらは最上位グループであり、その入力はモディファイア対象のオブジェクト。デフォルトなら初期配置キューブである。

グループはノードをまとめることができる機能であり、入出力も管理できる。一度下位グループの編集に入ったら、抜けるのは右上あたり。

グループ入力 (Group Input) とグループ出力 (Group Output) は、ジオメトリノードエディタにおいて、ノードツリーの入力と出力を定義するために使用される特殊なノードです。これらのノードを使用することで、複雑なノードセットアップを再利用可能なユニットとして扱うことができます。

グループ入力 (Group Input)

  • グループ入力ノードは、ジオメトリノードツリーへの入力を定義します。

  • ジオメトリ、属性、値などをグループ入力ノードに接続することで、外部からノードツリーにデータを渡すことができます。

  • 複数の入力を設定できます。例えば、メインのジオメトリ入力の他に、追加の属性や値を入力することができます。

  • グループ入力ノードは、ノードツリーの最初に配置され、他のノードへのデータの流れの起点となります。

グループ出力 (Group Output)

  • グループ出力ノードは、ジオメトリノードツリーからの出力を定義します。

  • ノードツリーで処理されたジオメトリ、属性、値などをグループ出力ノードに接続することで、外部に結果を渡すことができます。

  • 複数の出力を設定できます。例えば、変更されたジオメトリの他に、計算された属性や値を出力することができます。

  • グループ出力ノードは、ノードツリーの最後に配置され、他のノードからのデータの流れの終点となります。

属性

属性統計

ジオメトリから属性をはぎ取って統計処理して出力する。
ver4.1の段階ではFloatとVectorのみ受ける。

最上位グループのグループ入力ノードはジオメトリノードモディファイアが張り付いてるオブジェクト自体が入力であると考えてよい。
つまりデフォルトなら初期配置キューブである。

入力ソケットのついてないノード(下の画像だと位置ノード)はノードツリーを流れているジオメトリを対象とする。下図の場合、属性統計ノード『が』入力ジオメトリ(下図の場合デフォルトキューブ)『の』位置属性を取りに行っていると思われる。

追加のジオメトリ(Geometry nodes)項、読込(Read)項にあるのは要は属性である。

デフォルトキューブの頂点情報から円柱の位置を決めるサンプル



位置ノードがなにを対象にしているかサンプル
二つ目の位置ノードは統合後ジオメトリを対象にしていることが分かる。


属性キャプチャ(Capture Attribute)と名前付き属性格納(Store Named Attribute)


キャプチャはぶんどって即ほかに渡す。
格納は名前付けて取りおいて使い回す。


Capture Attribute Nodeと比較すると、このノードは基本的に同じことを行いますが、属性は匿名参照ではなく名前を取得します。同じノード ツリー内のデータを再利用する場合は、入力ジオメトリ内で名前の競合が発生する可能性がないため、Capture Attributeノードの方が適している可能性があります。

カーブ

処理(Operations)

カーブのメッシュ化(Curve to Mesh)


ジオメトリ

処理(Operations)


ジオメトリ削除(Delete Geometry)

上がドメイン
下がフィールド

下図の場合
円柱(Cylinder)の出力は上部の面であり、
https://docs.blender.org/manual/ja/3.5/modeling/geometry_nodes/mesh/primitives/cylinder.html

ジオメトリ削除はそれを受けて、
ドメイン:ポイント
フィールド:面だけ
として、
入力である上部の面を構成するポイントをドメインとし、
そのポイントをコンポーネントにもつ面を削除する。

定義によりジオメトリの方がメッシュより一般的であるため、メッシュ出力をジオメトリ入力で受けることができる。例えばジオメトリはカーブも受けることができる。
面だけ

ここで上部の面だけでなく、サイドの面も消えていることから、
我々はブレンダーの癖を理解することを強要される。

辺と面のみ

ドメイン:ポイント
フィールド:辺と面のみ
ポイントは残っている。
スプレッドシートなどで座標見てもわかるし
ポイントにインスタンスするとちゃんと残ってるのわかる。

すべて

ちゃんと全部消える。

ドメイン:辺

面だけ
辺と面のみ
すべて

この場合、辺と面のみとすべてでは結果が変わらない。
おそらくブレンダーのデータ構造的に、
まずポイントありきで、辺と面はどのポイントをつないだかの情報でしかない。

ここで刮目すべきは
上部の面を構成する辺と、
サイドの辺が繋がっていないらしいことである。

ドメインにポイントを選ぶと周辺コンポーネントが根こそぎ消えるが、
ドメインに辺を選んだ時点でポイントが消えないし、
辺は他の辺とポイントを経由してしか繋がっていない
ソースがすべてであっても、辺は面を消せるがポイントは消せない。

ドメインが面だと辺もポイントも消せない。


バケツ

厚みなしバケツ



厚みなし円筒



メッシュ押し出しは個別チェックに注意
厚みなし円筒押し出し




内側の円筒は面反転しないと法線が逆
円筒


単純歯車


円柱のサイド面を一定index毎に押し出す

ただし剰余をそのまま選択ソケットにつなぐと、
値ノード毎に押し出さないという挙動になる。
多分選択ソケットはfalsyじゃないindexを押し出していると思われる。
つまり値ノードが3の時、index1と2は剰余の出力が0でなく、trueであって押し出す。index3の時、剰余の出力が0であってfalsy。押し出さない。

値ノード毎に押し出す場合、イコールノードを差し込む。これで剰余出力が0の時にイコールノードはtrueを出力し、押し出される。と思う。

数式、比較ノードの等号
ブーリアンでもいけちゃう


関数からカーブ


この例ではパラメトリックなt軸はz+に向かう。

カーブラインはBlenderオブジェクトとしてはカーブであるが
幾何としては線分である。
制御点というか、構成する座標は始点と終点の2個しかない。
図ではカーブリサンプル(Resample Curve)によって座標数を増やしている。
つまりカーブリサンプル後は直線状に座標が並んでいる。
スプラインパラメータはカーブオブジェクトの属性。
始点が0で終点が1である。
リサンプル後のカーブは、各々の座標が自分の位置を0-1で返す。

円を描こうとする場合、

$$
x(t) = h + r \cos(t)\\
y(t) = k + r \sin(t) 
$$

原点(0,0), 半径を1と考えると

$$
x(t) = \cos(t)\\
y(t) = \sin(t) 
$$

この記事が気に入ったらサポートをしてみませんか?