Statistical Acceleration for Animated Global Illumination

by syoyo

Mark Meyer, John Anderson
Statistical Acceleration for Animated Global Illumination
SIGGRAPH 2006.
http://graphics.pixar.com/

It’s qute simple and easy to implement. So I started to implement this method.
For now, I could get basis vector images.

sequence of images(thumb)
The sequence of Noisy images

seq of images(thumb) 
Basis images(Eigen vectors) without scaling by eigenvalues.
Basis 0 gets smoother solution than noisy solution.

Next to do: Project noisy images to basis vector to get final result
Discussion: How about Using bilateral/trilateral filtering for spatio-temporal filtering?

時間軸でフィルタリングすることでノイズを減らす手法。
6 ページとシンプルで、実装も簡単です。

基本的なアルゴリズムは、
– 低サンプル数でレンダリングし、ノイズのある画像のシーケンスを得る
– PCA(主成分分析)により基底ベクトルを求める
– 基底ベクトルに、ノイズのある画像を射影して最終的にノイズの低減されたレンダリング結果を得る
を行います。

ビデオを見ると分かりますが、この手法の有益なところは、
空間的なノイズが消えるということよりも、
時間的なノイズフリッカーが消えるほうにあると言えると思います。

ということで、PCA を行って基底ベクトルの画像を得るところまで実装してみました。

http://lucille.atso-net.jp/svn/angelina/arch/statistial_filtering/

PCA のために、基底画像(固有ベクトル)を得るのには、
lapack の svd(特異値分解) を行う関数を利用しました。
基底画像の最初のものでは、すでにある程度平滑化されているのが見て取れます。

今回は光源もなにも変化していないので、基底 0(左上)で十分近似できるために、
基底 0 以外の基底画像はほとんどゼロに近くなっています。
(上記の基底画像は対応する固有値でスケーリングしていません。
基底 0(左上) 以外の固有値はほぼゼロなので、
実際にはスケーリングすると真っ黒の画像になります)

時間軸でフィルタリングというと、バイラテラルフィルタやトリラテラルフィルタも使えそうな感じですが、
これとの比較がどうなのかが気になるところです。

論文を見る限り、この手法は Pixar のカーズ(違うほうではありません)で使われた手法のようですね。

Abstract 日本語訳

大域照明(global illumination)は、アニメーションに非常に重要な視覚的効果を与えます。しかしその計算は高価なので、実際に利用するとなると制限がありました。

本論文では、アニメーションシーケンスにおいて、確率的レイトレーシングを用いた間接照明の計算を高速化する、実装が簡単な技法を提案します。

各サンプル点において、少数のサンプルレイを用いてすばやく計算するけれども、ノイズのかかった解を得ることからまず始めます。これらのノイズがかった解の時間軸での変化を利用して、スムースな基底を生成します。そして最後に、ノイズがかった解をこれらのスムースな基底に射影することで、最終的な解を得ます。

結果として得られるアニメーションでは、空間的および時間的なノイズを大きく減らすことができます。また計算コストは、元のノイズかがっていて低サンプルな計算のときとほとんど変わりません。

Advertisements