これらのシェーダにはレイアウトにおいて高い柔軟性があり、そのコンポーネントのインスピレーションとして NVIDIA ARCS の MDL を使用しています。この図からは分かること:
予備の出力パスはライト パス エクスプレッション(LPE)の項を使って指定することができます。これらの LPE の一部がレイヤ化シェーダでサポートされています。カメラから名前で指定するだけで、自動的にユーザ フレームバッファに書き込むことができます。グローバル文字列オプションを使用して、どの LPE が任意に名前をつけたユーザ フレームバッファに行くことができるかを指定することもできます。最も一般的なシェーディング サブセット出力(『拡散」など)を表すことができ、すべての分割された出力を「結果」ビューティ出力に直線的に足し合わせる必要があります。したがって、これらの 加算パスはそのまま合成できます。サポートされている現在のパスは、「複数の LPE パス」に詳しく説明されているパスを含みます。
シェーダは、いくつかのグローバル設定を文字列オプションとして受け入れ、一部はテスト用、一部は機能の微調整用です。
| "light relative scale" | シェーダは、BSDF のシェーディングと一致するシェーディングで "light relative scale" をリッスンします。つまり、"light relative scale" に基づいてライトの解釈を調整します。mia_material シェーディングと一致するように、"light relative scale" は 1/PI である必要があります。 | "mila ray cutoff" | これはカットオフ重要度で、このポイントからレイが無視されます。グローバル設定であることを除き、mia_material の refr_cutoff と似ています。既定値は 0.01 です。つまり、効果が 1 % 未満のレイから拒否されます。 | "mila clamp output" | オンまたはオフです。mila_material で出力値のクランプを有効/無効にします。既定はオフです。 | "mila clamp level" | 上記のクランプ出力が有効になっている場合、大まかに輝度として、クランプするレベルにこの値を使用します。既定値は 1.0 です。出力が 1 を超えることは認められているが、ダイナミック レンジの減衰して最適化する必要がある場合、1 ~ 5 の間の値を試してください。これは、シーンとパイプラインの要件にも依存するためです。 | "mila quality" | レイヤ化ライブラリ内のその後に続く他のすべての品質設定に対する品質乗数。この既定値は 1.0 です。 | "mila glossy quality" | 光沢反射または光沢透過でのサンプル数をコントロールします。この既定値は 1.0 です。これは、公称のサンプル数を使用し、光沢シェーダでの粗さに加え、トレース深度と重要度によってもコントロールされます。 | "mila scatter quality" | レイの当たるポイントの付近をサンプリングするスキャッタのサンプル数をコントロールします。既定値は 1.0 です。重要度、トレース深度などに関するその他のすべての要素が高い場合、公称では約 64 サンプルです。 | "mila diffuse quality" | 間接拡散詳細が使用されているときに、間接拡散反射のサンプル数をコントロールします。この既定値は 1.0 です。 | "mila diffuse detail" | オンまたはオフです。間接拡散詳細モードを有効にします。mila_diffuse_reflection によるシェーディング専用の AO カラー ブリード/FG フォースと同様です。 | "mila diffuse detail distance" | 詳細に使用される距離です。この距離を超えると、通常の間接拡散コントロール(GI/FG)が使用されます。 | "LPE: XXX" | 非推奨になりました。現在は、フレームバッファ LPE アトリビュートを使用します。どのユーザ フレームバッファにライト パス エクスプレッション XXX を書き込むかを定義します。現在サポートされているパスの詳細は、ここをご覧ください。文字列オプションの先頭は必ず「LPE: 」にしてください。LPE の指定の前に、コロンと半角スペースを挿入する必要があります。一般的なパス名に基づいた文字列オプションの例を次に示します。
|
| "mila share lights" | デバッグやパフォーマンスの比較のために使用することができます。オフの場合、ライトの共有は無効になり、すべてのレイヤ シェーダ(コンポーネント シェーダ)がそれぞれのライト ループを実行します。既定はオンです。 |
| "mila propagate importance" | デバッグやパフォーマンスの比較のために使用することができます。オフに設定すると、サブシェーダおよびサブレイへの重要度の伝播が無効になるため、この最適化の影響を判断することができます。既定はオンです。 |
| "mila separate interactions" | デバッグやパフォーマンス比較に使用されます。最初にレイが当たった後に、コンポーネントの確率(その計算された最終ウェイト)に基づいて二次レイをトレースするかどうかを決定します。既定はオンです。 |
このシェーダは、シェード ツリーのルート シェーダである必要があります(そうでない場合、透明度とシャドウがまったく機能しなくなります)。また、必要に応じてフレーム バッファに書き込むことができます。
declare shader "mila_material" (
# Shader to call
shader "shader",
#
boolean "thin_walled",
shader "backface_shader",
#
scalar "visibility" default 1.0,
#
# Debug/test tool: Show a given fb as beauty
# 1 = ALL, 2 = transparency, 3 = absorb, 4 = LrDE, 5 = LrGE etc.
integer "show_framebuffer" default 0,
#
# overall bump vector for whole material
vector "bump",
#
# Name of framebuffers to output to
# If empty, nothing is written
array struct "extra_color" {
color "color",
string "color_fb",
boolean "color_comp"
},
array struct "extra_vector" {
vector "vector",
string "vector_fb",
boolean "vector_comp"
},
array struct "extra_scalar" {
scalar "scalar",
string "scalar_fb",
boolean "scalar_comp"
}
)
apply material, shadow, photon
version 4
end declare
ルート シェーダ mila_material は、"shader" スロットへの入力として単一の mila_layer または mila_mixを必要とし、およびシェーダ ツリーはそこから広がっていきます。
また、次に示す追加の入力もあります。
シェーダの mila_layer および mila_mix は、レイヤ化と混合の「ハード リフト」をすべて行います。これらは、次の条件でのみ使用してください。すなわち、
このシェーダは、レイヤ化シェーダ システムの外側では正しく機能せず、他の場所で使用しようとした場合はクラッシュすることもあります。
これらのシェーダは、レイヤとして入力された結合シェーダ コンポーネントを表す単一のカラー出力を返します。mila_layer シェーダのインタフェースは、初期パラメータがあり、その後に構造体の配列(下記参照)がレイヤごとに 1 ずつあります。一部の DCC アプリケーションで使用する場合、「構造体の配列」というタイプのパラメータは、ユーザ インタフェースでサポートされないため、注意してください。この問題を解決するために、レイヤの固定セットが使用できるフェノメナが用意されています。
declare shader
color "mila_layer" (
array struct "layers" {
shader "shader",
boolean "on" default on,
scalar "weight" default 1.0, #: min 0 softmax 1
color "weight_tint" default 1 1 1 1,
boolean "use_directional_weight" default off,
integer "directional_weight_mode" default 0, #: enum "fresnel:custom"
scalar "ior" default 1.2,
scalar "normal_reflectivity" default 0.05,
scalar "grazing_reflectivity" default 1.0,
scalar "exponent" default 5.0,
vector "bump"
}
)
version 5
end declare
mila_layer シェーダは合成システムで「over」操作に似たウェイト シェーダを使用します。ここでのウェイトは、最上位のレイヤの、その下に積み重ねられたすべてのレイヤに対するパーセントで表します。言い換えると、最初(一番上)のコンポーネントが指定のウェイトそのもので使用され、その下にあるすべてのレイヤが「1 からウェイトを引いた値」によって重み付けされます。これは、指定が行われた順番で上からレイヤ全体に再帰的に適用されます。この動作は、mia_material のビルトインのエネルギー保存と似ています。入力パラメータは次のとおりです。
declare shader
color "mila_mix" (
boolean "clamp" default off,
array struct "components" {
shader "shader",
boolean "on" default on,
scalar "weight" default 1.0, #: min 0 softmax 1
color "weight_tint" default 1 1 1 1,
vector "bump"
}
)
apply material, texture, shadow, photon
version 2
end declare
mila_mix シェーダは、2 種類の塗料をバケツに入れて混ぜるように、コンポーネントを混合します。mila_mix では、コンポーネントの入力は概ね同様ですが、ウェイトの方向依存がありません。ウェイトは、レイヤが行うようなパーセンテージとしては解釈されません。したがって、エネルギー保存のため、もう 1 つのパラメータを使って指定のウェイトを次のように混合します。