オクルージョン

アンビエント オクルージョン

オクルージョンは、グローバル イルミネーションのエフェクトをシミュレートするための高速かつ簡易な方法です。オクルージョンとは、あるポイントの上部が他のジオメトリによって覆われている領域の範囲です。オクルージョンは、あるポイント上の半球形の領域内部でいくつかのプローブ レイをトレースし、この領域がどの範囲でブロックされているかをテストすることによって得ることができます。

このシェーダの一般的な用途はアンビエント オクルージョンです。アンビエント オクルージョンでは、このシェーダを使用してアンビエント ライティング(拡散環境マップ シェーダから派生)の成分がスケールされます。この用途では、シェーダを mib_illum_phong などのマテリアルの ambient パラメータに割り当てて使用します。

オクルージョンのもう 1 つの用途は反射オクルージョンです。反射オクルージョンでは、このシェーダを使用して反射マップからの成分がスケールされます。この用途では、シェーダは一般に環境またはマテリアルの反射シェーダスロットにプラグされ、実際の環境マップ イメージは bright パラメータにプラグされます。また、オクルージョン シェーダの戻り値が反射マップ シェーダの strength アトリビュートを調節できるようにする方法もあります。

3 つ目の用途は、外部での合成に使用するファイルの作成です。オクルージョン シェーダは、シーン内の個々のオブジェクトのプライマリ マテリアル シェーダとして割り当てられます。この出力を使用して他のレンダー パスを調節し、ポストプロダクションで適切な合成を得ることができます。

このシェーダはライト シェーダとして使用することもできます。光源は user 型のエリア ライトでなくてはなりません。これにより、組み込みのオクルージョンを備えた「アンビエント」光源を生成することができます。

このシェーダは mental ray によって提供される基本レイ トレーシング機能にのみ依存し、ファイナル ギャザリングやグローバル イルミネーションなどの高度な計算を使用したり、利用したりすることはありません。

mib_amb_occlusion
color "mib_amb_occlusion" (
    integer         "samples"            default 16,
    color           "bright"             default 1 1 1 1,
    color           "dark"               default 0 0 0 0,
    scalar          "spread"             default 0.8,
    scalar          "max_distance"       default 0,
    boolean         "reflective"         default off,
    integer         "output_mode"        default 0,
    boolean         "occlusion_in_alpha" default off
    # Version 2 parameters
    scalar          "falloff"            default 1.0,
    integer         "id_inclexcl"        default 0,
    integer         "id_nonself"         default 0)
