フォトンマッピング入門

9,694 views
9,506 views

Published on

2013/8/24 レイトレ合宿用に作成したフォトンマッピング入門のスライドです。

Published in: Technology
0 Comments
24 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,694
On SlideShare
0
From Embeds
0
Number of Embeds
1,230
Actions
Shares
0
Downloads
109
Comments
0
Likes
24
Embeds 0
No embeds

No notes for slide

フォトンマッピング入門

  1. 1. RENDERING1H CAMP Photon Mapping 2013/8/24 Shuichi HAYASHI (c) Henrik Wann Jensen
  2. 2. ※資料中の一部数式、図、画像について 2Photon Mapping. RENERING1H CAMP 2013/8/24 背景色がこの色 の図、数式、Henrik Wann Jensen先生のスライドにあったもの を使用させていただいています。(数式の間違いと思われ部分は、多少修正し ています。 元資料がみつからなくなってしまったので、リンクが示せませんが、 SIGGRAPH2012 Course State of the Art in Photon Density Estimation の Photon Mapping Basics のスライドに同様の図があります。 http://users-cs.au.dk/toshiya/starpm2012/
  3. 3. アジェンダ 3Photon Mapping. RENERING1H CAMP 2013/8/24 1. 出自 2. 何ができるのか 3. BRDF & BSSRDF 4. 従来の手法と欠点 5. フォトンマッピングの利点 6. アルゴリズム 1. フォトントレーシングと勘違いしたポイント 2. 光の物理量 3. フォトンマップのデータ構造 4. 放射輝度推定 7. 可視化 1. シンプルな可視化 2. 実践的な可視化 1. 集光模様フォトンマップ 2. 影フォトンマップ 8. フォトンマッピングの欠点 9. リファレンス
  4. 4. 出自 • 1995年頃 • Henrik Wann Jensen先生が考案 4Photon Mapping. RENERING1H CAMP 2013/8/24
  5. 5. 何ができるのか ✤レンダリング方程式の解法 • 表面に置ける散乱(BRDF) • 透明感や質感 ✤ボリュームレンダリング方程式の解法 • 空間に置ける散乱(BSSRDF) • この資料では説明していない 5Photon Mapping. RENERING1H CAMP 2013/8/24
  6. 6. BRDF & BSSRDF 6Photon Mapping. RENERING1H CAMP 2013/8/24
  7. 7. 従来の手法と欠点 ✤ 経路追跡法(パストレーシング) ➡ 拡散反射が苦手 多くの光線サンプルが必要 ✤ ラジオシティ法 ➡ 基本的に拡散反射しか扱えない プリミティブ数の2乗に比例してデータ量と計算時間が増大 モデルの形状単純化と併用したいが、単純化自体も難しい ✤ 上記2つの併用 ➡ ラジオシティ法のデメリットは残る 7Photon Mapping. RENERING1H CAMP 2013/8/24
  8. 8. フォトンマッピング:利点 8 • 任意の形状を扱える • モデル記述に依存しない • 雲の中や大理石の表面下のフォトン分布を マップできる • 任意のBRDFを扱える • ノイズが低周波 • 省メモリ(ラジオシティ法に比べて) • 統計的に安定(フォトンの出力は全部同じ) Photon Mapping. RENERING1H CAMP 2013/8/24
  9. 9. フォトンマッピング:ノイズの出方 9 Path Tracing Photon Mapping Photon Mapping. RENERING1H CAMP 2013/8/24
  10. 10. アルゴリズム ✤2段階アルゴリズム 1. フォトントレーシング 2. レイトレーシング + 放射輝度推定(Radiance Estimate) 10Photon Mapping. RENERING1H CAMP 2013/8/24
  11. 11. フォトントレーシング 11 光源からフォトンをばらまく Photon Mapping. RENERING1H CAMP 2013/8/24
  12. 12. 放射輝度推定 12 ある点の周りの一定半径、一定数のフォトンを集めて明るさを推定 Photon Mapping. RENERING1H CAMP 2013/8/24
  13. 13. Photon Tracing 13 • 光源ごとにフォトンを発射する方向や密度を制御 • 反射、屈折、 吸収は反射率に合わせロシアンルーレット • BRDF(反射方向の分布)は任意に設定可能 Photon Mapping. RENERING1H CAMP 2013/8/24
  14. 14. Photon Tracing:フォトンの格納 14 • 入射する放射束を点集合として格納 • フォトンはkd-treeを構成 • 拡散面上でのみ格納(理由は後述) Glossyな面でもPhotonMapを使えるが、鋭い反射であるほ ど向いてない(反射方向のフォトンが集まらない) Photon Mapping. RENERING1H CAMP 2013/8/24
  15. 15. Photon Tracing 15 光源の種類に従ってフォトン飛ばす 点光源 平面光源 複雑な光源 Photon Mapping. RENERING1H CAMP 2013/8/24
  16. 16. 最初にぶつかった点でしか格納しない …ダメ× Photon Tracing 勘違いしたポイント その1 16  ➡直接光だけになってしまう Photon Mapping. RENERING1H CAMP 2013/8/24
  17. 17. フォトンの出力に反射率を掛けて更にトレース …ダメ× Photon Tracing 勘違いしたポイント その2 17Photon Mapping. RENERING1H CAMP 2013/8/24  ➡フォトンの明るさにムラがあると、放射輝度推定で一定範囲または一定 数のフォトンを集めたとき、大きいフォトンがぎりぎり入る場合、入らな い場合で推定値が大きく異なってしまい、ノイズになる。 ➡ 推定結果➡明るい 推定結果➡暗い
  18. 18. Photon Tracing 勘違いしたポイント その3 18 出力を分けたフォトンを2つ以上の方向にトレース …ダメ× ➡指数的にフォトンが増え、1回反射したフォトンより複数回反射した 暗いフォトンが圧倒的に多くなり、前ページと同様の問題が起こる Photon Mapping. RENERING1H CAMP 2013/8/24
  19. 19. Photon Tracing 正解 19 反射の度に、ロシアンルーレットで更にトレースするか決定  ➡反射率50%なら、50%の確率でトレースを継続する。 Photon Mapping. RENERING1H CAMP 2013/8/24
  20. 20. フォトンのデータ構造 struct photon { float x, y, z; // 位置 float power[3]; // 出力(単位:放射束,flux,Φ) char phi, theta; // 入射方向 short flag; // kd-treeで使う分割面(XorYorZ) } 20Photon Mapping. RENERING1H CAMP 2013/8/24
  21. 21. フォトンの格納: kd-tree 21 •非一様な分布のフォトンでもバランス処理すれば探索が高速 O(log n) •n個のフォトンから近いフォトンk個を集める近傍探索が高速 O(k + log n) Photon Mapping. RENERING1H CAMP 2013/8/24 From http://en.wikipedia.org/wiki/K-d_tree From http://en.wikipedia.org/wiki/K-d_tree
  22. 22. 拡散面上でのみ格納 22 • 鏡面は、鏡面反射方向から入ってくるフォトンが得られる可 能性が小さい(完全鏡面の場合ゼロ)ので、拡散面でのみ フォトンマップを使用 • 鏡面は普通にレイトレで反射方向にトレースする Photon Mapping. RENERING1H CAMP 2013/8/24
  23. 23. 光の物理量 ✤ 放射束(radiant flux) Φ = dQ/dt • 時間あたりのエネルギー、単位はW(ワット) • ある光源全体が発する明るさ等に使用 ✤ 放射照度(irradiance) E(x) = dΦ/dA • 単位面積あたりの位置xに入射する放射束 • ある点の色、ある点に色々な方向から入る光(放射輝度)の合計 ✤ 放射輝度(radiance) L(x,ω) = d^2 Φ / cosθ dA dω • 単位立体角あたり、単位面積あたりの放射束 • 空間中の1点における一方向から(一方向へ)の光の強さ • パストレのレイが運ぶ光の量 23Photon Mapping. RENERING1H CAMP 2013/8/24
  24. 24. 放射輝度推定 24 • 物体上のある位置において、近くのフォトンを使って、その位置か らセンサー(スクリーンのピクセル)方向への明るさを推定する。 Photon Mapping. RENERING1H CAMP 2013/8/24
  25. 25. 放射輝度推定: 手順 25 1. 出射放射輝度を推定したい位置の近くにあるフォトンを集める • 一定半径以内 • 一定数まで 2. 集めた各フォトンの出力とBRDFを掛けたものを合計する • フォトンの入射方向と推定する位置の法線を使って 裏側のフォトンを除外 3. 推定範囲の球を投影した円の面積で、2の結果を割る ➡出射放射輝度が求まる Photon Mapping. RENERING1H CAMP 2013/8/24
  26. 26. radiance_estimate( x, ω', nml ) { locate n nearest photons // n個(定数)の最近傍フォトンを見つける r = distance to n th nearest photons // 一番遠いフォトンまでの距離 Σflux = 0 foreach(p in photons) { pd = photon direction Φp = photon power Σflux += fr(x, ω', pd) * Φp // BRDFにフォトンの放射束を乗算 } Lr = Σflux / (πr^2) // 投影円の面積で割る return Lr; } 放射輝度推定:コード 26Photon Mapping. RENERING1H CAMP 2013/8/24
  27. 27. レンダリング方程式 出射放射輝度 = 半球にわたり積分{ BRDF * 入射放射輝度 * cosθ’ } θ’ = xにおける法線と入射方向の角度 放射輝度推定:理論 27Photon Mapping. RENERING1H CAMP 2013/8/24
  28. 28. 入射放射輝度L’(x,ω’)を放射輝度の定義で置換 Φ(x,ω’)はPhotonが持っているPower。 放射輝度推定:理論 28Photon Mapping. RENERING1H CAMP 2013/8/24
  29. 29. 放射輝度推定:理論 29Photon Mapping. RENERING1H CAMP 2013/8/24 cosθ’dωが約分で消える。 入射放射輝度L’(x,ω’)を 放射輝度の定義で置換。 レンダリング方程式。 離散化したサンプリングで 近似。dAは推定範囲を投影 した円の面積に置換。
  30. 30. radiance_estimate( x, ω', nml ) { locate n nearest photons // n個(定数)の最近傍フォトンを見つける r = distance to n th nearest photons // 一番遠いフォトンまでの距離 Σflux = 0 foreach(p in photons) { pd = photon direction Φp = photon power Σflux += fr(x, ω', pd) * Φp // BRDFにフォトンの放射束を乗算 } Lr = Σflux / (πr^2) // 投影円の面積で割る return Lr; } 放射輝度推定:コード(再掲) 30Photon Mapping. RENERING1H CAMP 2013/8/24
  31. 31. Radiance Estimate: 効率化 31 • 前ページのコードはループの中で毎回BRDFの評価をしており、効率が悪い。 そこで、BRDFを掛けずに、放射照度Eを先に求めて、最後に1回だけBRDFを 乗算して出射放射輝度Lを求める形に変更する。 • BRDF = dL / dE = (入射)放射照度に対する出射放射輝度 なので dL = dE * BRDF で放射照度から出射放射輝度を求められる。 Photon Mapping. RENERING1H CAMP 2013/8/24
  32. 32. irradiance_estimate( x, /*ω',*/ nml ) { locate n nearest photons // n個(定数)の最近傍フォトンを見つける r = distance to n th nearest photons // 一番遠いフォトンまでの距離 Σflux = 0 foreach(p in photons) { pd = photon direction Φp = photon power if(dot(nml, pd)<0) Σflux += Φp // 裏側のフォトンを除外、BRDFは不要 } E = Σflux / (πr^2) // 投影円の面積で割る return E; } 放射照度推定 (Lambert面の場合) 32Photon Mapping. RENERING1H CAMP 2013/8/24 ➡呼び出し元で戻り値にBRDFをかけて、放射照度から出射放射輝度を求める
  33. 33. Radiance Estimate 品質改善 33 楕円範囲で推定: カドのダメなフォトンを集めないようにする 円錐フィルタ: 円の中心から遠い程、フォトンの寄与を小さくする NG OK ➡ 楕円化 Photon Mapping. RENERING1H CAMP 2013/8/24
  34. 34. Radiance Estimate 品質改善 34 工夫なし 円錐フィルタ 楕円範囲で推定 円錐フィルタ+楕円範囲 Photon Mapping. RENERING1H CAMP 2013/8/24
  35. 35. シンプルにレイトレで可視化 35 • 拡散面にはフォトンマップからの放射輝度推定 • 鏡面に対しては光線追跡法 Photon Mapping. RENERING1H CAMP 2013/8/24
  36. 36. シンプルにレイトレで可視化 36 • ノイジー • フォトンの数を増やしてもノイズが残りがち Photon Mapping. RENERING1H CAMP 2013/8/24
  37. 37. より実践的な可視化方法 37 Direct Specular Caustics Indirect + + + = Photon Mapping. RENERING1H CAMP 2013/8/24
  38. 38. より実践的な可視化方法 38 • 直接光の計算は高速に可能なのでフォトンマップから推定しない • 間接光はフォトンマップから推定 • コースティクスは別途専用のフォトンマップを用意 Photon Mapping. RENERING1H CAMP 2013/8/24
  39. 39. より実践的な可視化方法 39 + + = Photon Mapping. RENERING1H CAMP 2013/8/24 Direct Caustics Indirect Final この例ではSpeularはその他のイメージ に含まれている
  40. 40. より実践的な可視化方法 40 • レンダリング方程式を4つに分解 • すべてのパスを網羅している Photon Mapping. RENERING1H CAMP 2013/8/24
  41. 41. 集光模様フォトンマップ 41 • フォトンの数を多くしたり、推定半径を 小さめにして、鋭い集光模様を描画可能 Photon Mapping. RENERING1H CAMP 2013/8/24
  42. 42. 集光模様フォトンマップ 42 • 透過屈折のある物体のみに目がけてフォトンを飛ばすのがベスト • グローバルフォトンマップを使った描画結果と組み合わせる Photon Mapping. RENERING1H CAMP 2013/8/24
  43. 43. 間接光には分散レイトレーシング 43 • 拡散反射面に対する間接光を複数のレイを飛ばして集める • レイを飛ばした先はフォトンマップから放射輝度推定する Photon Mapping. RENERING1H CAMP 2013/8/24
  44. 44. 影フォトンマップ 44 影なし 完全に影 半影 • 物体を突き抜けてトレース • 突き抜け後は負の出力を持つフォトン をストア • 範囲内の推定値が1なら影なし • 範囲内の推定値が<0なら完全に影 • 範囲内の推定値が>0 && <1なら半影 • 半影部分のみシャドウレイをたくさん 飛ばす Photon Mapping. RENERING1H CAMP 2013/8/24
  45. 45. 影フォトンマップ 推定結果を可視化 45 • 白 ➡遮 されてない ➡シャドウレイ飛ばさない • 灰色 ➡半端に遮 されている可能性がある ➡シャドウレイ飛ばす • 黒 ➡直接光は当たってない ➡シャドウレイ飛ばさない Photon Mapping. RENERING1H CAMP 2013/8/24
  46. 46. Photon Mappingの欠点 46 • シーンに応じてパラメータの調整が必要 • ばらまくフォトンの数 • 放射輝度推定に使うフォトンの数 • 放射輝度推定でフォトンを集める範囲の半径 • 各種類のフォトンマップで設定が必要 • Progressive Photon Mappingで解決? • Glossyな面 • レイを沢山飛ばすしかない(パストレと同じ処理) Photon Mapping. RENERING1H CAMP 2013/8/24
  47. 47. References • Henrik Wann Jensen’s HP http://graphics.ucsd.edu/~henrik/ • Henrik Wann Jensen, 苗村 健 訳 Realistic Image Synthesis Using Photon Mapping http://www.amazon.co.jp/dp/4274079503 • SIGGRAPH2012 Course State of the Art in Photon Density Estimation http://users-cs.au.dk/toshiya/starpm2012/ Photon Mapping. RENDERING1H CAMP 2013/8/24

×