オクルージョンは、グローバル イルミネーションのエフェクトをシミュレートするための高速かつ簡易な方法です。オクルージョンとは、あるポイントの上部が他のジオメトリによって覆われている領域の範囲です。オクルージョンは、あるポイント上の半球形の領域内部でいくつかのプローブ レイをトレースし、この領域がどの範囲でブロックされているかをテストすることによって得ることができます。
このシェーダの一般的な用途はアンビエント オクルージョンです。アンビエント オクルージョンでは、このシェーダを使用してアンビエント ライティング(拡散環境マップ シェーダから派生)の成分がスケールされます。この用途では、シェーダを mib_illum_phong などのマテリアルの ambient パラメータに割り当てて使用します。
オクルージョンのもう 1 つの用途は反射オクルージョンです。反射オクルージョンでは、このシェーダを使用して反射マップからの成分がスケールされます。この用途では、シェーダは一般に環境またはマテリアルの反射シェーダスロットにプラグされ、実際の環境マップ イメージは bright パラメータにプラグされます。また、オクルージョン シェーダの戻り値が反射マップ シェーダの strength アトリビュートを調節できるようにする方法もあります。
3 つ目の用途は、外部での合成に使用するファイルの作成です。オクルージョン シェーダは、シーン内の個々のオブジェクトのプライマリ マテリアル シェーダとして割り当てられます。この出力を使用して他のレンダー パスを調節し、ポストプロダクションで適切な合成を得ることができます。
このシェーダはライト シェーダとして使用することもできます。光源は user 型のエリア ライトでなくてはなりません。これにより、組み込みのオクルージョンを備えた「アンビエント」光源を生成することができます。
このシェーダは mental ray によって提供される基本レイ トレーシング機能にのみ依存し、ファイナル ギャザリングやグローバル イルミネーションなどの高度な計算を使用したり、利用したりすることはありません。
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,
)
version 2
apply texture, light
このシェーダは mib_amb_occlusion の代替バージョンで、類似した機能を備えていますが、mental ray に組み込まれているアンビエント オクルージョン機能を完全に利用するものです。レンダリング パフォーマンスが最適化されているほか、ambient occlusion cache を有効にすると、この機能を活用することができます。
このシェーダはライト シェーダとしては使用できないことに注意してください。
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
)
version 1
apply texture
mental ray のファイナル ギャザリング アルゴリズムでは、必ずスカラー オクルージョン値が計算されます。このユーティリティ シェーダはこの値を単にグレースケールの結果として返します。
color "mib_fg_occlusion" (
color "result_when_fg_is_off" default 1 1 1 1
)
version 1
「傾向法線」は、サーフェス ポイントからオクルージョンされない方向を向いた平均方向ベクトルです。まったく遮蔽されないサーフェスの場合は法線ベクトルと同じですが、他のジオメトリによって遮蔽されるサーフェスの場合は遮蔽ジオメトリが最も少ない方向を示します。傾向法線はアンビエント オクルージョンのアクセラレーション テクニックとして使用され、短いレンダリング時間で、環境で照明されたグローバル イルミネーションやファイナル ギャザリングのような外観の、非常に高速なレンダリングが可能です。
mib_amb_occlusion シェーダによって行われるアンビエント オクルージョンは、プローブ レイを数多く投影することによってサーフェス ポイントをどの範囲でオクルージョンするかを決定するレイ トレーシング テクニックです。この処理の速度は光線の数(samples)、光線の到達距離(max_distance)、シーンの複雑さによって異なります。
アニメーション(または同じシーンの複数のビュー)をレンダリングする場合は、移動しないオブジェクト、シェイプが変更されないオブジェクト、付近に移動するオクルージョンするオブジェクトが存在しないオブジェクトはすべて、どのフレームでも同じ結果になります。このため、アンビエント オクルージョン ソリューションを最初のレンダリング パスで一度だけ「ベイク」(ファイルへのレンダリング)し、以後のレンダリング パスでは任意のフレーム数だけこの結果を再利用するようにすると、パフォーマンスが大幅に向上されます。また、平均的なオクルージョンされていない方向(傾向法線)をテクスチャに「ベイク」すると、環境に基づいてオブジェクトをライティングするという処理全体が(単一の光線をトレースすることなく)この 2 つ目のレンダリング パスに移動されます。
アンビエント オクルージョン シェーダ mib_amb_occlusion で output_mode パラメータを 2、3、4 のいずれかに設定すると、傾向法線と、x が赤、y が緑、z が青であるカラーとしてエンコードされたベクトルが返されます。occlusion_in_alpha が有効な場合は、スカラー オクルージョン値はアルファ チャンネル内に返されます。このカラーは、たとえば、mib_lightmap_write を使用して mib_amb_occlusion を input パラメータに接続してレンダリングするなどの方法でテクスチャにベイクすることができます。
テクスチャ ファイルが生成されたら、mib_bent_normal_env をサーフェス シェーダに割り当てることができます(たとえば、mib_illum_phong の ambient パラメータに割り当てて、mib_bent_normal_env の bent_normals パラメータに配置されている、ベイク処理された傾向法線テクスチャに基づいてオブジェクトをライティングする環境をルックアップします)。
こうすると、極めて少ないオーバーヘッドでリジッド ボディにグローバル イルミネーションに似たエフェクトをシミュレートすることができ、特にアニメーションでの使用に適しています。このテクニックは、フレームごとにオクルージョン、シェイプ、法線が異なるような変形可能なオブジェクトでは動作しません。変形可能なオブジェクトについては、オクルージョン シェーダの出力をベイクせずに、オクルージョン シェーダを直接適用する方が良いでしょう。
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
)
Copyright © 1986-2009 by mental images GmbH