samples
送出されるプローブ レイの数です。プローブ レイの数が多いほど、スムーズなイメージが得られます。オクルージョン マッピングは、緻密に調節されたファイナル ギャザリングやフォトンほど滑らかにはなりませんが、計算の負荷は軽くなります。
bright
遮蔽(オクルージョン)するオブジェクトが見つからない場合に使用されるカラーです。
dark
完全なオクルージョンが発生した場合に使用されるカラーです。実際には黒に設定されることがほとんどです。部分的なオクルージョンでは、 bright カラーと dark カラーを段階的にミックスしたものが返されます。
spread
サンプリングの対象とする、ポイントよりも上にある半球の領域の大きさを定義します。この値はサンプリング方向の周囲のコーンを定義します。このコーンは、値が小さい場合は狭く、大きい場合は広くなります。範囲は 0.0 (単一方向を示すコーン)から 1.0 (半球全体を覆うコーン)までです。
max_distance
この範囲内でジオメトリのプローブを行います。ゼロの場合は、シーン全体がサンプリングされます。ゼロ以外の場合は、この距離内にあるオブジェクトのみが考慮され(サンプリング処理にかかる時間がずっと短縮されます)、範囲外にあるオブジェクトはまったく遮蔽されず、距離がゼロに近づくにつれて遮蔽の度合いが高くなります。
reflective
オフにした場合は、サンプリングはサーフェス法線の周囲のコーン領域で実行されます。reflective をオンにした場合は、サンプルは反射方向の周囲に分散されます。反射マッピングのリアルさを大幅に向上する反射オクルージョンを生成します。
output_mode
返されるカラーを定義します。0 の場合は標準のオクルージョンの動作、1 の場合は環境サンプリングを有効にします。これにより、シェーダの動作が若干変更されます。オクルージョンについては方向がプローブされるため、現在の環境もその方向のオクルージョンの程度に基づいてサンプリングおよびウェイト付けされます。モード 1 では、この関数の出力は収集およびウェイト付けされた環境カラーに bright カラーが乗算されたもので、使い勝手のよいように dark カラーが追加されます。
output_mode を 2 に設定すると、傾向法線が有効になります。平均的なオクルージョンされていないワールド空間法線の方向は、赤が x、緑が y、青が z であるカラーとして計算され、エンコードされた上で返されます。output_mode を 3 に設定した場合は、法線がカメラ座標空間内でエンコードされる点を除けば 2 と同じです。
occlusion_in_alpha
オンにした場合は、output_mode の設定にかかわらず、返されたカラー アルファ コンポーネントにスカラー オクルージョン値が入ります。他のカラー コンポーネントはそれ以前と変わりありません。
falloff
作用するのは max_distance がゼロ以外の場合のみで、オクルージョンが距離によって減衰される速度を定義します。技術的には、0 から max_distance までの正規化された距離に適用されるべき関数です。既定値の 1.0 ではリニア減衰になります。1.0 よりも小さい値では、より高速に減衰されます。実際には、値が低いオクルージョンは短距離の場合に(小さいコーナーや隙間で)強くなり、長い距離の場合には弱まります。
id_inclexcl
シェーダによって考慮されるオクルージョンに含める(または除外する)オブジェクト インスタンス ラベル番号を定義します。このパラメータを 0 に設定すると効果がなくなります。正の整数にすると、この番号に一致するラベルを持ったオブジェクト インスタンスのみでオクルージョンが発生します。負の整数では条件が逆転され、この番号に一致するラベルを持ったすべてのオブジェクト インスタンス以外のすべてのオブジェクトが含まれます。
id_nonself
セルフオクルージョンを行わないオブジェクトを決定するオブジェクト インスタンス ラベルであるという点は id_inclexcl と類似しています。このパラメータを 0 に設定すると効果がなくなります。正の整数に設定すると、そのラベルを持ったすべてのオブジェクトは同じラベルを持った他のオブジェクトをオクルージョンの対象としなくなります。このパラメータは、バックグラウンド フォト内の既存のジオメトリを表す「マット」オブジェクトまたは「スタンドイン」オブジェクトで使用すると便利です。こうしたオブジェクトの間のオクルージョンはバックグラウンド フォトにすでに存在するからです。「スタンドイン」バックグラウンド ジオメトリによってフォアグラウンドに投影されるオクルージョンおよびフォアグラウンドからバックグラウンド ジオメトリに投影されるオクルージョンの両方が必要で、バックグラウンドからバックグラウンドへのオクルージョンだけを抑制する必要があるため、 id_inclexcl を使用した単純な除外は使用できません。

高速オクルージョン

このシェーダは mib_amb_occlusion の代替バージョンで、類似した機能を備えていますが、mental ray に組み込まれているアンビエント オクルージョン機能を完全に利用するものです。レンダリング パフォーマンスが最適化されているほか、ambient occlusion cache を有効にすると、この機能を活用することができます。

このシェーダはライト シェーダとしては使用できないことに注意してください。

mib_fast_occlusion
color "mib_fast_occlusion" (
    integer "samples"            default 0,
    color   "bright"             default 1 1 1 1,
    color   "dark"               default 0 0 0 0,
    scalar  "spread"             default 0,
    scalar  "spread_exp"         default 1,
    scalar  "max_distance"       default 0,
    boolean "reflective"         default off,
    integer "output_mode"        default 0,
    boolean "occlusion_in_alpha" default off,
    integer "cache_points"       default 0)
