Making Radiance and Irradiance Caching Practical: Adaptive Caching and Neighbor Clamping

by syoyo

Jaroslav Křivánek, Kadi Bouatouch, Sumanta Pattanaik, and Jiří Žára
Making Radiance and Irradiance Caching Practical: Adaptive Caching and Neighbor Clamping
EGSR 2006.
http://moon.felk.cvut.cz/~xkrivanj/

より実践的な放射照度キャッシュおよび放射輝度キャッシュ手法の提案です。

オリジナルの Ward の放射照度キャッシュ

http://radsite.lbl.gov/radiance/papers/sg88/paper.html

は、実際には実装してみると、photonmap 本のようにきれいにはいかず
壁のまわりでしみのようなアーティファクトが現れたり、
まず放射照度キャッシュを計算するパスと、その後の補間のパスへと 2 パスのアルゴリズムにしないと誤差が大きかったり、
それでもスキャンライン順でキャッシュ点を計算するのもよくないので production rendering ではある程度ランダムな順番で
キャッシュ点を選ぶのを提案しているなど、実際に実装する上ではいろいろと問題がありました。
(jensen も ward の式そのままではなく、エラー関数などにいろいろ修正を加えていたようです)

本論文では、キャッシュ点をアダプティブに挿入してき補間の誤差を少なくする方法と、
また壁などの部分で光のもれ(light leaking)によるアーティファクトを防ぐ
neighbor clamping という手法を提案しています。

特に neighbor clamping による壁のしみのようなアーティファクトが消えるという効果は
大きいと思いますが、全体的にはまだ irradiance cache らしいマッハバンドのような
低周波なアーティファクトが見受けられます。
(ここらへんはキャッシュ点を増やしたり、許容誤差をきつくすれば改善するのかな?)

あとは、キャッシュ系特有の問題として、並列計算に向かないので並列レンダリングするときに
ちょっと実装が面倒になるということですね。
画面分割(タイル分割)での並列レンダリングを行うとした場合、
タイル内だけでキャッシュの計算と evaluate をしてもよいのですが、タイル間の境界で
シェーディングの不連続性が生じ易そうです。

Advertisements