こんにちわ,Pocolです。
皆さん元気にレイを飛ばしていますか?
今日は,先週参加してきたレイトレ合宿2!!についてレポートすることにします。
まず最初に結果ですが,今年の目標である「ビリ脱出!」をめでたく達成することができ7位入賞(7/15)を果たしました。
商品としてフィギュアで有名なグッドスマイルカンパニーさんのトイレットペーパーを頂きました。
あと,今年レンダリングした画像は下記のようになります。
一応わかりづらいので説明を追加しておくと,一番奥側がミラーになっていて手前のものが反射して見えるようになっています。右側はグロッシー(Phong)を表現するためのマテリアルに設定しています。
プレゼン資料をSlideShareにアップロードしたので興味がある方は見てください。
あと,各参加者のレンダリング画像と,レンダラーのソースコードおよびスライドがレイトレ合宿2!!のサイトに公開されているので,興味があるかたは是非見てみてください。
レイトレ合宿2!!ですが,今年は河口湖カントリーコテージBanにて開催されました。
去年は電車で行きましたが,荷物等を考えると色々と面倒なので,今年は自家用車にて現地に向かいましたが,東名高速で途中ゲリラ豪雨にあい,前が見えない状態で車を運転しました。
本当にマジゲリラ豪雨やばい。後ろから追突されないか非常に不安で,できるだけ車間をとって運転まじで神経使いました。さすがに疲れるので所々のPAで休憩をとりつつ無事に現地に到着。出発前はめちゃくちゃいい天気で,今日はBBQ日和だな~なんて思っていたのですが,現地に着いたら雨。これBBQできるのか?なんて思っていたのですが,屋根つきの場所だったのでみんなでおいしくお肉を頂くことができました!!
BBQの時に自己紹介があったのですが,八田さんが「レイトレ合宿のおかげで転職できました!」と言っていたのが印象深かったです。転職したいときにはレイトレすると良いのかもしれません。
BBQの後は各自お風呂に入って,その後セミナーという流れになりました。
今年のセミナーは内容が凄く濃くて非常に良かったです。以下はセミナーに参加した際のメモ内容です。
2014/09/06(Sat)
21:30~
kgussan 「フォトンマッピングGPU実装最新手法」
詳細は,http://www.slideshare.net/ssuser2e676d/gpu-h2609kgussan2-38830113を参照。
論文を読んでの内容を紹介。
大域照明は現行では2次までが多い。
アルゴリズムの比較について → raytracing.jpを参照。
リアルタイムレイトレーシング → 5FacesのMatt svobodaさん
今回紹介するリアルタイムフォトンマッピング処理 → Deep GBufferと,Alchemy AOやっている人による論文。
実装手法は4つ,3D Bounds, 2.5D Bounds, Hash Grid, Tiled。
手法の違いは,フォトンでループを回すか?ピクセルで回すか?射影するジオメトリ?どの空間?などで異なる。
(1) 3D Bounds
グラフィックスパイプラインのラスタライザを使う。
フォトンは20面体。
フォトンは格納せずラスタライズするときに直接つかっている感じで力技。
デメリット→ラスタライズでブルートフォースなので,ラスタライズの処理能力で頭打ちになる。
(2) 2.5D Bounds
スクリーンスペースでやる。ローカルリフレクションっぽい感じのやつ。
フォトンベースのループで,(1)よりも速い。
オクル―ジョンがある寄与の影響が出ない。
(3) HashGrid Cells
セル上にフォトンを分配して,スクリーンのピクセル座標を3D空間に投影する。
その座標に近いフォトンを3D空間上で探索・収集する。
離散下サンプル手法を使っているけどノイズがでるのでバイラテラルフィルタをかける。
(4)タイルベース手法
スクリーンスペースでタイル状にピクセルを区切って,そのタイルごとにフラスタムを生成。
フラスタムにのりしろをつけてフォトンを分配する。
タイルベースレンダリングのライトの代わりにフォトンを使ったような手法。
実行結果 → 2.5D BoundsとTiled Algorithmの結果が良好。
まとめ
データ構造で性能が大きくことなる。
映画ではフォトンが6桁ぐらい違うので,まだ適していない。
ネックはメモリバンド幅。
メモリレイテンシが追い付かない。
Q&A
・この技術使っているゲームある?
まだない。研究レベルでは多少例がある。
すごく限定的にすれば使えるのではないか?例えば懐中電灯をつかったドアップとか,ダイアを探せとか。
22:10~
shocker 「Monte Carlo Ray Tarcing アルゴリズム超概略」
詳細は,http://www.slideshare.net/shocker_0x15/2-38791622
・モンテカルロ積分
期待値が真値に一致する。
任意のPDFを使える
・重点的サンプリング
理想的なPDFを求めることは困難。
・グローバルイルミネーション
カメラに到達するあらゆる光経路の寄与を積分する。
モンテカルロ積分を使って解く。
・Path Tracing
入射方向を確率的にサンプル。
光源に当たれば寄与が取れる。
でもなかなか当たらない。
・Next Event Estimation
光源上の点を明示的にサンプルし,視線経路と接続する。
スペキュラーは使わない。
・Multiple Importance Sample
光源とつなげる。
一長一短がある。
2つの戦略を重みをつけて合成するのがMIS。いいとこどり。
MISウェイト
バランスヒューリスティック。
・Bidirectional Path Tarcing
MISを一般化。
任意の経路に一般化。
視線パスと光源パスの各頂点を接続。
長さ(3, 1) → 目から3頂点,光源から1頂点を表す。
・Metropolis Light Transport
ごく一部の領域の光輸送経路が重要となるシーンに弱い,そこでMLT。
既存の有効パスへの変異を加えて新たなパスを生成。有効なものだけをとっていく。
・Primatry Sample Space MLT
経路のもとになる乱数レベルで変異を加える。
オリジナルのMLTよりも実装が簡単かつ,元よりもロバスト。
・Photon Mapping
1.フォトントレーシング
2.密度推定
フォトンマッピングは経路をゆるく接続する。
・Progressive Photon Mapping
あらかじめ輝度計算点を生成しておく
フォトントレーシングを繰り返して統計量を更新。
・Stochastic PPM
PPMはアンチエイリアスとかDOFが苦手。
これらの効果は平均放射輝度推定を必要とする。
正確な推定には無限の輝度推定点が必要。
領域内で探索半径などの統計量を共有。
すべてをまとめることで,平均輝度の推定値をプログレッシブに真値に近づけられる。
・PPM:Probabilistic Approach
半径を徐々に小さくしていったオリジナルのフォトンマッピングの結果を重ね合わせるだけ。
・Adaptive Markov Chain Monte Calro PPM
PPM(SPPM)の問題点。
上からくる場合。
不可視なフォトン経路=無駄な経路。
PPM + PSSMLT + α
可視なら採択していく。
変異パラメータの自動調整も行う。
ズームしても破綻しない。自動調整の結果。
・Unified Path Sample(Vertex Connection And Mergin)
BPT
光沢面の多いシーン得意
SDSパス苦手
PPM
光沢面の多いシーン苦手
SDSパス得意
MISを使えばいいんじゃね?
しかし問題がある。
サンプリング次元が違う。
バランスヒューリスティックで問題。単位が違う
視線パスの端点をずらして光線パスの端点を追加。
・Path Space Regularization
パストレをもう一度考える
DRDFをぼかして寄与をとれるようにする。
反復ごとに本来のBSDFへ近づいていく=本質的にはPPMの半径縮減と同じ。
ディフューズ面には適用しない。
Regularized MLT綺麗。
さらに +MEで綺麗。
・Multiplexed MLT
PSSMLTでは1つの提案分布と採択・棄却を組み合わせて目標分布を達成する。
BPT等で実現されるマッピング(=提案分布)があまりよくない→棄却が増える。
PSS内の変異を加えてマッピングの変更も行う。
・最新手法は基本的にMIS and/or (PSS)MLTの理論を使っているイメージ
ボリュームレンダリングに関しては今回触れなかった。
MLT系はアニメーションに向いていない。画面がちらつく,動画向きじゃない。
23:15~
perim 「MCMC based rendreing techniques」
詳細は,http://www.slideshare.net/OtsuHisanari を参照。
難しいシーン グロッシーとか
なぜ難しい?
解決手法
マルコフチェインモンテカルロ
MCMCを用いることによってエネルギー分布に従う光路をサンプリングできる。
目的
ある分布に従うようなマルコフ連鎖を作る
MLT
状態空間:Path space
光路を直接変更することで変異を行う。
Metropolis-Hasting法
採択確率を決める
状態空間
一様乱数列
写像により光路変換。
複雑な関数よりも特徴を抜き出した関数をいくつかサンプリングした方が効率的では?ということ
(このあと以降は難しすぎて理解できなかったのでメモるのをやめた。詳細はスライドを参照してください)