samples
送出されるプローブ レイの数です。プローブ レイの数が多いほどスムーズなイメージが得られます。アンビエント オクルージョン キャッシュが有効な場合は、このアトリビュートは無視されます。キャッシュの補間に使用するポイントの数は cache_points アトリビュートによってコントロールされます(以下参照)。
bright
オクルージョンするオブジェクトが存在しない場合に使用されるカラーです。dark は完全なオクルージョンが発生する場合に使用されるカラーです。実際には黒に設定されることがほとんどです。部分的なオクルージョンでは、2 つのカラーを段階的にミックスしたものが返されます。
spread
サンプリングの対象とする、ポイントよりも上にある半球の領域の大きさを定義します。mib_amb_occlusion シェーダとは異なり、この値は法線と最大方向との間の角度の余弦です。値の範囲は 0.0 (半球全体を覆うコーン)から 1.0 (単一方向を示すコーン)までです。
spread_exp
スプレッド角度の指数です。サンプリング ポイントから投射された光を、法線の周囲にどれほど集中させるかをコントロールします。この値が大きいほど法線の周囲の密度は高くなります。
現在は mental ray ではサポートされていませんが、将来の機能拡張に備えて用意されています。
max_distance
この範囲内でジオメトリのプローブを行います。ゼロの場合は、シーン全体がサンプリングされます。ゼロ以外の場合は、この距離内にあるオブジェクトのみが考慮され(サンプリング処理にかかる時間がずっと短縮されます)、範囲外にあるオブジェクトはまったく遮蔽されず、距離がゼロに近づくにつれて遮蔽の度合いが高くなります。
reflective
オフにした場合は、サンプリングはサーフェス法線の周囲のコーン領域で実行されます。  reflective をオンにした場合は、サンプルは反射方向の周囲に分散されます。reflective をオンにした場合は、サンプルは反射方向の周囲に分散されます。反射マッピングのリアルさを大幅に向上する反射オクルージョンを生成します。
output_mode
返されるカラーを定義します。0 の場合は標準のオクルージョンの動作、1 の場合は環境サンプリングを有効にします。これにより、シェーダの動作が若干変更されます。オクルージョンについては方向がプローブされるため、現在の環境もその方向のオクルージョンの程度に基づいてサンプリングおよびウェイト付けされます。モード 1 では、この関数の出力は収集およびウェイト付けされた環境カラーに bright カラーが乗算されたもので、使い勝手のよいように dark カラーが追加されます。
  output_mode を 2 に設定すると、傾向法線が有効になります。平均的なオクルージョンされていないワールド空間法線の方向は、赤が x、緑が y、青が z であるカラーとして計算され、エンコードされた上で返されます。 output_mode を 3 に設定した場合は、法線がカメラ座標空間内でエンコードされる点を除けば 2 と同じです。
occlusion_in_alpha
オンにした場合は、 output_mode の設定にかかわらず、返されたカラー アルファ コンポーネントにスカラー オクルージョン値が入ります。他のカラー コンポーネントはそれ以前と変わりありません。
cache_points
アンビエント オクルージョン キャッシュ内の補間のためにルックアップする、アンビエント オクルージョン ポイントの数をコントロールします。アンビエント オクルージョン キャッシュが有効でない場合は、このアトリビュートは無視されます。この値が 0 の場合はアンビエント オクルージョン ポイントの数は mental ray の設定によって決定され、0 より大きい場合は現在のオブジェクトについてこの設定を上書きします。この値が 64 よりも小さい場合は、より詳細な結果を得ることができますが、アーティファクトが発生する可能性があります。この値が大きくなるほど、ぼやけたイメージが作成されます。

ファイナル ギャザリングを使用したアンビエント オクルージョン

mental ray のファイナル ギャザリング アルゴリズムでは、必ずスカラー オクルージョン値が計算されます。このユーティリティ シェーダはこの値を単にグレースケールの結果として返します。

mib_fg_occlusion
color "mib_fg_occlusion" (
color "result_when_fg_is_off" default 1 1 1 1
)
version 1
result_when_fg_is_off
ファイナル ギャザリングがオフの場合に戻り値になります。ファイナル ギャザリングがオンの場合は、オクルージョン値がグレースケール値として返され、パラメータは一切評価されないか、一切使用されません。
このため、mib_amb_occlusionresult_when_fg_is_off パラメータに接続すると、ファイナル ギャザリングがオンの場合には結果はファイナル ギャザリングによって計算されたオクルージョンとなり、ファイナル ギャザリングがオフの場合には mib_amb_occlusion によって計算されたオクルージョンとなります。

傾向法線

「傾向法線」は、サーフェス ポイントからオクルージョンされない方向を向いた平均方向ベクトルです。まったく遮蔽されないサーフェスの場合は法線ベクトルと同じですが、他のジオメトリによって遮蔽されるサーフェスの場合は遮蔽ジオメトリが最も少ない方向を示します。傾向法線はアンビエント オクルージョンのアクセラレーション テクニックとして使用され、短いレンダリング時間で、環境で照明されたグローバル イルミネーションやファイナル ギャザリングのような外観の、非常に高速なレンダリングが可能です。

mib_amb_occlusion シェーダによって行われるアンビエント オクルージョンは、プローブ レイを数多く投影することによってサーフェス ポイントをどの範囲でオクルージョンするかを決定するレイ トレーシング テクニックです。この処理の速度は光線の数(samples)、光線の到達距離(max_distance)、シーンの複雑さによって異なります。

