RainbowMaker

スペクトルを知るに当たって、 理論 G.I. 屋ではまずいと思い立ち、 real world での物理現象の振舞いを観察すべく、 分光の実験をしてみました。 David Dear, “RainbowMaker” Kikkerland Design, http://www.kikkerland.com/HO/1588.htm 太陽発電で下に付いているクリスタルが回る仕組みになっているので、 太陽の光が当たる窓などに貼り付けます。 (こんな感じ) すると… (白い背景は壁です) おぉ、部屋中に虹が! 光の波動性を感じるひと時です。 くるくる~ (クリスタルが回転するとミラーボールみたいに虹も回転します) くるくる~ 有意義な実験でした。

スペクトルレンダリング(Spectral Rendering)

最近は Maxwellrender がやっていることくらいはできなきゃまずいでしょ、 ということで、スペクトルレンダリングについて勉強しています。 スペクトルレンダリングについては、Sun 氏による博士論文が概観をつかむ 導入としてよいでしょう。 Yoilong Sun, Ph.D. thesis in computer science: “A Spectrum-Based Framework for Realistic Image Synthesis” http://www.cs.purdue.edu/homes/sun/ 同氏は、composite model と呼ばれるスペクトルの表現方法を提案しています。 通常スペクトルを表現する場合に考えられるアプローチとしては、 WinOSi のように波長をある区間で一様に区切ってサンプルすることです。 たとえば 380 – 780 nm の範囲の波長(だいたい人間の可視領域はここらへんにある) を現したいときに、サンプル数を 10 としたら (780 – 380) / 10 の区間ごとに区切って波長をサンプルします。 しかし、これだと実装は楽ですが、データサイズが冗長になってしまいますし、 シェーディングの計算量も分割数に応じて増えてしまいます。 また特定の波長に偏っている材質がある場合などに、 十分な精度を確保できないことがあります。 composite model では、 スペクトルをスパイク状のスペクトル分布となだらかなスペクトル分布に 分け、スパイク状はデルタ関数で、 なだらかな部分はフーリエ展開で表現することにより、 データサイズをコンパクトにしつつも精度を保つということを実現しています。 個人的には、フーリエ変換よりもやはり時代はウェーブレットなので、Continue reading “スペクトルレンダリング(Spectral Rendering)”

A quasi-Monte Carlo Metropolis algorithm

乱列化準モンテカルロ(RQMC)で有名な Art B. Owen 氏による、 メトロポリス(・ヘイスティング)サンプリングへの RQMC の応用についての論文です。 Owen, A.B. and Tribble, S.D “A quasi-Monte Carlo Metropolis algorithm” http://www.pnas.org/cgi/reprint/102/25/8844 http://www-stat.stanford.edu/~owen/reports/ 論文は結構小難しく書かれていますが(というか予備知識がないと全然わかんないべ?)、 言わんとすることは、 RQMC をメトロポリス法のような MCMC 系(マルコフ連鎖モンテカルロ法) に適用しても問題ないよね、ということの数学的裏づけが述べられています。 (いままでは QMC や RQMC を MCMC に使ってちゃんと収束すると言えるかが数学的に疑わしかった。 と思う) RQMC を用いることにより、通常の MC(モンテカルロ法)に比べて、 10 – 100 倍ほど収束が早くなっています。 (論文のテスト対象は単純なガウス分布関数などなので、 実際のレンダリング処理に適用した場合は そこまで収束の効率はよくならないかと思います) 論文がやっていることは単純で、 メトロポリス法で通常擬似乱数を使う部分を RQMC のサンプルで置き換えるだけです。 本論文では、サンプルの生成には Entacher et al の LCG(LinearContinue reading “A quasi-Monte Carlo Metropolis algorithm”

計算統計II

本を買いました。 なんだろう?…. ゴゴゴゴ…..   ゴゴゴゴ….. 近づいてみよう…. ゴゴゴ… ゴゴゴゴ…   ゴゴゴゴ… ドォ~~~~~~~~~~~~~~ン バァ~~~~~~~~~~ン http://www.amazon.co.jp/exec/obidos/ASIN/4000068520 逐次モンテカルロ法を取り上げている貴重な邦書が ついに発売になりました。 これからの GI アルゴリズムでは逐次モンテカルロ法を扱うものが 多く提案されてきそうですので、今のうちに学ぶのに最適だと思います。 (MLT などのモンテカルロ系 GI を実装するのにも役立つでしょう)

Pane: Kevin Beason’s renderer

最近の Kevn Beason 先生。ソース公開の GI レンダラ Pane で有名です。 http://www.csit.fsu.edu/~beason/pane/ ちょっと見ていない間に、いつの間にか Work Log なるものがッ!? 元から引き離されていましたが、さらに引き離されてしまいました。 やべぇ、勝てる気がしない… こちらもがんばらないといけませんね。 1 月くらいに lucille 0.2 がリリースできるようにがんばってみたいと思います。

自動微分を援用した適応的オーバーサンプリング

牧野光則, 井下雅美,柏木雅英,大石進一 自動微分を援用した適応的オーバーサンプリング http://www2.tamacc.chuo-u.ac.jp/tise/pub/journal07/ レイ微分を調べているときに見つけた論文。 自動微分とありますが、 やっていることはつまりレイ微分とおなじで 連鎖律(chain rule)で関数を微分するというやつです。 この自動微分(automatic differentiaton)というのは、もともとは mathematica のようにプログラムがシンボリックに関数の微分式を求めてくれるしくみのようです。 A Collection of Automatic Differentiation Tools http://www-unix.mcs.anl.gov/autodiff/AD_Tools/ 本論文では、重心座標パラメータの微分値を利用することで、 三角形と交差する可能性のある部分(スクリーン座標での物体のふちなど)を 適応的にサンプリングできることを示しています。 レイトレでの適応的サンプリングは、Glassner 本 を見る限り、 輝度や深度の差、ピクセル内の三角形の数などから求めるのが一般的ですが、 本論文のように微分量も加味できると、 よりロバストな推定をすることができるようになりますね。 とはいえ、実際に実装するとなると問題もあります。 論文では述べられていませんが、 空間データ構造をトラバースしているときに、 直接レイとは交差しないが、 すこしレイの方向がずれれば交差する可能性のある ポリゴンも見つける必要があります。 ちょっと考えてみた解は、 o 入力の三角形をちょっと大きくして(fat triangle)、 空間データ構造を構築する。 スクリーンに射影したときに大きくした分がだいたい 1 ピクセル程度になる必要があります。 あまり遠くにある三角形だと失敗するかもしれないし、 それを回避するために構築時に視点からの 距離に応じて大きくする幅を変えたとしても、 今度は反射屈折があったときにうまくいかなくなります。 o ビームやコーンのように、 ある程度レイに幅を持たせて空間データ構造をトラバースする。 もちろんどれくらいのビーム幅で探索するかにはレイ微分が使えます。 いくつか無駄にトラバースする回数が増えるかもしれませんが、 三角形を大きくするよりは こちらのほうが反射屈折などがあっても問題がありません。空間データ構造が kd 木であれば、Continue reading “自動微分を援用した適応的オーバーサンプリング”