元記事:
blender.org - Approximate Ambient Occlusion
Approximate Ambient Occlusion
Approximate(近似) Ambient Occlusion が、従来のレイトレースを元にした物の隣に追加されました。この方法は本質的にノイズがなく、フレーム間でちらつきが発生しないため、特にアニメーションでの使用をターゲットとしています。
近似的な方法である所為で、すべてのタイプのシーンに適しているわけではなく、レンダリングは非常に高速ですが、いい結果を得るには更に少し調整が必要です。具体的にこの方法には、お互いが向き合い、同じ方を向いている二つの Face があるとき、結果的にオクルージョン(遮蔽)が多くなりすぎる傾向があります。
Peach のシーン。1440×810、Intel Core2Duo 3.0GHz 2スレッドでレンダリング、35.28秒
設定
Approximate Ambient Occlusion は World Buttons にある Ambient Occlusion パネルで、"Raytrace gather method" の代わりに "Approximate" を選択することで利用できます。
[wiki]-''Error'': エラーの許容範囲です。低い値で遅くなりますが、高品質になります。
-''Pixel Cache'': AO の結果をピクセルにキャッシュし、近隣のピクセルと補間しスピードアップを図ります。
-''Passes'': オーバーオクルージョン(訳注:遮蔽部分が重なり、暗くなりすぎる現象)を減らすための前処理のパスを行う数です。
-''Correction'': 簡略的なオーバーオクルージョン補正を行い、オーバーオクルージョンが起こっている領域の暗さを抑えます。
[/wiki]
パフォーマンスの理由により、現時点では Dupli 系で複製されたオブジェクトと、Strand プリミティブはオクルージョン処理がされません。
Strand もシェーディング時点ではオクルージョンが計算されないものの、前処理パスで親の表面上の参照用オクルージョンが計算されます。
また、Face は Normal の方向のみ遮蔽するため、Normal を外側に向けるよう注意して下さい。
実装
実装はポイントベースオクルージョンのコンセプトを元にしています。このテーマのいくつかの論文からアイデアを集約しています。
Dynamic Ambient Occlusion and Indirect Lighting [pdf]GPU Gems 2, Chapter 14, Michael Bunnell.
High Quality Ambient Occlusion
GPU Gems 3, Chapter 12, Jared Hoberock and Yuntao Jia.
Points Clouds and Brick Maps for Movie Productions
Point-Based Graphics, Chapter 8.4, Per H. Christensen.
この実装では、Face を一つの空間ツリー構造に集め、葉ノードには三角形を、そして枝ノードでは配下の三角形の集合を、
球面調和関数で擬似的に表現しています。
ピクセル毎のオクルージョン計算用に、このツリー構造で、ツリーの深層にある近隣のパーツと遠くのパーツが、配下の三角形の集合の近似を使用してトラバースされます。詳細は以下をご覧下さい。
Peach blog: Approximate ambient occlusion.
元記事:
blender.org - Approximate Ambient Occlusion