アニメーション(または同じシーンの複数のビュー)をレンダリングする場合は、移動しないオブジェクト、シェイプが変更されないオブジェクト、付近に移動するオクルージョンするオブジェクトが存在しないオブジェクトはすべて、どのフレームでも同じ結果になります。このため、アンビエント オクルージョン ソリューションを最初のレンダリング パスで一度だけ「ベイク」(ファイルへのレンダリング)し、以後のレンダリング パスでは任意のフレーム数だけこの結果を再利用するようにすると、パフォーマンスが大幅に向上されます。また、平均的なオクルージョンされていない方向(傾向法線)をテクスチャに「ベイク」すると、環境に基づいてオブジェクトをライティングするという処理全体が(単一の光線をトレースすることなく)この 2 つ目のレンダリング パスに移動されます。

  output_mode パラメータをアンビエント オクルージョン シェーダ mib_amb_occlusion で 2、3、4 のいずれかに設定すると、傾向法線と、x が赤、y が緑、z が青であるカラーとしてエンコードされたベクトルが返されます。  occlusion_in_alpha が有効な場合は、スカラー オクルージョン値はアルファ チャネル内に返されます。このカラーは、たとえば、mib_lightmap_write を使用して mib_amb_occlusioninput パラメータに接続してレンダリングするなどの方法でテクスチャにベイクすることができます。

テクスチャ ファイルが生成されたら、mib_bent_normal_env をサーフェス シェーダに割り当てることができます(たとえば、 ambient パラメータ(mib_illum_phong 内)に割り当てて、 bent_normals パラメータに配置されている、mib_bent_normal_env のベイク処理された傾向法線テクスチャに基づいてオブジェクトをライティングする環境をルックアップします)。

こうすると、極めて少ないオーバーヘッドでリジッド ボディにグローバル イルミネーションに似たエフェクトをシミュレートすることができ、特にアニメーションでの使用に適しています。このテクニックは、フレームごとにオクルージョン、シェイプ、法線が異なるような変形可能なオブジェクトでは動作しません。変形可能なオブジェクトについては、オクルージョン シェーダの出力をベイクせずに、オクルージョン シェーダを直接適用する方が良いでしょう。

mib_bent_normal_env
color "mib_bent_normal_env" (
    color           "bent_normals"        default 0 0 0 1,
    boolean         "occlusion_in_alpha"  default on,
    color           "occlusion"           default 1 1 1,
    scalar          "strength"            default 0.2,
    shader          "environment",
    integer         "coordinate_space"    default 2,
    integer         "env_samples"         default 1,
    scalar          "samples_spread"      default 0.0,
    transform       "matrix"              default 1 0 0 0
                                                  0 1 0 0
                                                  0 0 1 0
                                                  0 0 0 1
)
bent_normals
オクルージョン シェーダによる傾向法線データ出力です。この出力をオブジェクトにベイク処理します。通常は mib_texture_lookup など、テクスチャ ルックアップを行うノードにアタッチされます。テクスチャの生成に使用されるテクスチャ マッピングは、ルックアップに使用されたものと同じものでなくてはなりません。
occlusion_in_alpha
スカラー オクルージョン値が「傾向法線」パスのアルファ チャネルにすでにベイク処理されているかどうかを指定します。この機能によって、使用するメモリの量がわずかに減少しますが、mental ray の OEM 統合の「bake to texture」(テクスチャへベイク)機能の多くでは、アルファ チャネルはベイクされません。
occlusion
まだアルファ チャネルにベイクされていない場合に使用する、個別のオクルージョン チャネルです。
strength
エフェクトの単純なスカラー乗数です。
environment
ルックアップする環境シェーダです。何も指定されていない場合は、マテリアルからの環境が使用されます。イメージ ノイズを回避するために、高解像度の詳細を含まない、高度にブラーをかけた個別の環境マップを使用するとよいでしょう。
coordinate_space
傾向法線の座標空間を定義します。
座標空間番号はアンビエント オクルージョン シェーダの output_mode パラメータ(2 はワールド空間、3 はカメラ空間、4 はオブジェクト空間)に一致します。
env_samples
環境マップから取得するサンプルの数です。通常は 1 つのサンプルで足りるような高度にブラーをかけた環境マップが使用されますが、ゼロ以外の値を設定することによってマルチサンプリングされた環境マップを使用することも可能です。
sample_spread
個々の環境サンプルで使用するスプレッド係数です。範囲は 0.0 (限りなく細い光線 -- 単一サンプリング)から1.0 (半球全体をサンプリング)までです。
matrix
coordinate_space が 1 である場合に法線データに適用される明示的な変換行列です。任意変換が可能です。

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