指定されたカラーの反射レイを投影し、結果を入力カラーとマージします。これは、イルミネーションを提供するベース シェーダに反射のエフェクトを追加する場合に、他のベース シェーダによって追加された屈折や透明度と組み合わせるなどして使用できます。反射レイを投影できない場合(トレース深度が超過している、反射レイによって呼び出されるはずのシェーダが失敗する、 notrace パラメータが設定されているなど)は、環境が設定されていればこれをサンプリングします。
color "mib_reflect" (
color "input",
color "reflect",
boolean "notrace")
屈折率付きで指定されたカラーの屈折レイを投影し、結果を入力カラーとマージします。屈折率は、mib_refraction_index などの別のベース シェーダを使用して計算することもでき、このベース シェーダは再び適切な状態変数に格納されます。これは、イルミネーションを提供するベース シェーダに屈折エフェクトを追加する場合に使用します。
color "mib_refract" (
color "input",
color "refract",
scalar "ior")
指定されたカラーの透明度レイを投影し、結果を input カラーとマージします。これは先ほどの関数で屈折率を 1 とした場合と似ています。
color "mib_transparency" (
color "input",
color "transp")
指定されたカラーのレイを続行し、結果を入力カラーとマージします。目的は、現在の交差が存在しないかのようにレイを継続させることです。ボリューム計算に使用されるトレース深度、レイのタイプ、距離は変更されません。典型的な用途としては、展示室の壁です。展示室の外部にカメラを設置した場合に、展示室の壁が無視されるようにします。
color "mib_continue" (
color "input",
color "transp")
指定された強度の透明度レイを投影し、結果を入力カラーとマージします。先ほどの機能と似ていますが、透明度の代わりに不透明度が与えられます。不透明度は 1.0 - transparency と定義されます。
color "mib_opacity" (
color "input",
color "opacity")
屈折の一種で、追加の鏡面反射(スネルの法則)を持ちます。このシェーダは誘電性マテリアルの屈折のみを担当します。ハイライトは他のイルミネーション ノードに委ねられます。
color "mib_dielectric" (
color "input",
color "absorb",
scalar "refract",
scalar "ior")
color "mib_volume" (
color "color",
scalar "max",
boolean "lightrays")
レイ マーチャは、所定のレイのポイントからの光線を投影し、光源からボリュームを通過する光に対する、ボリュームの影響を求めるテクニックです。mi_sample_light のようなシェーダ インタフェース機能を使用する代わりに、タイプ shader の入力パラメータとして与えられたシェーダを呼び出します。レイ マーチングではまず、レイの始点と終点の間の一定の間隔のポイントを呼び出し、次いでポイントとポイントとの間を適宜さらに分割します。この分割は、2 つの隣り合ったサンプルが与えるカラーが所定のコントラストしきい値より小さければ、所定の分割限界に到達するまで続行されます。最終的にウェイト付けされた和が返されます。
color "mib_ray_marcher" (
shader "shader",
scalar "distance",
integer "num",
integer "subdiv",
color "contrast")
ジオメトリのどちらの面に当たるかによって、1 つまたはもう一方の入力カラーを選択します。これは通常、別の 2 つのマテリアル シェーダをフロントとバックのパラメータに割り当てて、多重化マテリアル シェーダとして用いられます。
color "mib_twosided" (
color "front",
color "back")
レイが、ヒットしたオブジェクトに入射するか出て行くかを、親のレイのスキャンに基づいて決定します(シーン内に先端の 1 つの軸だけに位置合わせされたコーンなどの不安定なジオメトリが含まれている場合は信頼性に欠けるため、法線ベクトルを基準にしない)。屈折比のインデックス(出て行くレイの屈折を入射の屈折で除算したもの)が返されます。この影響で、入射の屈折インデックスと出て行く屈折インデックスはいずれもその状態で(それぞれ ior_in および ior に)格納され、レイが進入する場合は現在のボリュームシェーダが屈折ボリュームになります。
struct {
scalar "ior",
boolean "enter"
} "mib_refraction_index" (
scalar "mtl_ior")
このセクションで説明するシェーダは、光沢のある(ブラーがかかった)反射および屈折を生成する場合に使用します。これらのシェーダと物理 DGS シェーダとのパフォーマンスおよび有用性の相違点をまとめると、以下のようになります。
DGS シェーダは、イメージ全体のオーバー サンプリングによって(パフォーマンスの低下を伴いながらも)魅力的なブラーに使用するサンプルを平均化するために、反射および屈折に使用する単一の光沢のレイを放出します。すべてのレイは新しい独立したサンプルです。
一方、mib_glossy_* シェーダは複数の光沢のレイをサンプリングし、イメージ全体ではなく、光沢のあるサーフェス上でのみオーバーサンプリングを発生させます。サンプルは mental ray の厳密なサンプリング エンジンを使用して作成されるため、サンプル数が同じでも、「より外観の良い」ブラーを作成可能な、より魅力的なサンプル パターンを作成することができます。

