ノード エディタのオペレータ グラフ

Arnold のオペレータを使用したレンダリング ワークフローを紹介するビデオは、こちらにあります。

 

Operators を使用すると、上級ユーザは Arnold シーンの一部をオーバーライドし、レンダリング時に Arnold ユニバースを修正できます。最も一般的な使用例としては、プロシージャル(ASS または Alembic)内のパラメータ(シェーダなど)のオーバーライドが挙げられます。このためには、プロシージャル内で定義された Arnold ノードとパラメータの名前を把握しておくことが必要となります。

 

Operator ノードは、プロシージャで生成されたノードに対する遅延バインディングや遅延オーバーライドなど、オブジェクト(ノード)単位のパラメータ割り当ておよびオーバーライドを実行します。Operators はノード(MaterialX)を作成し、一般的なシーンの検査と変更を実行することもできます。


一部の Operator は、ワイルドカードを使用してオペレータによって処理されるノードを決定する選択パラメータを提供します。詳細については、以下の「選択式」で説明します。 オペレータが、接続されているプロシージャルについて評価されている場合、選択式は、そのプロシージャルのネームスペースに対して相対的であると見なされます(以下のオペレータ グラフを参照)。


複数のオペレータは 1 つのグラフに連結することができ、そのグラフは対象となっているオペレータから評価されます。シーンには、接続されていないオペレータ グラフを複数含めることができます。レンダリングでは、対象オペレータに接続されたグラフおよびプロシージャ ノードに接続されたオペレータ グラフのみが評価されます。

Kick を使用して、set_parameter ノードの有効なターゲット ノード パラメータ名をクエリできます。 例:

kick -info <node type>

kick -info polymesh

Diagnostics タブの Ignore Operators を選択すると、Arnold のレンダリング設定内で Operators を無視できます。

 

オペレータの詳細については、こちらを参照してください。

オペレータは Render Settings、Arnold メニュー、または Node Editor ウィンドウで作成できます。

 

選択式

オペレータは選択式を使用して、レンダリング時にオペレータによって処理されるノードを選択できます。 選択式とは、次にあげるオペレータが複数連結したものです。

  • or (論理和)
  • and (論理積)
  • not (否定)
  • and not (除外)
  • ()はネスト範囲

 

各選択で glob パターン正規表現を使用し、エクスプレッションがノード名と一致した場合、ノードはオペレータによって処理されます。既定では、r'<my_regex>' など、選択式が regex 引用句内にない限り、glob 比較が使用されます。例:

(/group0/sphere* and not (/group0/sphere1 or /group0/sphere0)) or /group1/sphere3
 
not r'p(ickle|ringle)[0-9]+'
 
r'c(ar1|ar2)' or r'car[34]'

 

パラメータの比較

選択式を使用すると、ノード エントリ名、タイプ、派生タイプなど、選択したノードのパラメータの名前と値を比較することもできます。 このためには、パラメータの区切り文字ドット .()を各ノード選択文字列で使用します。 次の選択式は、「radius」パラメータが指定された「sphere」という名前のすべてのノードを比較します。

sphere.(radius)

 

コンパレータを使用すると、特定のパラメータ値を比較することができます。次の選択式は、名前の先頭が「sphere」で、「radius」が 0.5 よりも大きなすべてのノードを比較します。

sphere*.(radius > 0.5)


パラメータの比較は、次のように連結と glob/regex もサポートしています。

car*.((make == 'fiat' and year > 2010) or tinted_glass == True) or drone*.(battery_level >= 20)

plane*.(model == 'A3*' and captain == r'B(ob|ryan)')


配列とマルチバリュー パラメータ

ベクトルや RGB など、配列とマルチバリュー パラメータを比較するには、角括弧を使用します。 配列の値が単一の場合、または配列が 1 つの数値で構成される場合は、1 組の角括弧のみが必要です。

*.(rgb_array == [[1 2 3][4 5 6]])
 
*.(float_array == [10.0 20.0 30.0])

*.(velocity >= [1.0 1.0 1.0])

*.(my_matrix == [1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6])

 

文字列リテラル

文字列、列挙型、ノードの各タイプの比較パラメータには、次のような文字列リテラルが必要です。

*.(some_string == '*value*')
 
*.(transform_type == 'rotate_about_center')

*.(shader == 'purple_shader')

*.(shader == 'yellow_*')

注: 文字列の引用符を省略した場合、値はパラメータ参照として処理されます(下記参照)。

パラメータ配列インデックス

配列内の特定の配列インデックスとマルチバリュー パラメータを比較することができます。単一の値と比較する場合、角括弧は必要ありません。

*.(accessories[3] == 'monkey fists')
 
*.(my_rgb[1] == 1.0)

*.(rgb_array[1] >= [0 0 0])

*.(float_array[1] == 20.0)

*.(rgb_array[1]) # checks if the entry exists

 

比較パラメータのリファレンス

一般的に、ノードには、シミュレーションや別のオペレータから任意のユーザ パラメータが既に指定されています。

以下のように、同じタイプの他のノード パラメータと比較することができます。

*.(radius <= some_float_param)
 
*.(my_rgb == some_rgb_param)

 

ノード パラメータは単一文字列値と比較することができます。たとえば、ユーザ文字列パラメータに基づいたシェーダと比較することができます。

*.(shader == some_string)

 

また、他のノードのパラメータと比較することもできます。この場合、構文は #<node_name>.<param_name1>[<.param_nameN>]となります。

*.(model == #some_node.model)
 
*.(year == #some_node.some_int)

*.(year == #some_node.node_array[0].year)

*.(my_rgb == #some_node.some_rgb)

 

これは、ノードにリンクされているパラメータの値と比較する場合に役立ちます。一般的な例としては、シェーダがあります。シェーダでは、パラメータの値を使用して他のパラメータを参照することもできます。

*.(shader.base == 0.8)
 
*.(shader.base_color == [1 1 0])

*.(shader[0].base_color.filename == '*plate*')

*.(shader[0].base_color.filename == #some_node.tex_name)

 

複数のパラメータ名の比較

パラメータ名で glob 式または regex 式を使用すると、複数のパラメータと比較することもできます。

単純な例として、RGB パラメータが colorcolour のどちらの名前かに関係なく比較する例を挙げます。

*.(colo*r == [1 0.4 0.2])
 
*.(mod* == r'(X|M)[0-9]')

*.(r'receive_sha.*' == True)

オペレータは一致したすべてのパラメータを受け取ります。オペレータですべてのパラメータを使用することも、各パラメータの処理方法をオペレータで指定することもできます。

ノード エントリの比較

選択式は、ノード エントリ名(@node)、タイプ(@type)、派生タイプ(@derived)など、ノード エントリ情報に基づいてフィルタできます。

*.(@node == 'polymesh')
 
*.(@type == 'shape')

*.(@derived == 'procedural')

 

ノード エントリ情報は、一般的な方法で他のパラメータ選択式に連結できます。

*.(@node == 'sphere' and radius > 0.4)

  • No labels