見出し画像

ノード・リンクを調べる

ノード・データにはソケットがあって、ソケット同士をリンク(Link、あるものと別のものを繋ぐこと)すれば、ノード内で加工した結果を次のノードへ引き継ぐことができる。

ノードを繋いでいって、加工を加え、最終的な結果をメッシュ・データの表面へ反映できるようにする、というのが、マテリアルの役目なのだろうと思う。

ノード・リンクへのアクセス

ノード・リンクへのアクセス方法は2種類あるようだ。ひとつはノード・ツリーからアクセスする方法、もうひとつはノード・データからアクセスする方法。

ノード・ツリーからアクセスする場合は、俯瞰してリンク・データを見ることができる。ノード・データからアクセスする場合は、ノード・データに注目してリンク・データを見ることができる。

次のスクリプトでは、ノード・ツリーからリンク・データへアクセスしている。

>>> len(bpy.data.objects["Cube"].data.materials["Material"].node_tree.links)
9

次のスクリプトでは、ノード・データからリンク・データへアクセスしている。

>>> len(bpy.data.objects["Cube"].data.materials["Material"].node_tree.nodes["Principled BSDF"].inputs["Base Color"].links)
1

いずれの場合も2つのソケット情報を持っていて、データの構造的にはメッシュ・データの頂点とエッジの関係に近い。

リンク情報

リンク・データは、あるノード・データにあるソケットと、別のノード・データにあるソケットを繋いでいるという情報を管理している。

したがって、2つのノード・データと、2つのソケット・データへアクセスすることができる。

ノードは、データの流れていく方向が決まっていて、かならず左側から右側へと流れるようになっている。ノード・データで言えば、左側にはかならずinputsプロパティが来るし、右側にはかならずoutputsプロパティが来る。

リンクの情報は、このノードの流れに沿って構築・管理されていて、片方のoutputsからもう片方のinputsへ繋がるようになっている。

リンク・エラー

ノード・データを調べたときに、ソケットはデータ型ごとに色分けされていることがわかったけれど、基本的には、同じ色同士をリンクするような仕組みになっていると考えられる。

プログラム的に考えると、キャストできる場合はリンクしても問題ない気がする。

ノード・リンクがどこまでのキャストを許容しているのかは調べてみないことにはわからないけれど、VALUEの値をCOLORに繋いでもリンク・エラーにならなかった。

ソケット同士のリンクに問題が起きると、リンク・エラーになり、リンクの線が赤く表示される。先ほどキャストの話を出したけれど、おそらくキャストできない場合にリンク・エラーになるようだ。

次のイメージでは、Shader型のソケットをRGBA型のソケットへ繋いだため、リンク・エラーになっていることがわかる。

画像2

ちなみに、スクリプトから意図的にリンク・エラーにすることもできる。

bpy.data.objects["Cube"].data.materials["Material"].node_tree.links[0].is_valid = False

画像1

リルート

ひとつのソケットから複数本のノードへリンクすることもできる。出力本数には制限があるものの、普段使いで足りなくなることはなさそう。

画像4

リルート機能を使うと、ソケットの出力をレイアウトすることができる。リンクの出力本数自体を増幅したりするという効果はなさそうだ。

画像3


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