上の図は samples 0 1 を使用してレンダリングしたもので、左側の図では、粗い結果がはっきりと見えます。滑らかな結果を得るためには、イメージ全体のサンプリングを増加する必要があります。一方、mib_glossy_* は光沢のあるサーフェスのオーバーサンプリング(この例では 8 サンプル)を処理し、光沢のあるサーフェスそのものだけに適用します。
反射の場合は厳密に言うと非物理ですが、mib_glossy_* シェーダでは反射レイおよび屈折レイの到達する距離を制限することができます。このため、距離がある反射/屈折オブジェクトによって発生するイメージ ノイズを排除し、パフォーマンスを大幅に改善することができます。

mib_glossy_* シェーダの目的の 1 つに、遠方にあるオブジェクトをフィルタリングし、マテリアル(屈折の場合)または環境(反射)と置き換えることによって、遠くのイメージ をあまり詳細にしないということがあります。しかし、たとえば環境のサンプリングからの過度のノイズを回避するために、反射シェーダは意図的に環境を単一サンプリングして(また事前にブラーをかけておいた環境を明示的に渡されることによって)ノイズを除去することができます。
シェーダは明示的に渡された UV ベクトルを使用して光沢のある異方性反射/屈折を行うことができますが、ベクトル自体が失われている(0,0,0 に設定されている)場合は、検知したベクトルについてシェーダ自身が計算を試みます。
DGS シェーダはスペキュラの反射方向または屈折方向を計算し、 shiny パラメータによって決定される範囲内でこの方向を摂動させます。一方、 mib_glossy_* シェーダは、反射または屈折の前に、サーフェスにマイクロファセットが存在するかのように光沢をシミュレートします。つまり、反射方向または屈折方向は、法線ベクトルを実際に摂動させ(微細なレベルで粗いサーフェスをシミュレートして)、変更後の法線に基づいて新しい反射方向または屈折方向を計算することによって、計算されます。
この結果として異なる結果が生じ、光沢がビュー方向に依存することになります。このことは注意が必要です。たとえば、床における反射の光沢パターンは垂直方向に引き伸ばされます。これは、日没時に太陽光が水面に反射すると、太陽光が垂直に伸びていくように見えるのと同じエフェクトです。

反射マテリアルのほとんどは、角度が浅いほど反射量が多く、透明マテリアルは正対したときのほうがより透過して見えます。この反射と透過の再均衡化は「フレネル エフェクト」として知られています。これらのシェーダでは、「エッジ」(浅い視射角)と「ベース」(正対)に異なるウェイトを設定して、このエフェクトをエミュレートすることができます。 mib_glossy_* シェーダでは、反射全体のグローバルなウェイト付けではなく、サンプルごとにこのエフェクトの計算を行うことにより、いっそうリアルさを向上しています。

右のイメージのエッジ(浅い視射角のサーフェス)における反射量が左のイメージよりも多いことが見て取れます。
mib_glossy_* シェーダには、「擬似色収差」の量を設定する dispersion パラメータがあります。このエフェクトは物理的に正確なものではなく、現実の現象をエミュレートするものに過ぎません。
光沢のある反射に使用するシェーダです。シェーダに接続されているベース マテリアルに光沢のある反射を追加します。
color "mib_glossy_reflection" (
shader "base_material",
color "reflection_color",
scalar "max_distance",
scalar "falloff" default 2.0,
color "environment_color",
scalar "reflection_base_weight" default 0.2,
scalar "reflection_edge_weight" default 1.0,
scalar "edge_factor" default 5.0,
shader "environment",
boolean "single_env_sample" default true,
integer "samples" default 16,
scalar "u_spread" default 0.5,
scalar "v_spread" default 0.5,
vector "u_axis",
vector "v_axis",
scalar "dispersion" default 0.0,
array color "spectrum"
)
apply material, texture
version 3
このシェーダは mib_glossy_reflection と似ていますが、いくつかの相違点があります。これは屈折を扱うため、環境ではなく「deep material」が存在します。

color "mib_glossy_refraction" (
shader "top_material",
shader "deep_material",
shader "back_material",
boolean "render_reverse_of_back_material",
color "refraction_color",
scalar "max_distance",
scalar "falloff" default 2.0,
scalar "refraction_base_weight" default 1.0,
scalar "refraction_edge_weight" default 0.2,
scalar "edge_factor" default 5.0,
scalar "ior" default 1.0,
integer "samples" default 16,
scalar "u_spread" default 0.5,
scalar "v_spread" default 0.5,
vector "u_axis",
vector "v_axis",
scalar "dispersion" default 0.0,
array color "spectrum"
)
apply material, texture
version 2

Copyright © 1986, 2015 NVIDIA ARC GmbH. All rights reserved.