使用ソフトウェア | バージョン | 備考 |
---|---|---|
Blender | 3.2 |
ジオメトリノードを新規作成すると必ずGroup Input
とGroup Output
ノードが生成されている。
今回はこちらのGroup Output
(グループ出力)ノードを使ってアトリビュートの概念とその値を出力する方法を解説する。
このノードを使って値(アトリビュート)を出力することができると次のようなことが出来る。
アトリビュートと言うのはプログラミングで言うところの変数と同じようなもの。
各頂点や面などの要素1個1個に対し別々の値を保存しておくことが出来る。
変数と同じように自由にアトリビュート名を付けられる。
アトリビュートが付与されているかどうかは左上のスプレッドシートから見ることが出来る。
例えば「テストです」というアトリビュートを格納した例は次
「テストです」という項目が増えており、各頂点ごとに別の値が入っているのがわかる。
これがアトリビュートだ。
アトリビュートを付けるにはいくつか方法があるが、その一つがGroup Output
を使うという方法だ。
まずは適当な値をGroup Output
ノードの下側に出ている空のソケットに繋いでみよう。
v3.2
現在では数値系のアトリビュートしか外部に出力できないのでString
やGeometry
等は繋がないほうが良いかもしれない
適当な定数を繋いでみる。
しかし、左上のスプレッドシートに変化がない。
実はv3.2
現在ではアトリビュート名を別で指定してやらないと登録されない。
上の状態でGeometry Nodes
のモディファイアを見てみるとOutput Attributes
という項目に値が追加されている。
この右側に任意の名前を入れて初めてアトリビュートとして登録される。
アトリビュートの設定は以上で完成だ。
ここでは分かりやすく日本語を入れているが、プログラミング一般ではアルファベットで文字を入れるのが望ましい。
呼び出す時の名前を明示するときにヒューマンエラーになりやすく、またプログラムによっては日本語名だとバグの原因になる可能性あり。
上で設定したアトリビュートをマテリアル側から読み込んでみる。
マテリアルエディタの中ではAttribute
というノードを使って読み込むことができる。
読みたいアトリビュートは下部のName
に明示する。
Attribute
ノードの出力が複数あって混乱する。
今回のこのアトリビュートはFloat
だったので灰色、つまりFac
から繋げば良い。
作ったアトリビュートがVector
なら青紫っぽいソケット、Color
なら黄色だ。
例えばここから出てくる数字を使ってプログラム的に色を変化させたりすることができるようになるはずだ。
マテリアルだけでなく別のジオメトリノードでアトリビュートを読み込むこともできる。
次の例として「立方体」と名付けられたオブジェクトのジオメトリノードでtest
のアトリビュートを作った。
新しくICO球のオブジェクトを作って、こちらにもジオメトリノードを新規作成する。
その中に先程の「立方体」とかかれたオブジェクトをドラッグアンドドロップしよう
するとObject Info
ノードが現れ、そのGeometry
ソケットから元のジオメトリを読み込むことができる。
この場合は「ICO球のジオメトリノード内で、立方体を読み込んでいる」ということになる。
今回はICO球にてさらに次のようなノードを組んだ
するとスプレッドシートに次のようにtest
アトリビュートが増えている。
つまり、元のオブジェクト(立方体)からアトリビュートを読み込んで新しいオブジェクト(ICO球)に適用することができた。
ここではちょっと変わったノードが使われているのには理由がある。
元のジオメトリに適用されているアトリビュートを、全く別のジオメトリに直接適用できないという点だ。
上の例では元の「立方体」オブジェクトに適用されているアトリビュートを次の「ICO球」の近い部分に再適用する処理をしているため実現できている。
あまり深く解説すると混乱するので、この記事では「こんなことも出来る」という概念的なものだけ覚えてもらえたらと思う。
今回の記事はアトリビュートを外部出力する例で書いたが、実際には同じジオメトリノード内で使うことも多い。
単純にプログラムの変数のように状態や数値を記憶しておいて、なんらかの処理に役立てる事ができるので色々考えてみると良い。
Group Output
はInteger
やFloat
の型指定を正しく行う必要がある。
途中でソケットの種類を変えるなどの調整が必要になる場合も多々ある。
そういうときはノード画面でNキー
を押すと右側からドロワが開く。
上の画像のようにGroup
タブを開いて対象のソケットの型などを調整することができる。