以下に、レイヤ化パッケージに現在実装されているさまざまなサーフェス コンポーネント シェーダを示します。
拡散反射コンポーネントは、mia_material の拡散シェーディングと並び、MDL で定義された拡散反射の要素コンポーネントに非常によく似ています。より均等な光の拡散のために Oren-Nayer 粗さパラメータがあります。パラメータを以下に示します。
"mila_diffuse_reflection" (
color "tint" default 1 1 1,
scalar "roughness" default 0,
scalar "quality" default 1.0, #: min 0 softmax 2.0
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
光沢反射コンポーネントは、mia_material 反射シェーディングのほか、NVIDIA マテリアル記述言語(MDL)の光沢要素 BSDF に似ています。実際、この光沢反射コンポーネントは、mia_material が使用する光沢ではなく、MDL が使用する粗さの使用も採用します。特に、鏡のような反射が求められるサーフェス コンポーネントを完全に平滑化できるように、次の単純なスペキュラ反射コンポーネントが個別に用意されています。パラメータを以下に示します。
"mila_glossy_reflection" (
color "tint" default 1 1 1,
scalar "roughness" default 0.0, #: min 0.0 max 1.0
scalar "quality" default 1.0, #: min 0.0 softmax 2.0
scalar "anisotropy" default 1.0,
scalar "aniso_angle" default 0,
integer "aniso_channel" default -1,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
スペキュラ反射コンポーネントは、鏡のような反射になります。これは、光沢が 1 に設定されている場合、mia_material の反射シェーディングと同様になります。また、MDL で使用されるスペキュラ要素 BSDF にも関連します。パラメータを以下に示します。
"mila_specular_reflection" (
color "tint" default 1 1 1,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
mia_material の屈折部分と基本的に同じものとして実装されます。前述のように、詳細はアーキテクチャル ライブラリのドキュメントを参照してください。
"mila_glossy_transmission" (
color "tint" default 1 1 1,
scalar "roughness" default 0.0, #: min 0.0 max 1.0
scalar "quality" default 1.0, #: min 0.0 softmax 2.0
scalar "ior" default 1.2,
scalar "anisotropy" default 1.0,
scalar "aniso_angle" default 0,
integer "aniso_channel" default -1,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
mia_material の屈折部分と基本的に同じものとして実装されます。前述のように、詳細はアーキテクチャル ライブラリのドキュメントを参照してください。
"mila_specular_transmission" (
color "tint" default 1 1 1,
scalar "ior" default 1.2,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
透明度(屈折ではなく、光が直線的に進む透明)
"mila_transparency" (
color "transparency" default 1 1 1
)
レイヤ化シェーダに関しては、透明と屈折の概念的な違いを理解することが重要です。
また、透過と透明には非常に重要な技術的な違いがあります。透過は実際のシェーダ mila_glossy_transmission によって実装されるのに対し、透明はルート ノード mila_material で実装され(「フレームバッファ」のページで説明)、シェード ツリーにメタ情報として実際に伝播されます。
ただしこれは、エンド ユーザにとってはほとんど問題になりません。エンド ユーザから見た場合、重要な違いは、透明度はレイをまっすぐ貫通させる場合にいつでも使用できることです。使用例を次に示します。
たとえば、中空ではないガラス球体の作成する場合、フレネルでウェイトを付けたスペキュラ反射コンポーネントを、屈折するスペキュラ透過コンポーネントの上に重ねてから適用することになります。中空のガラス球体(ヘリコプターの操縦室や石けんの泡)を作成する場合は、同様のフレネルでウェイト付けした反射コンポーネントを、透明コンポーネントの上に適用します。この 2 つの違いは、mia_material で thin_walled パラメータを使用する場合と似ています。
mia_material の半透明と基本的に同じものとして実装されます。
"mila_diffuse_transmission" (
color "tint" default 1 1 1,
scalar "roughness" default 0,
scalar "quality" default 1.0, #: min 0 softmax 2.0
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
これはフェース上で拡散透過だけを実行する非常にシンプルなシェーダです。後面からのライトが貫通する「薄い」ジオメトリでのみ有効です。
シェーディングに別の色を追加できサーフェスから放射が起きているかのような効果が得られます。
"mila_emission" (
color "tint" default 1 1 1,
scalar "intensity" default 10
)
これは、定数を追加するだけの非常にシンプルなシェーダですが、結合可能な方法で追加します。それ以上複雑な処理は行わず、FG がオンの場合、「放出された」光の選択だけが行われます。
これは、サブサーフェス散乱の新しい実装です。レンダリングしたときの外観が misss_fast_shader2 に似ていますが、ライト マップは使用していません。
古い SSS シェーダでライトマップを使用すると、以下に示す複数の理由で問題が発生します。
このサブサーフェス散乱(SSS)シェーダは、「遅延評価」という手法を使用しています。この手法は、レンダリング時にすべてのコアがアクセスできる再充填可能なバッファ内に、光を一時的に保存(キャッシュ)します。したがって、同じ光を(バッファ サイズ超過のため) 2 度計算する必要がある場合であっても、それを複数のコアで並列処理することができます。このため、古いシェーダでも計算済みのライトマップを使えば、ライトマップ計算後の処理が速くなる可能性はありますが、多くの場合はこれらの新しい SSS シェーダ(同じ情報をオンザフライで計算する)のほうが、すべてのコアを適切に活用できるため、最終的な処理を早く終わらせることができます。
このため、すべてのパラメータは、ライト マップとシェーディング フェーズに分割されるのではなく、古い misss_fast* シェーダの動作と同じように、1 つのシェーダ内に存在することになります。
現在ではほとんどの場合、このシェーダは SSS を実行するために優先される方法で、レイヤ化、特にスキン レンダリングを効率的に実行する場合は、一般的に古い misss_fast* シェーダ セットから移行することをお勧めします。詳細は、「チュートリアル」ページを参照してください。
"mila_scatter" (
color "front_tint" default 1.0 1.0 1.0,
scalar "front_weight" default 1.0,
vector "front_radius" default 20 10 5,
color "front_radius_mod" default 1 1 1,
color "back_tint" default 1.0 1.0 1.0,
scalar "back_weight" default 1.0,
vector "back_radius" default 20 10 5,
color "back_radius_mod" default 1 1 1,
scalar "back_depth", # unassigned (zero) means "same as radius"
scalar "sampling_radius_mult" default 2.0,
scalar "light_storage_gamma" default 0.75,
scalar "scale_conversion" default 1.0,
integer "resolution" default 2,
scalar "quality" default 1.0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
新しいシェーダでも、古い misss_fast* シェーダと同じ、「前面」と「後面」への分割が使われています(「前面」と「後面」の詳細については、「サブサーフェス」ライブラリのマニュアルを参照してください)。ただし、日常的なほとんどのケースではこれらを同じ値に設定するでしょう。スキャッタリングの配色は現在、色ごとのスキャッタリング半径を使って実行されます。そのため、たとえば、赤は自動的により遠くにスキャッタされます。つまり、「後面の」赤いスキャッタリングは手動で作成するのではなく、自動的に発生するということです。<&p>
これは、このシェーダが今でも、スクリーン ベースの座標空間で本質的に動作することも意味します。新しいパラメータの動作は「物理的な」スキャッタリングに非常に近くなりましたが、このシェーダはなお「トリック」に近いもので、物理的に完全に正確というよりは、視覚的に非常にリアルなものといえます。
パラメータを以下に示します。