グローバルイルミネーション(22)

前回の続き。

グローバルイルミネーションのアルゴリズムは別にパストレーシングが唯一では無い。
様々な手法がこれまでも生み出されている。

これらはパストレーシングの弱点を克服する。

next Event Estimationの実施。
※これは実装済
これで小さな光源でも明示的にサンプリングするので品質が一気に向上する。

双方向パストレーシング
視点からだけでなく光源からも明示的にサンプリング。next Event Estimationを一般化したようなもの。

しかし、これらでも例えば前回書いたようなケースとか遮られた位置にある光源が隙間や穴から光が漏れてくるようなケースでは依然として弱点だろう。
つまり、ランダムにレイを飛ばしても滅多に寄与が取れないようなケースが弱点。

これが決定打!!(と言わんとするような解説を目にする)
確かに様々なケースにうまく対応できる。

しかし、、なんか気持ち悪い。
アルゴリズムが、、、美しくない(簡素では無い)。
実装が面倒、メモリ沢山食いそう、、、
実装できても様々な困難がありそう、、、

一方、パストレーシングはアルゴリズムが美しい(簡素)。
それと作り直しになるのがイヤ。
※あ、これはあくまで個人的な感想なので。

じゃパストレーシングでなんとか弱点克服(ある程度でもいいから)できないか?

メトロポリス光輸送(MLT)!!
計算したパスを変異させて光があたりそうな箇所を重点サンプリング。
SIGGRAPH 1997 で Veach and Guibas 。

しかし、論文読んでも実装しようという気が起きない代物。
マルコフ連鎖モンテカルロ法( Markov Chain Monte Carlo, MCMC) で元々は物理でつかわれていたらしい。パスを毎回最初から全部計算するかわりにパスの一部に変異(mutation)を与えることで新しいパスを生成する。

あーー。
そしてさらに進んだ考え方が

Primary Sample Space MLT
これはオリジナルのMLTよりロバスト
ロバストロバストとは「強靭さ」、「頑健さ」欠陥やエラーが生じない。

いやー、さらにというかもっと難しそう。
オリジナルの MLT では、パス空間(path space, 経路空間)で変異(mutation)を行う。それを単位超立方体の空間でやるらしい。

論文「A Simple and Robust Mutation Strategy for the Metropolis Light Transport Algorithm」を見てみる。

あ、これは実装できる!!。
※参考コードが載ってる。

しかも今のパストレースはそのまんま使える!!
今のパストレースでサンプリングしたりしているときに使っている乱数を論文で書かれている
PrimarySampleで置換するだけ。
つまり、このPrimarySampleが乱数の役割をする。Primary Sample Space がn次元超立方体の乱数空間でパス空間(path space, 経路空間)で変異させる代わりにこの乱数空間で変位させているという事。だから乱数のばら撒き方をこのPrimarySampleで置換してやればPrimary Sample Space MLTになる、、、、
ちょっとやってみる事にしよう。

追記)
これは誤解をまねきそうな言い方だ。
ちなみに上で書いているようなn次元超立方体がとうとかという専門的な意味は理解していない。けど「こういうコード」という事が書いてあるのでそれをパクッてみるという意味。