More Related Content
Similar to 双方向パストレーシングレンダラedubpt解説 (20)
双方向パストレーシングレンダラedubpt解説
- 15. ロシアンルーレット
以下のように処理を分岐させて𝐶を推定する。
–
–
–
𝑟0 は [0, 1)の範囲の乱数
𝑝0 は [0, 1]の範囲の定数
𝐶 は𝐶の推定器で、確率変数
𝐶=
𝐷0
,
𝑝0
0,
𝑟0 < 𝑝0
𝑟0 ≥ 𝑝0
すると、 𝐸 𝐶 = 𝐷0 = 𝐶となる
– 実際の実装では、乱数𝑟0 を何らかの方法で生成し、 𝑝0 未満なら𝐷0 の評価を行い、
𝑝0 以上なら処理を打ち切って𝐶 の評価値を0とする。
– 𝑝0 は基本的に任意の値で良いが、 𝐷0 の値の大小に比例させたほうが分散𝑉[𝐶 ]は小
さくなる。
- 16. ロシアンルーレット
𝐷0 の評価を行うことになったとする。
𝐷0 も𝐶 と同じく無限級数なので、再び確率的に処理を分岐させて推定する。
𝐷0 = 𝐶0 +
𝐷1
,
𝑝1
0,
𝑟1 < 𝑝1
𝑟1 ≥ 𝑝1
さっきの式と合わせると、推定のための式全体は以下のようになる。
–
–
それぞれの条件分岐のたびに乱数生成を行い、処理を打ち切るか、次の項を評価するかを決める。
以下、𝑫 𝒊 の評価を行うたびに、それ以降の項𝑫 𝒊+𝟏 を評価するかどうかを確率的に決める。
–
𝐸 𝐶 = 𝐸 𝐷0 = 𝐶0 + 𝐸 𝐷1 = 𝐶となる。(以降も同じで、常に推定式全体の期待値は𝐶 になる)
–
さっきと同様、𝑝 𝑖 は基本的に任意の値で良いが、 𝐷 𝑖 の値の大小に比例させたほうが分散は小さくなる。
𝐶=
𝐷0
,
𝑝0
0,
𝑟0 < 𝑝0
𝑟0 ≥ 𝑝0
=
𝐷1
, 𝑟1 < 𝑝1
𝐶0 + 𝑝1
0, 𝑟1 ≥ 𝑝1
,
𝑟0 < 𝑝0
𝑝0
0,
𝑟0 ≥ 𝑝0
- 18. ロシアンルーレット
𝐶を推定するための疑似コード
1. 𝐶 ← 0, 𝑖 ← 0, 𝑝 𝑡 ← 1
2. 𝑤ℎ𝑖𝑙𝑒 𝑡𝑟𝑢𝑒
3.
𝑝 𝑡 ← 𝑝 𝑡 ⋅ 𝑝𝑖
4.
𝑟𝑖 ← 𝑟𝑎𝑛𝑑𝑜𝑚([0,1))
5. 𝑖𝑓 𝑟𝑖 < 𝑝 𝑖 𝑡ℎ𝑒𝑛
6.
𝐶← 𝐶+
7.
𝑖 ← 𝑖+1
8.
𝑒𝑙𝑠𝑒 𝑏𝑟𝑒𝑎𝑘
9. 𝑒𝑛𝑑
10. 𝑟𝑒𝑡𝑢𝑟𝑛 𝐶
𝐶𝑖
𝑝𝑡
- 23. 具体例
シーンのジオメトリ表面全体を𝑀とする。
𝑀上の確率分布𝑃を考える。
𝑀上の面積測度𝐴に関する確率密度関数を𝑃 𝐴 (𝑥)と書く。
–
–
–
面積測度とは、ある領域を与えると(いわゆる普通の)面積を返す関数
𝑃 𝐴 (𝑥)は𝑀上のある一点𝑥についての面積測度に関する確率密度関数となる。
今後もしばしば出てくる。
確率分布と測度に応じて様々な確率密度関数が考えられる。
–
–
–
同じ面積測度𝐴を使っても、別の確率分布を与えれば、別の確率密度関数になる。
𝑃 𝐴 (𝑥)と𝑄 𝐴 (𝑥)といったように、別の確率密度関数が得られる。
同じ確率分布を使っても、別の測度を与えれば、別の確率密度関数になる。
𝑀
𝐷
𝐴 𝐷 = 𝐷の面積
- 24. 具体例2
単位球面全体を𝑆 2 とする。
𝑆 2 上の確率分布𝑃を考える。
立体角測度𝜎に関する確率密度関数を𝑃 𝜎 (𝜔)と書く。
–
–
–
立体角測度とは、単位球面上のある領域を与えると、その領域の立体角を返す関数
𝜎(𝐷)は立体角なので単位はステラジアン。
𝑷 𝝈 (𝝎)は𝑺 𝟐 上のある一点についての確率密度を表すが、単位球面上の一点というのはすなわ
ちある一方向のことなので、 𝑷 𝝈 (𝝎)はある一方向についての確率密度関数になる。
確率密度関数を考えるとき、使う測度は( 𝑆 2 上の適切な測度なら)なんで
もいい。
–
–
普通の立体角測度𝜎や、投影立体角測度𝜎 ⊥ を使うことができる。
このスライドでは主に立体角測度を使うことにする。
𝜎(𝐷) = 𝐷の立体角(単位球面上の面積)
𝐷
𝜎 ⊥ (𝐷) = 𝐷の投影立体角(立体角を投影した面積)
- 27. モンテカルロ積分
𝐼=
Ω
𝑓 𝑥 𝑑𝜇(𝑥)
Ωを積分範囲、 𝜇をΩ上に定義される測度とすると、 𝜇に関する確率密度関
数𝑃𝜇 を使って以下のモンテカルロ積分𝐼 によって上の積分を近似出来る
–
𝑋 𝑖 は関数に対するサンプルで、 𝑃𝜇 に従ってサンプリングされる。
1
𝐼≈ 𝐼=
𝑁
𝑁
𝑖=1
𝑓(𝑋 𝑖 )
𝑃𝜇 (𝑋 𝑖 )
- 28. 証明
1
𝐸 𝐼 = 𝐸
𝑁
𝑁
𝑖=1
𝑓 𝑋𝑖
𝑃𝜇 𝑋 𝑖
1
=
𝑁
=
Ω
=
= 𝐼
𝑁
𝑖=1 Ω
𝑓 𝑥
𝑃𝜇 𝑥 𝑑𝜇(𝑥)
𝑃𝜇 𝑥
𝑓 𝑥
𝑃𝜇 𝑥 𝑑𝜇(𝑥)
𝑃𝜇 𝑥
𝑓(𝑥)𝑑𝜇(𝑥)
Ω
- 29. 注意
𝐼 = Ω 𝑓 𝑥 𝑑𝜇(𝑥)という積分をモンテカルロ積分で解くた
めにはサンプルを測度𝜇に関する確率密度関数𝑃𝜇 に基づい
てサンプリングする必要がある
– 別の測度𝜇′に関する確率密度関数𝑃 𝜇′ に基づいてサンプリングした場合、得
られる結果はあくまで Ω 𝑓 𝑥 𝑑𝜇′(𝑥)の近似になり、 Ω 𝑓 𝑥 𝑑𝜇(𝑥)の近似に
ならない。
- 30. 具体例
単位半球面Ω上に定義されたある関数𝑓 𝜔 を半球面上で微小立体角に関し
て積分したいとする。
Ω
𝑓 𝜔 𝑑𝜎(𝜔)を解く。
モンテカルロ積分を使うなら、何らかの確率密度関数𝑃 𝜎 に基づいてサンプ
ルを生成する。
この𝑃 𝜎 は、 Ω 𝑃 𝜎 𝜔 𝑑𝜎(𝜔) = 1を満たしさえすれば、任意の関数を与えるこ
とができる( 𝑓 𝜔 の形状に近い方が誤差の収束が速い→Importance
Sampling)
たとえば、
cos 𝜃
1
や などが、条件を満たす確率密度関数となる。
𝜋
2𝜋
- 37. 確率密度の変換(まとめ)
𝒄𝒐𝒔 𝜽
𝑷 𝑨 (𝒚) = 𝟐 𝑷 𝝈 (𝝎)
𝒓
位置𝑥から半球上に方向をサンプリングするとき、 𝑥から近いシーン内の領域は
𝑟が小さく、その領域から𝑦がサンプリングされる確率(= 𝑥から発射したレイ
がヒットする確率)も高くなる。逆に、 𝑥から遠いシーン内の領域は𝑟が大きく、
その領域から𝑦がサンプリングされる確率は低くなる。
また、対象の領域が傾いていればいるほど、レイがヒットする確率は下がる。
(=cos 𝜃が小さくなる)
という関係を上の式は示している。
cos 𝜃
𝑟2
は、 位置𝑥からの𝑑𝐴(𝑦)の見かけの面積を計算している。
𝑦
𝜔
𝑥
- 38. 具体例
𝑓 𝜔 𝑑𝜎(𝜔)を解く際、変数変換して積分範囲や積分変数を変換すること
を考える。
シーン内における微小立体角と微小面積の関係式𝑑𝜎 𝜔 = 𝑑𝜎(𝑥 → 𝑥 ′ ) =
Ω
cos 𝜃
𝑟2
Ω
𝑑𝐴(𝑥′)より
𝑓 𝜔 𝑑𝜎(𝜔) =
Ω
𝑓 𝑥 → 𝑥 ′ 𝑑𝜎(𝑥 → 𝑥′) =
M
𝑓 𝑥 → 𝑥′
cos 𝜃
𝑟2
𝑑𝐴(𝑥′)
ただしMは𝑥から一方向で到達可能な全てのシーンジオメトリ表面になる。
これをモンテカルロ積分するとなると、 M上の確率密度関数PA に基づいて
サンプルを生成することになる
条件を満たしさえすれば任意の関数が与えられる
– 面積測度に関する確率密度関数を使ったモンテカルロ積分に帰着することは多
いが、実際のレンダリングの文脈ではシーンジオメトリ上の確率密度関数を与
えて、それに基づいてサンプリングを行うことは少なく、結局立体角測に関す
る確率密度関数によってサンプリングを行ってから確率密度関数を面積測度関
するものに変換することが多い。(例外:光源上のサンプリング、レンズ上の
サンプリング)
- 44. マルチプルインポータンスサンプリング
複数の確率密度関数を用意して、それぞれのモンテカルロ積分の結果を組
み合わせるという発想。
個々の確率密度関数は最適なものではないが、組み合わせれば良い結果が
得られえる → マルチプルインポータンスサンプリング(Multiple
Importance Sampling)
– 例えば、ある材質上で次のレイの方向をサンプリングするとき、(1)材質のBRDFに基づいて
確率密度関数を決めてサンプリング (2)光源の方向に基づいて確率密度関数を決めてサンプ
リング (3)何も考えずランダムにサンプリング … といったように、複数のサンプリング戦略
が考えられる。このとき、唯一つの確率密度関数を上手に作成するのも良いが、そうではな
く、別々に用意した確率密度関数を使って独立にサンプリングしてそれぞれのモンテカルロ
積分の結果を組み合わせる、といった戦略もあり得る。ということ。
以下のように定式化される。
–
–
𝑆は異なるサンプリング戦略(確率密度関数)の数。
𝑤 𝑠 は各サンプリング戦略による各サンプルごとの重み。
𝑆
𝐼=
𝑠=1
1
𝑁𝑠
𝑁𝑠
𝑖=1
𝑓 𝑋 𝑠,𝑖
𝑤 𝑠 (𝑋 𝑠,𝑖 )
𝑝 𝑠 (𝑋 𝑠,𝑖 )
- 45. マルチプルインポータンスサンプリング
モンテカルロ積分がUnbiasedであるための重み𝒘 𝒔 の条件
その1
𝑤𝑠 𝑥 ≠ 0 ⟹ 𝑝𝑠 𝑥 ≠ 0
あるいは
𝑝𝑠 𝑥 = 0 ⟹ 𝑤𝑠 𝑥 = 0
モンテカルロ積分がUnbiasedであるための重み𝒘 𝒔 の条件
その2
𝑆
𝑓 𝑥 ≠0⟹
𝑤 𝑠 (𝑥) = 1
𝑠=1
以上は、任意のサンプル𝑥について、 𝑓(𝑥)が0でないならそのサンプルをサンプリ
ングできる確率密度関数が少なくとも一つは存在しなければならず、さらにその
ときの重みの和は1でなければならない、ということを意味する。
- 48. 具体例
二つのサンプリング戦略𝑝1 (𝑥)と𝑝2 (𝑥)があるとする。今、確率密度関数の
範囲をD = {𝑋, 𝑌}とすると、これらは以下の値をとるものとする。
–
–
𝑝1 𝑋 = 0.2, 𝑝1 𝑌 = 0.8
𝑝2 𝑋 = 0.6, 𝑝2 𝑌 = 0.4
今、 𝑝1 (𝑥)を使ってサンプリングした所、 𝑌が得られたとする。このときの
重み𝑤1 𝑌 は
–
ここで、 𝑌が仮に𝑝2 によってサンプリングされたとして、 𝑝2 (𝑌)を使っていることに注意。
𝑤1 𝑌 =
𝑝1
𝑝1 (𝑌)
0.8
=
= 0.666 …
𝑌 + 𝑝2 (𝑌) 0.8 + 0.4
- 49. 具体例
同様にして、全ての重みは以下のようになる。
– これは先ほどの条件を満たしている。
𝑤1 𝑋 = 0.25, 𝑤1 𝑌 = 0.666 …
𝑤2 𝑋 = 0.75, 𝑤2 𝑌 = 0.333 …
このことから、バランスヒューリスティックによる重み付けは、そのサンプルをサ
ンプリングする確率密度が高い戦略に、より大きい重みが付けられるということが
分かる。
もし、一般のモンテカルロ積分のように𝑝1 のみ使ってサンプリングした場合、𝑋があ
まりサンプリングされない。もし𝑓(𝑋)の値が大きい場合、これは大きな誤差・分散
を生む。また、𝑝2 のみの場合も逆のことが言える。そこで、二つの確率密度関数を
使い、それぞれの得意なサンプルについての重みを大きくすることで、ノイズの大
きくなるかもしれない結果の重みを小さくしつつ、ノイズが小さくなることが見込
まれる結果の重みを大きくしている。これがバランスヒューリスティックの考え方。
- 55. 画素の受ける光
画素𝑗の最終的な値を𝐼𝑗 とする。
この値は、画素𝑗における放射束(単位時間あたりに画素を通過するフォト
ン数・エネルギー)と画素のセンシティビティ(感応度)によって決まる
とする。
–
今回は露光時間については考慮せず、単位時間あたりのエネルギーについて考える。
𝑥 𝐼 に𝜔方向から入射する放射輝度
𝐿 𝑥 𝐼, 𝜔
𝑥𝐼
𝜃
画素𝑗
𝐼𝑗 =
𝐼𝑗 Ω
𝑊 𝑥 𝐼 , 𝜔 𝐿 𝑥 𝐼 , 𝜔 cos 𝜃 𝑑𝜎 𝜔 𝑑𝐴 𝐼 𝑗 (𝑥 𝐼 )
センシティビティ
𝑥 𝐼 における入射放射輝度×コサイン項
イラディアンスを面積分しているので得られるのは放射束に
なる。(ただしセンシティビティが入る)
イメージセンサ
- 60. 画素の受ける光
画素𝑗内の点𝑥 𝐼 において半球積分するわけだが、実際はレンズを通ってきた
光のみが画素𝑗に寄与する。
半球積分する代わりに、レンズ上の点𝑥0 から𝑥 𝐼 への放射輝度𝐿 𝑥 𝐼 ← 𝑥0 を
積分することで𝑥 𝐼 におけるイラディアンスを計算、最終的な画素値を求め
ることを考える。
–
𝑥0 をレンズ上を動く積分変数にする。
これは、積分変数を変数変換すればよい。
–
𝜔から𝑥0 に変換する。
𝐿 𝑥 𝐼 ← 𝑥0
𝑥0
𝑥𝐼
光軸
イメージセンサ
レンズ
レンズモデルとして、厚さのない平面でレンズを近似する薄レンズモデルを使う。
- 61. 画素の受ける光
微小立体角と微小面積の関係式𝑑𝜎(𝜔) =
と積分範囲を変換できる。
–
cos 𝜃
𝑟2
𝑑𝐴 𝑥0 を使うことで積分変数
今回は、レンズをシーン中のほかのオブジェクトと同じ物理的実体とみなすため、レンズ上
の微小面積はシーン表面に対する測度と同じ面積測度を用いて得ることが出来ると考える。
𝐼𝑗 =
𝐼𝑗 Ω
𝑊 𝑥 𝐼 , 𝜔 𝐿 𝑥 𝐼 , 𝜔 cos 𝜃 𝑑𝜎 𝜔 𝑑𝐴 𝐼 𝑗 𝑥 𝐼
=
𝐼𝑗
𝐿 𝑥 𝐼 ← 𝑥0
𝑥𝐼
𝐿𝑒𝑛𝑠
𝑊 𝑥 𝐼 ← 𝑥0 𝐿 𝑥 𝐼 ← 𝑥0
𝑥0
𝜃
𝜃
光軸
距離 𝑟
イメージセンサ
レンズ
cos2 𝜃
𝑑𝐴 𝑥0 𝑑𝐴 𝐼 𝑗 (𝑥 𝐼 )
𝑟2
- 62. 画素の受ける光
𝐿 𝑥 𝐼 ← 𝑥0 を計算するために、シーン内の点𝑥1 から𝑥0 に到達し、レンズを通
過して𝑥 𝐼 へと至るパスを計算する必要がある。
–
–
このとき、 𝐿 𝑥 𝐼 ← 𝑥0 = 𝐿 𝑥0 ← 𝑥1 となる。
𝒙 𝑰 と𝒙 𝟏 はそれぞれイメージセンサ上の点、シーン上の点で、別なので注意。
このような点𝑥1 は、𝑥 𝐼 と𝑥0 が定まると自然に決まる。
–
レンズの公式・結像公式
𝐿 𝑥 𝐼 ← 𝑥0
𝑥𝐼
𝜃
𝑥0
𝜃
光軸
求めたい点
𝐿 𝑥0 ← 𝑥1
イメージセンサ
レンズ
𝑥1
シーン
- 68. 画素の受ける光
以上より、画素𝑗の値は
𝐼𝑗 =
𝐼𝑗
𝐿𝑒𝑛𝑠
𝑊 𝑥 𝐼 ← 𝑥0 𝐿 𝑥0 ← 𝑥1
cos 2 𝜃
𝑑𝐴 𝑥0 𝑑𝐴 𝐼 𝑗 (𝑥 𝐼 )
𝑟2
𝐿 𝑥0 ← 𝑥1 はレンダリング方程式を使えば計算可能。
–
パストレーシング
𝐿 𝑥 𝐼 ← 𝑥0
𝑥0
𝑥𝐼
光軸
𝑥𝑉
イメージセンサ
𝐵
𝐿 𝑥0 ← 𝑥1
𝐴
オブジェクトプレーン
レンズ
𝑥1
シーン
- 71. パストレーシング
前章で解くべき式が得られた。
𝐼𝑗 =
𝐼𝑗
𝐿𝑒𝑛𝑠
𝑊 𝑥 𝐼 ← 𝑥0 𝐿 𝑥0 ← 𝑥1
cos 2 𝜃
𝑑𝐴 𝑥0 𝑑𝐴 𝐼 𝑗 (𝑥 𝐼 )
𝑟2
双方向パストレについて考える前に、この式を普通のパストレーシングで
解いてみる。
– reference_pathtracing.hがこれに対応している。
– カメラモデル以外は、eduptのパストレーシングと大きく変わらない。
- 89. 双方向パストレが解く式
画素𝑗の値について
𝐼𝑗 =
𝐼𝑗
𝐿𝑒𝑛𝑠
𝑊 𝑥 𝐼 ← 𝑥0 𝐿 𝑥0 ← 𝑥1
cos 2 𝜃
𝑑𝐴 𝑥0 𝑑𝐴 𝐼 𝑗 (𝑥 𝐼 )
𝑟2
であったが、双方向パストレーシングにおいてはこの式をさらに変形した
ものを使う。(ライトトレーシングによって得られたパスを使う際、都合
が良くなるようにする)
具体的には、変数𝒙 𝑰 の積分を変数𝒙 𝟏 の積分に変数変換する。
–
これによって、シーン上の点を変数とした積分になる。
- 91. 双方向パストレが解く式
まず、イメージセンサ上の微小面積と、オブジェクトプレーン上の微小面積の関
係式 𝑑𝐴 𝐼 𝑗 𝑥 𝐼 =
–
𝐵 2
𝐴
𝑑𝑉 𝑥 𝑉 を使い、変数𝑥 𝐼 の積分を𝑥 𝑉 の積分に変数変換する。
このとき、 𝑊 𝑥 𝐼 ← 𝑥0 = 𝑊 𝑥0 ← 𝑥 𝑉 、𝐿 𝑥 𝐼 ← 𝑥0 = 𝐿 𝑥0 ← 𝑥 𝑉 という関係式を使う。
変換後の式
𝐼𝑗 =
𝑉
𝐿𝑒𝑛𝑠
𝑊 𝑥0 ← 𝑥 𝑉 𝐿 𝑥0 ← 𝑥 𝑉
cos 2 𝜃
𝑑𝐴 𝑥0
𝑟2
𝐵
𝐴
2
𝑑𝑉 (𝑥 𝑉 )
𝑥0
𝑥𝐼
光軸
𝑥𝑉
イメージセンサ
𝐵
𝐴
オブジェクトプレーン
レンズ
𝑥1
- 93. 双方向パストレが解く式
オブジェクトプレーン上の微小面積と、シーン上の微小面積の関係式
–
先の式より、
𝑑𝑉 𝑥 𝑉 =
𝑟 ′′
𝑟′
2
cos 𝜃 ′
𝑑𝐴(𝑥1 )
cos 𝜃 ′′
この関係式を使って変数𝑥 𝑉 の積分を𝑥1 の積分に変数変換する。
–
このとき、 𝑊 𝑥0 ← 𝑥 𝑉 = 𝑊 𝑥0 ← 𝑥1 、𝐿 𝑥0 ← 𝑥 𝑉 = 𝐿 𝑥0 ← 𝑥1 という関係式を使う。
𝐼𝑗 =
𝑀
𝐿𝑒𝑛𝑠
𝑊 𝑥0 ← 𝑥1 𝐿 𝑥0 ← 𝑥1
cos 2 𝜃
𝑑𝐴 𝑥0
𝑟2
𝐵
𝐴
2
𝑟 ′′
𝑟′
2
cos 𝜃 ′
𝑑𝐴(𝑥1 )
cos 𝜃 ′′
この式をジオメトリファクタ(以下、G項)を使って書きなおす。
𝐺 𝑥0 ↔ 𝑥1 =
cos 𝜃′ cos 𝜃 ′′
𝑟′2
- 94. 双方向パストレが解く式
すると以下のようになる。
𝐼𝑗 =
𝑀
𝐿𝑒𝑛𝑠
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1
′
𝑊 (𝑥0 ← 𝑥1 ) = 𝑊 𝑥0 ← 𝑥1
–
–
𝐵𝑟 ′′ cos 𝜃
𝐴𝑟 cos 𝜃 ′′
2
𝐵𝑟 ′′ cos 𝜃
𝐴𝑟 cos 𝜃 ′′
2
𝐿 𝑥0 ← 𝑥1 𝑑𝐴 𝑥0 𝑑𝐴(𝑥1 )
とすると以下のようになる。
シーンの面積に関する積分になった。
この式を双方向パストレーシングで解く。
𝐼𝑗 =
𝑀
𝐿𝑒𝑛𝑠
𝑊′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝐿 𝑥0 ← 𝑥1 𝑑𝐴 𝑥0 𝑑𝐴(𝑥1 )
- 95. 式変形のまとめ
元の式
𝐼𝑗 =
𝐼𝑗
𝐿𝑒𝑛𝑠
𝑊 𝑥 𝐼 ← 𝑥0 𝐿 𝑥0 ← 𝑥1
cos 2 𝜃
𝑑𝐴 𝑥0 𝑑𝐴 𝐼 𝑗 (𝑥 𝐼 )
𝑟2
𝑑𝐴 𝐼 𝑗 𝑥 𝐼 =
𝐼𝑗 =
𝑉
𝐿𝑒𝑛𝑠
𝑊 𝑥0 ← 𝑥 𝑉 𝐿 𝑥0 ← 𝑥 𝑉
𝑀
𝐿𝑒𝑛𝑠
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1
𝐵𝑟 ′′ cos 𝜃
𝐴𝑟 cos 𝜃 ′′
𝑑𝑉 𝑥 𝑉
𝐵
𝐴
cos2 𝜃
𝑑𝐴 𝑥0
𝑟2
𝑑𝑉 𝑥 𝑉 =
𝐼𝑗 =
𝐵 2
𝐴
𝑟 ′′
𝑟′
2
2
cos 𝜃 ′
𝑑𝐴(𝑥1 )
cos 𝜃 ′′
𝑑𝑉 (𝑥 𝑉 )
2
𝐿 𝑥0 ← 𝑥1 𝑑𝐴 𝑥0 𝑑𝐴(𝑥1 )
𝑊 ′ (𝑥0 ← 𝑥1 ) = 𝑊 𝑥0 ← 𝑥1
最終的な式
𝐼𝑗 =
𝑀
𝐿𝑒𝑛𝑠
𝑊′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝐿 𝑥0 ← 𝑥1 𝑑𝐴 𝑥0 𝑑𝐴(𝑥1 )
𝐵𝑟 ′′ cos 𝜃
𝐴𝑟 cos 𝜃 ′′
2
- 97. レンダリング方程式
𝐿 𝑥0 ← 𝑥1 はレンダリング方程式を使って再帰的に定義される。
𝐿 𝑥0 ← 𝑥1 = 𝐿 𝑒 𝑥0 ← 𝑥1 +
Ω
𝐿 𝑥1 ← 𝑥2 𝑓𝑟 𝑥0 ← 𝑥1 ← 𝑥2 cos 𝜃 𝑑𝜎(𝑥1 ← 𝑥2 )
BRDF
𝐿 𝑥1 ← 𝑥2
𝜃′
𝑥0
𝜃
𝑥1
𝑓𝑟 𝑥0 ← 𝑥1 ← 𝑥2
𝑥2
- 104. 最終的に必要なもの
最終的に以下のようなモンテカルロ積分の和を計算しなければならない
𝑊 ′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝐿 𝑒 (𝑥0 ← 𝑥1 )
𝐼𝑗 =
𝑃 𝐴 𝑥0 𝑃 𝐴 (𝑥1 )
′
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )𝐺 𝑥1 ↔ 𝑥2 𝐿 𝑒 (𝑥1 ← 𝑥2 )
+
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 (𝑥2 )
+⋯
そこで、各頂点ごとの面積測度に関する確率密度(分母)とモンテカルロ
スループット(分子)を求める必要がある。
– カメラ側からのパス、光源側からのパス、両方についてスループットと確率密
度を求める。
– カメラ側のパスと光源側のパスをつなげるときは、それぞれの確率密度とス
ループットを乗算していくことになる。
この結果が、上の式のモンテカルロ積分の和を計算するための一つ一つの
項の推定値になる。(上の式は頂点数ごとに別々のモンテカルロ積分の和
になっており、その各項)
- 105. 最終的に必要なもの
頂点𝑥1 と𝑥2 を新しくつないだので、改めてG項と
BRDFを計算
𝑊 ′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝐿 𝑒 (𝑥0 ← 𝑥1 )
𝐼𝑗 =
𝑃 𝐴 𝑥0 𝑃 𝐴 (𝑥1 )
′
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )𝐺 𝑥1 ↔ 𝑥2 𝐿 𝑒 (𝑥1 ← 𝑥2 )
+
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 (𝑥2 )
′
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )𝐺 𝑥1 ↔ 𝑥2 𝑓𝑟 (𝑥1 ← 𝑥2 ← 𝑥3 )𝐺 𝑥2 ↔ 𝑥3 𝐿 𝑒 (𝑥2 ← 𝑥3 )
+
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 𝑥2 𝑃 𝐴 (𝑥3 )
+⋯
パストレーシングによってサンプリングされた
パス 𝑥0 𝑥1 のスループットと確率密度
ライトトレーシングによってサンプリングされた
パス 𝑥2 𝑥3 のスループットと確率密度
以上のような計算を行うために、前半部分をパストレーシング、後
半部分をライトトレーシングによって得るわけである。
- 106. 最終的に必要なもの
𝑊 ′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝐿 𝑒 (𝑥0 ← 𝑥1 )
𝐼𝑗 =
𝑃 𝐴 𝑥0 𝑃 𝐴 (𝑥1 )
′
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )𝐺 𝑥1 ↔ 𝑥2 𝐿 𝑒 (𝑥1 ← 𝑥2 )
+
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 (𝑥2 )
′
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )𝐺 𝑥1 ↔ 𝑥2 𝑓𝑟 (𝑥1 ← 𝑥2 ← 𝑥3 )𝐺 𝑥2 ↔ 𝑥3 𝐿 𝑒 (𝑥2 ← 𝑥3 )
+
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 𝑥2 𝑃 𝐴 (𝑥3 )
+⋯
上の色を付けた項と対応するパス
𝑦2
𝑥2
𝑥0
𝑦0
𝑥1
𝑥3
𝑦1
- 109. パストレーシングによるサンプリングの例
まず、レンズ上𝑥0 とイメージセンサ上𝑥 𝐼 にサンプルを生成する。この時、
各頂点のサンプリング確率密度も一緒に求める。
–
これが𝑃 𝐴 𝑥0 になる。ソースコード中ではP_lensである。
シーンをトレースし、次々に頂点をサンプリングしていき、各頂点をリス
トに追加していく。
–
–
𝑃 𝐼 𝑗 (𝑥 𝐼 )
𝑥𝐼
𝑁
頂点𝑥 𝑁 を追加するとき、 𝑁までの確率密度の総計( 𝑖=0 𝑃 𝐴 𝑥 𝑖 )とモンテカルロスループッ
トの総計(G項とBRDFの積)が必要になるので、順次計算しておく。
それぞれソースコード中ではtotal_pdf_AとMC_throughputという変数に格納しておく。
イメージセンサ
𝑃 𝐴 (𝑥0 )
𝑥0
レンズ
- 110. パストレーシングによるサンプリングの例
既に見たように、 𝑥0 と𝑥 𝐼 が決まると、シーンをレイトレーシングすること
で最初のシーン上の頂点𝑥1 をサンプリングできる。
–
レンズ上の点から、対応するオブジェクトプレーン上の点の方向にレイを飛ばす。
𝑃 𝐴 𝑥1 を計算する必要があるが、これには以下の関係式を使う。
𝑑𝐴 𝐼 𝑗 𝑥 𝐼 =
𝑑𝑉 𝑥 𝑉 =
𝑃 𝐼 𝑗 (𝑥 𝐼 )
𝑥𝐼
イメージセンサ
𝑃 𝐴 (𝑥0 )
𝑥0
レンズ
𝑥1
𝑟 ′′
𝑟′
𝐵 2
𝐴
2
𝑑𝑉 𝑥 𝑉
cos 𝜃 ′
𝑑𝐴(𝑥1 )
cos 𝜃 ′′
- 111. パストレーシングによるサンプリングの例
𝑑𝐴 𝑎 = 𝐶𝑑𝐵 𝑏 ⟺ 𝐶𝑃 𝐴 𝑎 = 𝑃 𝐵 𝑏 という関係より、以下の式が成り立つ。
この式を使ってイメージセンサ上の確率密度𝑃 𝐼 𝑗 (𝑥 𝐼 )をシーンの面積測度に
関する確率密度𝑃 𝐴 𝑥1 に変換する。
𝑃 𝐴 𝑥1 =
𝐵
𝐴
2
𝑟 ′′
𝑟′
2
cos 𝜃 ′
𝑃 (𝑥 )
cos 𝜃 ′′ 𝐼 𝑗 𝐼
𝑥0
𝑟 ′′
𝜃 ′′
𝑥𝑉
オブジェクトプレーン
レンズ
𝑟′
𝑑𝑉 𝑥 𝑉
𝑑𝐴 𝑥1
𝜃′
𝑥1
- 117. 完全拡散面の場合
普通に半球上から次の方向をサンプリングする。 cos 𝜃 を考慮しているため、
cos 𝜃
となる。この確率密度は次の頂点𝑥2 の分になる。
𝜋
確率密度は
𝜌
さらに、スループットにBRDFの分を乗算する。完全拡散面なので、 とな
𝜋
る。( 𝜌は反射率)このスループットは次の頂点𝑥2 の分になる。
𝑃 𝐴 (𝑥0 )
𝑥0
𝑊 ′ 𝑥0 ← 𝑥1
レンズ
𝐺 𝑥0 ↔ 𝑥1
𝑃 𝜎 (𝑥1 → 𝑥2 )
𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )
𝑥1
𝑃 𝐴 (𝑥1 )
- 122. 完全鏡面の場合
以上より、now_sampled_pdf_omegaは𝛿 𝜎 𝜔 𝑖 − 𝜔 𝑟 となり、スループットにはBRDFである
𝛿 𝜎 𝜔 𝑖 −𝜔 𝑟
cos 𝜃
を乗算すればよいということになる。しかし、𝛿 𝜎 を数値的に表現することはできな
い。
記号的に𝛿 𝜎 の存在を記録してもよいが、最終的なモンテカルロ積分においてBRDFが分子に、
確率密度に分母が来て、一対一対応がとれることから、𝛿 𝜎 は最終的にお互い打ち消しあうと
いう事実を利用する。
つまり、𝛿 𝜎 を抜いた分をnow_sampled_pdf_omegaとすればよいし、モンテカルロスループッ
トも抜いた分で計算する。
𝑃 𝐴 (𝑥0 )
𝑥0
𝑊 ′ 𝑥0 ← 𝑥1
レンズ
𝐺 𝑥0 ↔ 𝑥1
𝑓𝑠 (𝑥0 ← 𝑥1 ← 𝑥2 )
𝑥1
𝑃 𝐴 (𝑥1 )
- 125. パストレーシングによるサンプリングの例
最初の頂点𝑥1 以外は、面積測度に関する確率密度𝑃 𝐴 (𝑥 𝑖 )を、その頂点をサ
ンプリングするための立体角測度に関する確率密度𝑃 𝜎 (𝑥 𝑖−1 → 𝑥 𝑖 )から変換
して求める。
変換には、関係式 𝑃 𝐴 (𝑥 𝑖 ) =
–
𝑃 𝐴 (𝑥2 )
𝑃 𝐴 (𝑥0 )
𝑥2
𝑥0
レンズ
𝑊 ′ 𝑥0 ← 𝑥1
𝐺 𝑥0 ↔ 𝑥1
𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )
𝑥1
𝑃 𝐴 (𝑥1 )
cos 𝜃
𝑟2
𝑃 𝜎 ( 𝑥 𝑖−1
→ 𝑥 𝑖 )を使う。
- 127. パストレーシングによるサンプリングの例
このようにして生成されたパスはモンテカルロ積分に使うことが出来る。
𝑊 ′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝐿 𝑒 (𝑥0 ← 𝑥1 )
𝐼𝑗 =
𝑃 𝐴 𝑥0 𝑃 𝐴 (𝑥1 )
′
𝑊 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )𝐺 𝑥1 ↔ 𝑥2 𝐿 𝑒 (𝑥1 ← 𝑥2 )
+
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 (𝑥2 )
+⋯
𝑃 𝐴 (𝑥4 )
𝑃 𝐴 (𝑥0 )
𝑥2
𝑥0
𝑊 ′ 𝑥0 ← 𝑥1
レンズ
𝐺 𝑥0 ↔ 𝑥1
𝑥4
𝑃 𝐴 (𝑥2 )
𝑓𝑟 (𝑥1 ← 𝑥2 ← 𝑥3 )
𝐺 𝑥1 ↔ 𝑥2
𝐺 𝑥3 ↔ 𝑥4
𝐺 𝑥2 ↔ 𝑥3
𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )
𝑥1
𝑃 𝐴 (𝑥1 )
𝑓𝑟 (𝑥2 ← 𝑥3 ← 𝑥4 )
𝑥3
𝑃 𝐴 (𝑥3 )
- 130. ライトトレーシングによるサンプリングの例
まず、光源上𝑦0 にサンプルを生成する。頂点のサンプリング確率密度も求める。
–
これが𝑃 𝐴 𝑦0 になる。ソースコード中ではpdf_A_on_lightである。
–
半径Rの球上から一様にサンプリングしているため、 𝑃 𝐴 𝑦0 = 4𝜋𝑅2になる。
1
パストレーシングの場合と同様に、シーンをトレースし、次々に頂点をサンプリン
グしていく。
–
–
–
𝑁
頂点𝑦 𝑁 を追加するとき、 𝑁までの確率密度の総計( 𝑖=0 𝑃 𝐴 𝑦 𝑖 )とモンテカルロスループットの総計(G項
とBRDFの積)が必要になるので、順次計算しておく。
それぞれソースコード中ではtotal_pdf_AとMC_throughputという変数に格納しておく。
この辺もパストレーシングの場合と同様。
なお、完全拡散光源なので𝐿 𝑒 𝑦1 ← 𝑦0 は次の頂点𝑦1 をサンプリングしなくても決ま
る。
𝑃 𝐴 𝑦0
𝑦0
光
源
𝐿 𝑒 𝑦1 ← 𝑦0
- 133. ライトトレーシングによるサンプリングの例
レンズ上の点𝑥0 の面積測度に関する確率密度を計算する。これは、𝑃 𝜎 (𝑦1 ← 𝑦0 )
の測度を面積測度に変換することで行う。
–
パストレーシングの時と同様にして測度を変換する。
また、G項も計算する。
さらに、イメージセンサのセンシティビティ諸々を含めた項、W’も計算する。
–
この段階のトータルのコントリビューション(モンテカルロスループット/パスの確率密度)も
計算しておく。
𝑃 𝐴 𝑦0
𝑦0
レンズ
𝐺 𝑥0 ↔ 𝑦0
𝑊 ′ 𝑥0 ← 𝑦0
𝑥𝐼
イメージセンサ
𝑥0
𝑃 𝐴 𝑥0
光
源
𝐿 𝑒 𝑦1 ← 𝑦0
- 137. まとめ
解きたいモンテカルロ積分について、
– 分子(モンテカルロスループット)
• 光源における放射輝度×それ以降の頂点間のBRDFの積×それ以降の頂点間のG項の積×
センサのセンシティビティ等の項(W’)
– 分母(確率密度)
• 各頂点をサンプリングするための面積測度に関する確率密度の積
が必要なので、パストレーシング or ライトトレーシングによってこれを頂
点ごとに逐次求めていく。
– この結果を組み合わせて双方向パストレーシングを実行する。
- 139. パスの接続の例
パストレーシングによってサンプリングされたパス𝑥0 𝑥1 𝑥2 とライトトレー
シングによってサンプリングされたパス𝑦1 𝑦0 を接続すると、以下のような
五頂点分のモンテカルロ積分を解くことに相当する。
–
–
total_pdf_Aや、MC_throughputは、以下を計算するためのものだった。
下の式の緑の部分の分母と分子が、generate_vertices_by_pathtracing ()によって得られる頂点
リストの要素であるVertex構造体のメンバ、total_pdf_A とthroughputに対応する。
•
この場合は、𝑥2 の分までなので、3番目の要素のメンバになる。
同様にオレンジの部分はgenerate_vertices_by_lighttracing ()によって得られる。
黒い部分は頂点の接続によって新たに計算される。
–
–
𝑊 ′ 𝑥0 ← 𝑥1 𝐺 𝑥0 ↔ 𝑥1 𝑓𝑟 𝑥0 ← 𝑥1 ← 𝑥2 𝐺 𝑥1 ↔ 𝑥2 𝑓𝑟 𝑥1 ← 𝑥2 ← 𝑦1 𝐺 𝑥2 ↔ 𝑦1 𝑓𝑟 𝑥2 ← 𝑦1 ← 𝑦0 𝐺 𝑦1 ↔ 𝑦0 𝐿 𝑒 𝑦1 ← 𝑦0
𝑃 𝐴 𝑥0 𝑃 𝐴 𝑥1 𝑃 𝐴 (𝑥2 )𝑃 𝐴 (𝑦0 )𝑃 𝐴 (𝑦1 )
𝑃 𝐴 (𝑥2 )
𝑥2
𝑃 𝐴 (𝑥0 )
𝑥0
𝑊
′
𝑃 𝐴 𝑦0
𝑦0
𝑓𝑟 (𝑥1 ← 𝑥2 ← 𝑦1 )
𝑥0 ← 𝑥1
𝐺 𝑥1 ↔ 𝑥2
レンズ
𝐺 𝑥0 ↔ 𝑥1
𝑓𝑟 (𝑥0 ← 𝑥1 ← 𝑥2 )
𝑥1
𝑃 𝐴 (𝑥1 )
𝐺 𝑥2 ↔ 𝑦1
𝐺 𝑦1 ↔ 𝑦0
𝑓𝑟 (𝑥2 ← 𝑦1 ← 𝑦0 )
𝑦1
𝑃 𝐴 𝑦1
光
源
𝐿 𝑒 𝑦1 ← 𝑦0
- 140. パスの接続とモンテカルロ積分
以下、具体的な例。
頂点数が3のカメラ側のパスと頂点数が2のライト側のパスを接続した場合、
新たに頂点数5のパスが得られる。
頂点数が2のカメラ側のパスと頂点数が3のライト側のパスを接続した場合
も、新たに頂点数5のパスが得られる。
この二つのパスは、頂点数5の積分に対するモンテカルロ積分を異なるサン
プリング戦略でサンプリングして得られたサンプル(パス)である、と考
える。
よって、それぞれのパスによるモンテカルロ積分を独立に行い、その結果
をマルチプルインポータンスサンプリングによって重み付けして統合する
必要がある。
–
同じ積分に対するモンテカルロ積分を、異なるサンプリング戦略で独立に解いた場合、各々
の結果をマルチプルインポータンスサンプリングによって統合するのだった。
3
𝑊 ′ 𝑥0 ← 𝑥1
𝑀
𝑀
𝑀
𝑀
𝐿𝑒𝑛𝑠
2
𝐺 𝑥 𝑖 ↔ 𝑥 𝑖+1
𝑖=0
𝑓𝑟 𝑥 𝑖 ← 𝑥 𝑖+1 ← 𝑥 𝑖+2 𝐿 𝑒 (𝑥3 ← 𝑥4 )𝑑𝐴(𝑥0 ) 𝑑𝐴(𝑥1 ) 𝑑𝐴(𝑥2 ) 𝑑𝐴(𝑥3 ) 𝑑𝐴(𝑥4 )
𝑖=0
頂点数5の積分
- 157. MISの重み計算
あるeyeサブパスとlightサブパスから成るパスに対応するMISの重みを計算
することについて考える。
–
–
–
lightサブパスの頂点数を𝑠、eyeサブパスの頂点数を𝑡とする。
𝑘 = 𝑠 + 𝑡 − 1とする。
eyeサブパスを𝑥0 𝑥1 … 𝑥 𝑡−1 、lightサブパスを𝑦 𝑠−1 … 𝑦1 𝑦0 とする。
–
接続後のパスを 𝑥 = 𝑥0 𝑥1 … 𝑥 𝑡−1 𝑦 𝑠−1 … 𝑦1 𝑦0 とする。
パワーヒューリスティックを使うと、重みは以下のようになる。
–
–
–
ただし、𝑝 𝑠,𝑡 𝑥 は頂点数𝑠 + 𝑡のモンテカルロ積分に対するサンプリング戦略の一つで、eye
サブパスの頂点数𝑡、lightサブパスの頂点数𝑠の場合の𝑥 のサンプリング確率密度。
既に説明したとおり、eyeサブパスの頂点数𝑡 、lightサブパスの頂点数𝑠のモンテカルロ積分
は、頂点数𝑠 + 𝑡の積分に対するモンテカルロ積分の一つである(サンプリング戦略の一
つ)。この時、同じ頂点数𝑠 + 𝑡のモンテカルロ積分に対して、全部で𝑠 + 𝑡 + 1種類のサンプ
リング戦略が考えられるので、以下のような式になる。
𝑠 + 𝑡 + 1種類のサンプリング戦略とは、すなわちeyeサブパス、lightサブパスの頂点数の組
み合わせの数である。
𝑤 𝑠,𝑡 𝑥 =
𝑠+𝑡
𝑗=0
𝑝 𝑠,𝑡 𝑥
𝑝 𝑗, 𝑠+𝑡
𝛽
−𝑗
𝑥
𝛽
- 158. MISの重み計算の例
あるeyeサブパスとlightサブパスから成るパスに対応するMISの重みを計算
することについて考える。
–
eyeサブパスの頂点数を𝟐、lightサブパスの頂点数を𝟑とする。
パワーヒューリスティックを使うと、重みは以下のようになる。
–
𝑥 を「仮に」eyeサブパスの頂点数5、lightサブパスの頂点数0の様なサンプリングによって得
られたとしたときの、確率密度が𝑝0,5 𝑥 。𝑝1,4 𝑥 や𝑝3,2 𝑥 等も同様。
𝑤3,2 𝑥 =
𝑝0,5 𝑥
𝛽
+ 𝑝1,4 𝑥
𝛽
+ 𝑝2,3
𝑝3,2 𝑥 𝛽
𝑥 𝛽 + 𝑝3,2 𝑥
𝛽
+ 𝑝4,1 𝑥
𝛽
+ 𝑝5,0 𝑥
𝛽
- 162. MISの重みの効率的計算
頂点数の合計が一定であることから、𝑝 𝑠,𝑡 𝑥 を以下のように書き直す。
–
𝑖はあるサンプリング戦略における、lightサブパスの頂点数を示す。
𝑝 𝑖 𝑥 = 𝑝 𝑖,
𝑠+𝑡 −𝑖
𝑥
𝑝 𝑖 𝑥 を𝑖 = 0から𝑠 + 𝑡の範囲で計算すれば重みは計算できるが、単純にこれ
を行うと効率が悪い。そこで、まず𝑝 𝑖 𝑥 と𝑝 𝑖+1 𝑥 の比、
𝑝 𝑖+1 𝑥
𝑝𝑖 𝑥
その結果に基づいて𝑝 𝑖 𝑥 を計算することにする。
ソースコード中ではこの比はpi1_piという配列が対応する。
を計算して、
- 163. MISの重みの効率的計算
比の計算は以下のようにして行う。
𝑖 = 0の時、
𝑝1 𝑥
𝑝0 𝑥
=
𝐿
𝑃 𝐴𝐸 𝑥0 𝑃 𝐴𝐸 𝑥1 …𝑃 𝐴𝐸 𝑥 𝑘−1 𝑃 𝐴 (𝑦0 )
𝑃 𝐴𝐸 𝑥0 𝑃 𝐴𝐸 𝑥1 …𝑃 𝐴𝐸 𝑥 𝑘−1 𝑃 𝐴𝐸 (𝑥 𝑘 )
=
𝐿
𝑃 𝐴 (𝑦0 )
𝑃 𝐴𝐸 (𝑥 𝑘 )
=
𝐿
𝑃 𝐴 (𝑧0 )
𝑃 𝐴𝐸 (𝑧0 )
ただし、𝑃 𝐴𝐸 𝑥 は、パストレーシングによって頂点𝑥がサンプリングされたと
きの、面積測度に関する確率密度で、𝑃 𝐴𝐿 𝑥 は、ライトトレーシングによっ
て頂点𝑥がサンプリングされたときの、面積測度に関する確率密度。
𝑃 𝐴𝐿 𝑦0 = 𝑃 𝐴𝐿 (𝑧0 )は頂点が光源上からサンプリングされる確率密度で、これは
計算済み。
𝑃 𝐴𝐸 𝑥 𝑘 = 𝑃 𝐴𝐸 𝑧0 を計算するわけだが、実際の分布は𝑃 𝜎𝐸 (𝑧1 → 𝑧0 )に基づいて
いるため、ひとつ前の頂点の情報も必要になる。さらに、𝑧1 がスペキュラ上
に存在した場合、さらにその一つ前の頂点𝑧2 の情報に必要になるので、都合
三つ分の頂点を使って𝑃 𝐴𝐸 𝑧0 を計算することになる。
–
–
この計算はcalc_pdf_A()が行う。
なお、頂点をlightサブパスの始点が最初に来るように一列に並べていたので、𝑥 𝑘 は頂点配列上
では𝑧0 に対応し、𝑦0 も𝑧0 に対応している。
- 165. MISの重みの効率的計算
0 < 𝑖 < 𝑘の時、
𝑝 𝑖+1 𝑥
𝑝𝑖 𝑥
=
𝐿
𝐿
𝐿
𝐿
𝑃 𝐴𝐸 𝑥0 𝑃 𝐴𝐸 𝑥1 …𝑃 𝐴𝐸 𝑥 𝑘− 𝑖+1 𝑃 𝐴 𝑦 𝑖 𝑃 𝐴 𝑦 𝑖−1 …𝑃 𝐴 𝑦1 𝑃 𝐴 (𝑦0 )
𝐿
𝐿
𝐿
𝑃 𝐴𝐸 𝑥0 𝑃 𝐴𝐸 𝑥1 …𝑃 𝐴𝐸 𝑥 𝑘−(𝑖+1) 𝑃 𝐴𝐸 𝑥 𝑘−𝑖 𝑃 𝐴 𝑦 𝑖−1 …𝑃 𝐴 𝑦1 𝑃 𝐴 (𝑦0 )
=
𝐿
𝑃 𝐴 (𝑦 𝑖 )
𝑃 𝐴𝐸 (𝑥 𝑘−𝑖 )
=
𝐿
𝑃 𝐴 (𝑧 𝑖 )
𝑃 𝐴𝐸 (𝑧 𝑖 )
𝑝 𝑖 𝑥 はlightサブパス頂点数iのサンプリング戦略なので、同じパスについて、𝑦0 から𝑦 𝑖−1
は𝑃 𝐴𝐿 でサンプリングし、 𝑥 𝑘−𝑖 から𝑥0 は𝑃 𝐴𝐸 でサンプリングすることになる。
先ほどと同様に、対応する頂点のサンプリング確率密度を、その前の頂点の情報を使っ
て計算していく。
一列に並べた頂点配列上で、𝑦 𝑖 に対応するインデックスは𝑖で、その前の頂点は(ライト
トレーシングなので)𝑖 − 1, 𝑖 − 2になる。つまり𝑧 𝑖−2 , 𝑧 𝑖−1 , 𝑧 𝑖 。
𝑥 𝑘−𝑖 に対応するインデックスも𝑖で、その前の頂点は(パストレーシングなので)
𝑖 + 1, 𝑖 + 2になる。つまり𝑧 𝑖+2 , 𝑧 𝑖+1 , 𝑧 𝑖 。
- 166. MISの重みの効率的計算
𝑖 = 𝑘の時、
𝑝 𝑘+1 𝑥
𝑝𝑘 𝑥
=
𝐿
𝐿
𝐿
𝐿
𝑃 𝐴 𝑦 𝑘 𝑃 𝐴 𝑦 𝑘−1 …𝑃 𝐴 𝑦1 𝑃 𝐴 (𝑦0 )
𝐿
𝐿
𝐿
𝑃 𝐴𝐸 𝑥0 𝑃 𝐴 𝑦 𝑘−1 …𝑃 𝐴 𝑦1 𝑃 𝐴 (𝑦0 )
=
𝐿
𝑃 𝐴 (𝑦 𝑘 )
𝑃 𝐴𝐸 (𝑥0 )
=
𝐿
𝑃 𝐴 (𝑧 𝑘 )
𝑃 𝐴𝐸 (𝑧 𝑘 )
𝑃 𝐴𝐸 (𝑥0 ) は頂点がレンズ上からサンプリングされる確率密度で、これは計算済み。
- 167. MISの重みの効率的計算
次に、比を使って𝑝 𝑖 𝑥 を計算する。まず、初期値として𝑝 𝑠 𝑥 を与える。こ
れは、「実際に」サンプリングされたパスの確率密度なので、すでに求
まっている。
あとは、
𝑝 𝑖+1 𝑥
𝑝𝑖 𝑥
が全て分かっているため、 𝑝 𝑠 𝑥 から初めてすべての𝑝 𝑖 𝑥 を
計算することが出来る。
- 168. calc_pdf_A()
𝑃 𝐴𝐸 𝑥 と𝑃 𝐴𝐿 𝑦 を計算する関数。今回はパストレーシングもライトトレーシ
ングも頂点のサンプリング自体はほとんど同じなので、共通の関数でよい。
基本的に、始点と次の頂点を与えられると次の頂点の面積測度に関するサ
ンプリング確率密度を返す。スペキュラの考慮のため、始点のひとつ前の
頂点も与える。