2022-06-16

【Geometry Nodes】アトリビュートの概念とGroup Output(グループ出力)ノード【Blender】

Group Outputノードを経由してアトリビュートを出力する方法基礎。

Article Image
使用ソフトウェアバージョン備考
Blender3.2

Group Output(グループ出力)

ジオメトリノードを新規作成すると必ずGroup InputGroup Outputノードが生成されている。

Group Output

今回はこちらのGroup Output(グループ出力)ノードを使ってアトリビュートの概念とその値を出力する方法を解説する。

出力すると何ができる?

このノードを使って値(アトリビュート)を出力することができると次のようなことが出来る。

  • マテリアルノード側でアトリビュートの数値を読めるので、複雑なマテリアルが作成可能
  • 別のジオメトリノードにアトリビュートを渡せるので、外部のオブジェクトに作用させることができる

アトリビュートを知る

アトリビュートと言うのはプログラミングで言うところの変数と同じようなもの。

各頂点や面などの要素1個1個に対し別々の値を保存しておくことが出来る。

変数と同じように自由にアトリビュート名を付けられる。

アトリビュートの確認

アトリビュートが付与されているかどうかは左上のスプレッドシートから見ることが出来る。

例えば「テストです」というアトリビュートを格納した例は次

テストですアトリビュート

「テストです」という項目が増えており、各頂点ごとに別の値が入っているのがわかる。

これがアトリビュートだ。

アトリビュート付ける方法

アトリビュートを付けるにはいくつか方法があるが、その一つがGroup Outputを使うという方法だ。

まずは適当な値をGroup Outputノードの下側に出ている空のソケットに繋いでみよう。

殻のソケット

v3.2現在では数値系のアトリビュートしか外部に出力できないのでStringGeometry等は繋がないほうが良いかもしれない

適当な値を繋いだ例

Valueを繋ぐ

適当な定数を繋いでみる。

しかし、左上のスプレッドシートに変化がない。

何もない

実はv3.2現在ではアトリビュート名を別で指定してやらないと登録されない。

アトリビュート名を設定

上の状態でGeometry Nodesのモディファイアを見てみるとOutput Attributesという項目に値が追加されている。

増えた項目

この右側に任意の名前を入れて初めてアトリビュートとして登録される

名前を付けた

アトリビュートが作られた

アトリビュートの設定は以上で完成だ。

ここでは分かりやすく日本語を入れているが、プログラミング一般ではアルファベットで文字を入れるのが望ましい。

呼び出す時の名前を明示するときにヒューマンエラーになりやすく、またプログラムによっては日本語名だとバグの原因になる可能性あり。

出力したアトリビュートをマテリアルで使う

上で設定したアトリビュートをマテリアル側から読み込んでみる。

マテリアルエディタの中ではAttributeというノードを使って読み込むことができる。

Attribute

読みたいアトリビュートは下部のNameに明示する。

名前を明示

出力ソケットがいっぱいあるけど?

Attributeノードの出力が複数あって混乱する。

出力ソケット

今回のこのアトリビュートはFloatだったので灰色、つまりFacから繋げば良い。

作ったアトリビュートがVectorなら青紫っぽいソケット、Colorなら黄色だ。

おそらくカラーを使えばAlphaも出てくると思うが、未確認。

例えばここから出てくる数字を使ってプログラム的に色を変化させたりすることができるようになるはずだ。

別のジオメトリノードで使う

マテリアルだけでなく別のジオメトリノードでアトリビュートを読み込むこともできる。

次の例として「立方体」と名付けられたオブジェクトのジオメトリノードでtestのアトリビュートを作った。

例

新しくICO球のオブジェクトを作って、こちらにもジオメトリノードを新規作成する。

新しいオブジェクト

その中に先程の「立方体」とかかれたオブジェクトをドラッグアンドドロップしよう

ドラッグアンドドロップ

するとObject Infoノードが現れ、そのGeometryソケットから元のジオメトリを読み込むことができる。

Object Infoノード

この場合は「ICO球のジオメトリノード内で、立方体を読み込んでいる」ということになる。

今回はICO球にてさらに次のようなノードを組んだ

ノード例

するとスプレッドシートに次のようにtestアトリビュートが増えている。

つまり、元のオブジェクト(立方体)からアトリビュートを読み込んで新しいオブジェクト(ICO球)に適用することができた。

アトリビュート読み込み完了

注意点

ここではちょっと変わったノードが使われているのには理由がある。

元のジオメトリに適用されているアトリビュートを、全く別のジオメトリに直接適用できないという点だ。

上の例では元の「立方体」オブジェクトに適用されているアトリビュートを次の「ICO球」の近い部分に再適用する処理をしているため実現できている。

あまり深く解説すると混乱するので、この記事では「こんなことも出来る」という概念的なものだけ覚えてもらえたらと思う。

アトリビュートは様々な目的で使える

今回の記事はアトリビュートを外部出力する例で書いたが、実際には同じジオメトリノード内で使うことも多い。

単純にプログラムの変数のように状態や数値を記憶しておいて、なんらかの処理に役立てる事ができるので色々考えてみると良い。

おまけ:Group Outputの調整

Group OutputIntegerFloatの型指定を正しく行う必要がある。

途中でソケットの種類を変えるなどの調整が必要になる場合も多々ある。

変えたい値

そういうときはノード画面でNキーを押すと右側からドロワが開く。

ドロワ

上の画像のようにGroupタブを開いて対象のソケットの型などを調整することができる。



謎の技術研究部 (謎技研)