| 使用ソフトウェア | バージョン | 備考 | 
|---|---|---|
| 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タブを開いて対象のソケットの型などを調整することができる。
