ノード・データを調べる
Shading画面へ切り替えてマテリアル・ノードを編集しながら、各ノードへアクセスしてデータ構造を調べてみた。
Addドロップ・ダウン・リストをクリックすると、ノード・データのカテゴリが一覧表示される。表示されるカテゴリは次の通り。
細かい一覧をここに記載するのは省くけど、数えてみると100種類のノード・データが存在している、ということがわかった。これはとてつもない数で、ひと通り憶えるだけでも一苦労しそうだ。
プロパティの扱い
ノード・データの種類ごとに、プロパティの数に増減がある。これらのプロパティをどのように扱っているのかを調べてみると、基本的にはinputsプロパティとoutputsプロパティで管理していた。
またTexture Imageノードであればimageプロパティがあり、Noiseノードであればnoise_dimensionsプロパティがある。プロパティに増減がある。
inputsプロパティ、あるいはoutputsプロパティで管理されるものと、名前つきのプロパティで管理されるものの差は何だろうか?
いくつかのノード・データを調べてわかったことは、inputsプロパティとoutputsプロパティで管理されるものにはソケットがあり、名前つきのプロパティにはソケットがない。
ここでいうソケット(Socket、受け口)とは、ノード同士を繋ぐためにある、ノードの端についている丸いポッチのことを指している。
ソケットの種類
ソケットには色がついていて、何かを表していることはわかるけど、具体的に何を表しているのかはよくわからなかった。
ノード・データのシリアライザを書いていて気づいたんだけど、これはどうやらデータ型を表しているらしい。
ソケットで利用されるデータ型は次の通り。
BOOLEAN
COLLECTION
CUSTOM
GEOMETRY
IMAGE
INT
OBJECT
RGBA
SHADER
STRING
VALUE
VECTOR
ソケットの色を観察してみると、黄色・紫色・緑色・水色・白色があるけれど、黄色がRGBA、紫色がVECTOR、緑色がSHADER、水色がSTRING、白色がVALUEになっているようだ。
その他、色のついていないデータ型は、後述するウィジェットで扱われているものではないかと推測している。
Mathノードのバグ
Mathノードには、inputsプロパティにValueが3つある。したがって、inputs["Value"]という風にキーを使ったアクセスができない。これはBlenderのデータ・バグのひとつではないかと思う。
Mathノードは、オペレーション(AddやTruncateなど)を指定した際に、画面に表示される文字列が切り替わることがあるけれど、この文字列はどこに設定されているのだろうか。調べてみるとlabelプロパティに設定されていた。
このMathノードのバグが放置されているのは、キーでアクセスしなくてもサブスクリプトでアクセスすれば回避できる、もしくは、そもそもからしてMathノード自体がほとんど使わないかのどちらかだと思う。
なお、Vector Mathノードも同様の仕組みになっていて、同じバグを含んでいる。
ノードの系統
Shading画面で扱うことのできるノード・データは、シェーダ・ノードとそれ以外のノードに分けられることがわかった。
ほとんどのノード・データはシェーダ・ノードに属するけれど、Group InputやGroup Outputのほか、Frameなんかはそれ以外のノードに属する。
プログラム的には同じクラスから派生しているだけなので、内部に保持しているプロパティは基本的には変わらないようだ(参照しないだけ)。
bpy.typesで調べてみると、ShaderNodeで始まるクラスに属するものと、Nodeで始まるクラスに分けられる。
ウィジェット
ノード・データに名前つきのプロパティが設定されているのは、ウィジェット(Widget、小規模のアプリ)と呼ばれるデータを扱うためにある。
ウィジェットとは、具体的には赤枠内のように、ソケットがついていないものを指す。
ウィジェットはウィジェットなりのデータ構造を持っているようなので、また個別に調べてみる。
この記事が気に入ったらサポートをしてみませんか?