このページでは物理ベースレンダリングの理論的な部分について解説を行う。
光の性質を記述する方法
光の性質を記述する方法は大きく分けて2つある。
幾何光学
光が直線であると仮定して光の性質を記述する。
波動光学
光が波であると仮定して光の性質を記述する。干渉と回折を表現することができる。
物理ベースレンダリングにおいては幾何光学による光の表現を主に利用する。
光の物理量
光子のエネルギー
振動数ν \nu ν の光子一つが持つエネルギーe ν e_{\nu} e ν は以下の式で表される。
e ν = h ν e_{\nu} = h\nu e ν = h ν
h h h はプランク定数である。
ν = c λ \nu = \frac{c}{\lambda} ν = λ c の関係から、波長λ \lambda λ の光子一つが持つエネルギーe λ e_{\lambda} e λ は以下の式で表される。
e λ = h c λ e_{\lambda} = \frac{hc}{\lambda} e λ = λ h c
光のエネルギー
波長λ \lambda λ の光子がn n n 個あるとき、スペクトル放射エネルギー Q λ Q_{\lambda} Q λ は以下の式で表される。
Q λ = n e λ = n h c λ Q_{\lambda} = n e_{\lambda} = n \frac{hc}{\lambda} Q λ = n e λ = n λ h c
放射エネルギー Q [ J ] Q[J] Q [ J ] は全波長にわたってスペクトル放射エネルギーを積分することで得られる。
Q = ∫ 0 ∞ Q λ d λ Q = \int_0^{\infty} Q_{\lambda} d\lambda Q = ∫ 0 ∞ Q λ d λ
放射束(Radiant Flux)
放射束 Φ [ W ] \Phi[W] Φ [ W ] は単位時間あたりの放射エネルギーである。
Φ = d Q d t \Phi = \frac{dQ}{dt} Φ = d t d Q
放射束
イメージ的にはある領域を単位時間あたりに通過する光子の量と考えられる。物理ベースレンダリングでは放射束が光の基本的な物理量となる。
波長について考慮する場合はスペクトル放射束 Φ λ \Phi_{\lambda} Φ λ を使用する。
Φ λ = d Q λ d t \Phi_{\lambda} = \frac{dQ_{\lambda}}{dt} Φ λ = d t d Q λ
放射束面密度
放射束面密度 [ W ⋅ m − 2 ] [W\cdot m^{-2}] [ W ⋅ m − 2 ] は単位面積d A dA d A あたりの放射束である。
d Φ d A \frac{d\Phi}{dA} d A d Φ
放射束面密度
単位面積を単位時間に通過する光子の数と考えることができる。つまり、ある点を単位時間に通過する光子の数である。
入射してくる光に対する放射束面密度は放射照度(Irradiance) E E E といい、出射する光に対する放射束面密度は放射発散度(Radient Exitance) M M M という。ただ入射と出射で名前が変わっただけで中身は同じ。
例
半径r r r の球が放射束a a a で光っているとする。すると球面上の放射束面密度は次の式で表される。
a 4 π r 2 \frac{a}{4\pi r^2} 4 π r 2 a
立体角(Solid Angle)
立体角は光線の方向と角度的な大きさを表現する概念であり、以下のように定義される。
点O O O を中心とした半径1の単位球面に面S S S を投影したときの面積がΩ \Omega Ω ならば、点O O O に対する面S S S の立体角をΩ \Omega Ω とする
立体角
単位球面上で面積が1になるような角度が単位立体角である。立体角の単位はステラジアン[ s r ] [sr] [ s r ] 。
放射強度(Radient Intensity)
放射強度 I [ W ⋅ s r − 1 ] I[W\cdot sr^{-1}] I [ W ⋅ s r − 1 ] は単位立体角d ω ⃗ d\vec{\omega} d ω あたりの放射束である。
I = d Φ d ω ⃗ I = \frac{d\Phi}{d\vec{\omega}} I = d ω d Φ
放射強度
放射強度はある領域において、ある方向から単位時間あたりに来る光子の数を表している。
放射輝度(Radiance)
放射輝度 L [ W ⋅ m − 2 ⋅ s r − 1 ] L[W\cdot m^{-2}\cdot sr^{-1}] L [ W ⋅ m − 2 ⋅ s r − 1 ] は単位立体角あたりの単位面積あたりの放射束である。物理ベースレンダリングにおいて最も重要な物理量。
L ( x , ω ⃗ ) = d 2 Φ cos θ d A d ω ⃗ L(x, \vec{\omega}) = \frac{d^2\Phi}{\cos{\theta}dAd\vec{\omega}} L ( x , ω ) = cos θ d A d ω d 2 Φ
放射輝度
θ \theta θ は微小領域d A dA d A の法線とω ⃗ \vec{\omega} ω のなす角度である。cos θ d A \cos{\theta}dA cos θ d A はd A dA d A をω ⃗ \vec{\omega} ω の方向に投影した面積である。
放射輝度は方向ω ⃗ \vec{\omega} ω から微小領域d A dA d A に単位時間あたりに来る光子の数と考えることができる。
放射輝度は空間中のある一点において、ある方向から来る光の強さを表している。物理ベースレンダリングにおいて最も重要な物理量である。
真空中においては光が進行しても放射輝度の値は変化しない 。
放射輝度から放射束面密度を求める
ある物体表面の位置をx x x とし、方向d ω ⃗ d\vec{\omega} d ω から来る放射輝度をL ( x , ω ⃗ ) L(x, \vec{\omega}) L ( x , ω ) で表す。あらゆる方向から来る放射輝度の値が事前に分かっている場合、x x x における放射束面密度は
d Φ d A = ∫ Ω L ( x , ω ⃗ ) ( ω ⃗ ⋅ n ⃗ ) d ω ⃗ \frac{d\Phi}{dA} = \int_{\Omega}L(x, \vec{\omega})(\vec{\omega}\cdot\vec{n})d\vec{\omega} d A d Φ = ∫ Ω L ( x , ω ) ( ω ⋅ n ) d ω
と計算できる。
放射輝度から放射束面密度を計算
ここでn ⃗ \vec{n} n はx x x における物体表面の法線方向、Ω \Omega Ω はすべての方向(つまり全球)を表す。
放射輝度から放射束を求める
ある領域A A A の放射束は以下の式で計算できる。
Φ = ∫ A ∫ Ω L ( x , ω ⃗ ) ( ω ⃗ ⋅ n ⃗ ) d ω ⃗ d A \Phi = \int_{A}\int_{\Omega}L(x, \vec{\omega})(\vec{\omega}\cdot\vec{n})d\vec{\omega}dA Φ = ∫ A ∫ Ω L ( x , ω ) ( ω ⋅ n ) d ω d A
立体角と球面座標
球面座標( θ , ϕ ) (\theta, \phi) ( θ , ϕ ) を用いて単位立体角を表すことができる。(ヤコビアンを計算すると求まる)
d ω ⃗ = sin θ d θ d ϕ d\vec{\omega} = \sin{\theta}d\theta d\phi d ω = sin θ d θ d ϕ
これを用いると、半球方向全体Ω \Omega Ω における、ある関数f f f の立体角による積分は、球面座標を用いて次のように書き直せる。
∫ Ω f ( ω ⃗ ) d ω ⃗ = ∫ 0 2 π ∫ 0 π 2 f ( θ , ϕ ) sin θ d θ d ϕ \int_{\Omega} f(\vec{\omega})d\vec{\omega} = \int_0^{2\pi}\int_0^{\frac{\pi}{2}}f(\theta, \phi)\sin{\theta}d\theta d\phi ∫ Ω f ( ω ) d ω = ∫ 0 2 π ∫ 0 2 π f ( θ , ϕ ) sin θ d θ d ϕ
半球全体での立体角による積分は物理ベースレンダリングにおいて頻出であり、この変換は特に重要。
双方向反射率分布関数(BRDF)
光は物体表面に到達すると一部が吸収され、残りは反射される。点x x x に方向ω i ⃗ \vec{\omega_i} ω i から入射した光が、方向ω r ⃗ \vec{\omega_r} ω r にどれだけ反射されるかを表す関数として双方向反射率分布関数(BRDF) f ( x , ω i ⃗ , ω r ⃗ ) f(x, \vec{\omega_i}, \vec{\omega_r}) f ( x , ω i , ω r ) がある。
f ( x , ω i ⃗ , ω r ⃗ ) = d L r ( x , ω r ⃗ ) d E i ( x , ω i ) = d L r ( x , ω r ⃗ ) L i ( x , ω i ⃗ ) ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ f(x, \vec{\omega_i}, \vec{\omega_r}) = \frac{dL_r(x, \vec{\omega_r})}{dE_i(x, \omega_i)} = \frac{dL_r(x, \vec{\omega_r})}{L_i(x, \vec{\omega_i})(\vec{\omega_i}\cdot \vec{n})d\vec{\omega_i}} f ( x , ω i , ω r ) = d E i ( x , ω i ) d L r ( x , ω r ) = L i ( x , ω i ) ( ω i ⋅ n ) d ω i d L r ( x , ω r )
BRDF
BRDFには次の重要な性質がある。
f ( x , ω i ⃗ , ω r ⃗ ) = f ( x , ω r ⃗ , ω i ⃗ ) f(x, \vec{\omega_i}, \vec{\omega_r}) = f(x, \vec{\omega_r}, \vec{\omega_i}) f ( x , ω i , ω r ) = f ( x , ω r , ω i )
入射方向と反射方向を入れ替えてもBRDFの値は変化しない。これは ヘルツホルムの相反性の法則 と呼ばれる。
また、受け取った以上の光を返すことはありえないので
∫ Ω f ( x , ω i ⃗ , ω r ⃗ ) ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ ≤ 1 \int_{\Omega} f(x, \vec{\omega_i}, \vec{\omega_r})(\vec{\omega_i}\cdot\vec{n})d\vec{\omega_i} \le 1 ∫ Ω f ( x , ω i , ω r ) ( ω i ⋅ n ) d ω i ≤ 1
が成り立つ。
BRDFを使うと半球全体Ω \Omega Ω からある点x x x に来た光が、方向ω r ⃗ \vec{\omega_r} ω r に反射される放射輝度の値L r ( x , ω r ⃗ ) L_r(x, \vec{\omega_r}) L r ( x , ω r ) は以下の式で表せる。
L r ( x , ω r ⃗ ) = ∫ Ω f ( x , ω i ⃗ , ω r ⃗ ) L i ( x , ω i ⃗ ) ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ L_r(x, \vec{\omega_r}) = \int_{\Omega}f(x, \vec{\omega_i}, \vec{\omega_r})L_i(x, \vec{\omega_i})(\vec{\omega_i}\cdot \vec{n})d\vec{\omega_i} L r ( x , ω r ) = ∫ Ω f ( x , ω i , ω r ) L i ( x , ω i ) ( ω i ⋅ n ) d ω i
反射する放射輝度の計算
ここでL i ( x , ω i ⃗ ) L_i(x, \vec{\omega_i}) L i ( x , ω i ) は方向ω i ⃗ \vec{\omega_i} ω i から入射する放射輝度、n ⃗ \vec{n} n は点x x x における物体表面の法線を表す。
レンダリング方程式
物体表面のある点x x x から方向ω r ⃗ \vec{\omega_r} ω r へ向かう放射輝度L o ( x , ω r ⃗ ) L_o(x, \vec{\omega_r}) L o ( x , ω r ) は以下の式で表せる。
L o ( x , ω r ⃗ ) = L e ( x , ω r ⃗ ) + L r ( x , ω r ⃗ ) = L e ( x , ω r ⃗ ) + ∫ Ω f ( x , ω i ⃗ , ω r ⃗ ) L i ( x , ω i ⃗ ) ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ \begin{aligned}L_o(x, \vec{\omega_r}) &= L_e(x, \vec{\omega_r}) + L_r(x, \vec{\omega_r}) \\ &= L_e(x, \vec{\omega_r}) + \int_{\Omega}f(x, \vec{\omega_i}, \vec{\omega_r})L_i(x, \vec{\omega_i})(\vec{\omega_i}\cdot \vec{n})d\vec{\omega_i}
\end{aligned} L o ( x , ω r ) = L e ( x , ω r ) + L r ( x , ω r ) = L e ( x , ω r ) + ∫ Ω f ( x , ω i , ω r ) L i ( x , ω i ) ( ω i ⋅ n ) d ω i
レンダリング方程式
L e ( x , ω r ⃗ ) L_e(x, \vec{\omega_r}) L e ( x , ω r ) は点x x x において物体が発光し、ω r ⃗ \vec{\omega_r} ω r の方向へ出射される放射輝度の値を表している。L r ( x , ω r ⃗ ) L_r(x, \vec{\omega_r}) L r ( x , ω r ) はx x x からω r ⃗ \vec{\omega_r} ω r に反射される放射輝度の量である。この式は物理ベースレンダリングにおいて最も重要な式であり、レンダリング方程式(Light Transport Equation) という。
画素に入る放射輝度
たとえばカメラに方向ω r ⃗ \vec{\omega_r} ω r から入射する放射輝度の値はL o ( x , ω r ⃗ ) L_o(x, \vec{\omega_r}) L o ( x , ω r ) である。したがって、物理ベースレンダリングにおいてはレンダリング方程式を解くことが主眼となる。
レンダリング方程式は再帰的に計算することができる。L i ( x , ω i ⃗ ) L_i(x, \vec{\omega_i}) L i ( x , ω i ) の部分は他のある点x ′ x' x ′ からω i ⃗ \vec{\omega_i} ω i の方向に飛んできた光と考えることができる。したがって
L o ( x , ω r ⃗ ) = L e ( x , ω r ⃗ ) + ∫ Ω f ( x , ω i ⃗ , ω r ⃗ ) { L e ( x ′ , ω i ⃗ ) + ∫ Ω f ( x ′ , ω i ′ ⃗ , ω i ⃗ ) L i ( x ′ , ω i ⃗ ) ( ω i ′ ⃗ ⋅ n ′ ⃗ ) d ω i ′ ⃗ } ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ L_o(x, \vec{\omega_r}) = L_e(x, \vec{\omega_r}) + \int_{\Omega} f(x, \vec{\omega_i}, \vec{\omega_r})\{L_e(x', \vec{\omega_i}) + \int_{\Omega}f(x', \vec{\omega_i'}, \vec{\omega_i})L_i(x', \vec{\omega_i})(\vec{\omega_i'}\cdot\vec{n'})d\vec{\omega_i'}\}(\vec{\omega_i}\cdot\vec{n})d\vec{\omega_i} L o ( x , ω r ) = L e ( x , ω r ) + ∫ Ω f ( x , ω i , ω r ) { L e ( x ′ , ω i ) + ∫ Ω f ( x ′ , ω i ′ , ω i ) L i ( x ′ , ω i ) ( ω i ′ ⋅ n ′ ) d ω i ′ } ( ω i ⋅ n ) d ω i
となる。
レンダリング方程式の展開
さらにL i ( x ′ , ω i ′ ⃗ ) L_i(x', \vec{\omega_i'}) L i ( x ′ , ω i ′ ) の部分を無限に展開していくことができる。
上の式は非常に複雑である。式を簡単にするために積分オペレーターT T T を導入する。
< T g > ( x , ω r ⃗ ) = ∫ Ω f ( x , ω i ⃗ , ω r ⃗ ) g ( x , ω i ⃗ ) ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ <T g>(x, \vec{\omega_r}) = \int_{\Omega}f(x, \vec{\omega_i}, \vec{\omega_r})g(x, \vec{\omega_i})(\vec{\omega_i}\cdot \vec{n})d\vec{\omega_i} < T g > ( x , ω r ) = ∫ Ω f ( x , ω i , ω r ) g ( x , ω i ) ( ω i ⋅ n ) d ω i
これを使うとレンダリング方程式は以下のように書ける。
L = L e + T L L = L_e + TL L = L e + T L
L L L はL o ( x , ω r ⃗ ) L_o(x, \vec{\omega_r}) L o ( x , ω r ) を、L e L_e L e はL e ( x , ω r ⃗ ) L_e(x, \vec{\omega_r}) L e ( x , ω r ) を表している。これを再帰的に展開することにより、
L = L e + T ( L e + T ( L e + … L = L_e + T(L_e + T(L_e + \dots L = L e + T ( L e + T ( L e + …
L = L e + T L e + T 2 L e + T 3 L e + ⋯ = ∑ k = 0 ∞ T k L e L = L_e + TL_e + T^2L_e + T^3L_e + \dots = \sum_{k = 0}^{\infty}T^kL_e L = L e + T L e + T 2 L e + T 3 L e + ⋯ = k = 0 ∑ ∞ T k L e
このように表現することができる。この形をノイマン級数展開という。T L e TL_e T L e は一回の反射を経た光、T 2 L e T^2L_e T 2 L e は二回の反射を経た光を表している。
2点形式のレンダリング方程式
上のレンダリング方程式では立体角に関する積分によって反射される放射輝度を表現していた。これを物体表面上の点x ′ x' x ′ に関する積分に置き換えることができる。
x x x からω i ⃗ \vec{\omega_i} ω i の方向にx ′ x' x ′ があるとする。すると単位立体角d ω i ⃗ d\vec{\omega_i} d ω i の面積はx ′ x' x ′ において
∥ x ′ − x ∥ 2 d ω i ⃗ \|x' - x\|^2d\vec{\omega_i} ∥ x ′ − x ∥ 2 d ω i
となっている。
x ′ x' x ′ における物体の法線をn ′ ⃗ \vec{n'} n ′ とすると、この面積を物体表面A A A に投影することでd A dA d A とd ω i ⃗ d\vec{\omega_i} d ω i の間には
d A = ∥ x ′ − x ∥ 2 ( ω i ⃗ ⋅ n ′ ⃗ ) d ω i ⃗ dA = \frac{\|x' - x\|^2}{(\vec{\omega_i}\cdot\vec{n'})}d\vec{\omega_i} d A = ( ω i ⋅ n ′ ) ∥ x ′ − x ∥ 2 d ω i
の関係がある。
物体表面に関する積分
これより
d ω i ⃗ = ( ω i ⃗ ⋅ n ′ ⃗ ) ∥ x ′ − x ∥ 2 d A d\vec{\omega_i} = \frac{(\vec{\omega_i}\cdot\vec{n'})}{\|x' - x\|^2}dA d ω i = ∥ x ′ − x ∥ 2 ( ω i ⋅ n ′ ) d A
を得る。この変換も頻出なのでよく覚えておいてほしい。これを立体角積分のレンダリング方程式に代入することで以下の式を得る。
L o ( x , ω r ⃗ ) = L e ( x , ω r ⃗ ) + ∫ A f ( x , x ′ → x , ω r ⃗ ) L i ( x ′ → x ) V ( x , x ′ ) ( ( x → x ′ ) ⋅ n ⃗ ) ( ( x ′ → x ) ⋅ n ′ ⃗ ) ∥ x ′ − x ∥ 2 d A L_o(x, \vec{\omega_r}) = L_e(x, \vec{\omega_r}) + \int_Af(x, x'\rightarrow x, \vec{\omega_r})L_i(x'\rightarrow x)V(x, x')\frac{((x \rightarrow x')\cdot\vec{n})((x' \rightarrow x)\cdot\vec{n'})}{\|x' - x\|^2}dA L o ( x , ω r ) = L e ( x , ω r ) + ∫ A f ( x , x ′ → x , ω r ) L i ( x ′ → x ) V ( x , x ′ ) ∥ x ′ − x ∥ 2 ( ( x → x ′ ) ⋅ n ) ( ( x ′ → x ) ⋅ n ′ ) d A
x → x ′ x\rightarrow x' x → x ′ はx x x からx ′ x' x ′ に向かう方向を表す。A A A は物体表面全体を表す。V ( x , x ′ ) V(x, x') V ( x , x ′ ) は可視関数といい
V ( x , x ′ ) = { 1 ( x ′ が x から見える ) 0 ( o t h e r w i s e ) V(x, x') = \begin{cases} 1&(x'\text{が}x\text{から見える})\\0&(otherwise) \end{cases} V ( x , x ′ ) = { 1 0 ( x ′ が x から見える ) ( o t h e r w i s e )
のように定義される。式が煩雑なので幾何項G ( x , x ′ ) G(x, x') G ( x , x ′ ) を定義する。
G ( x , x ′ ) = ( ( x → x ′ ) ⋅ n ⃗ ) ( ( x ′ → x ) ⋅ n ′ ⃗ ) ∥ x ′ − x ∥ 2 G(x, x') = \frac{((x \rightarrow x')\cdot\vec{n})((x'\rightarrow x)\cdot\vec{n'})}{\|x' - x\|^2} G ( x , x ′ ) = ∥ x ′ − x ∥ 2 ( ( x → x ′ ) ⋅ n ) ( ( x ′ → x ) ⋅ n ′ )
すると2点形式のレンダリング方程式は以下のように書ける。
L o ( x , ω r ⃗ ) = L e ( x , ω r ⃗ ) + ∫ A f ( x , x → x ′ , ω r ⃗ ) L i ( x ′ → x ) V ( x , x ′ ) G ( x , x ′ ) d A L_o(x, \vec{\omega_r}) = L_e(x, \vec{\omega_r}) + \int_Af(x, x\rightarrow x', \vec{\omega_r})L_i(x'\rightarrow x)V(x, x')G(x, x')dA L o ( x , ω r ) = L e ( x , ω r ) + ∫ A f ( x , x → x ′ , ω r ) L i ( x ′ → x ) V ( x , x ′ ) G ( x , x ′ ) d A
2点形式のレンダリング方程式
3点形式のレンダリング方程式
3点x , x ′ , x ′ ′ x, x', x'' x , x ′ , x ′ ′ を使用し、単純に2点形式のレンダリング方程式においてω r ⃗ \vec{\omega_r} ω r を置き換えることで以下の3点形式のレンダリング方程式を得る。
L o ( x ′ → x ) = L e ( x ′ → x ) + ∫ A f ( x ′ ′ → x ′ → x ) L i ( x ′ ′ → x ) V ( x ′ , x ′ ′ ) G ( x ′ , x ′ ′ ) d A L_o(x'\rightarrow x) = L_e(x'\rightarrow x)+\int_A f(x''\rightarrow x' \rightarrow x)L_i(x''\rightarrow x)V(x', x'')G(x', x'')dA L o ( x ′ → x ) = L e ( x ′ → x ) + ∫ A f ( x ′ ′ → x ′ → x ) L i ( x ′ ′ → x ) V ( x ′ , x ′ ′ ) G ( x ′ , x ′ ′ ) d A
3点形式のレンダリング方程式
x x x は視点、x ′ x' x ′ は注目している点、x ′ ′ x'' x ′ ′ は物体表面A A A 上の点である。
経路積分によるレンダリング方程式の表現
ノイマン級数展開されたレンダリング方程式から、k k k 回反射された光の経路を考え、すべてのk k k に対する和としてレンダリング方程式を表現することができる。
L o ( x 0 → x − 1 ) = ∑ k = 0 ∞ ∫ A ∫ A … ⏞ k + 1 ∫ A K ( x k , x k − 1 , x k − 2 ) … K ( x 1 , x 0 , x − 1 ) L e ( x k → x k − 1 ) d A k d A k − 1 … d A 0 L_o(x_0\rightarrow x_{-1}) = \sum_{k=0}^{\infty}\int_A\int_A\overbrace{\dots}^{k+1}\int_AK(x_k, x_{k-1}, x_{k-2})\dots K(x_1, x_0, x_{-1})L_e(x_k\rightarrow x_{k-1})dA_kdA_{k-1}\dots dA_0 L o ( x 0 → x − 1 ) = k = 0 ∑ ∞ ∫ A ∫ A … k + 1 ∫ A K ( x k , x k − 1 , x k − 2 ) … K ( x 1 , x 0 , x − 1 ) L e ( x k → x k − 1 ) d A k d A k − 1 … d A 0
ここで、K ( x ′ ′ , x ′ , x ) = f ( x ′ ′ → x ′ → x ) V ( x ′ , x ′ ′ ) G ( x ′ , x ′ ′ ) K(x'', x', x) = f(x''\rightarrow x' \rightarrow x)V(x', x'')G(x', x'') K ( x ′ ′ , x ′ , x ) = f ( x ′ ′ → x ′ → x ) V ( x ′ , x ′ ′ ) G ( x ′ , x ′ ′ ) である。x − 1 x_{-1} x − 1 は視点を表している。この表現ではレンダリング方程式は積分の無限級数となっている。
拡散反射のBRDF
拡散反射は全ての方向に一様に光を反射する。反射率をρ \rho ρ とすると拡散反射のBRDFは定数c c c を用いて
と表せる。半球で積分するとρ \rho ρ になるはずだから
c ρ ∫ Ω ( ω i ⃗ ⋅ n ⃗ ) d ω i ⃗ = ρ c ∫ 0 2 π ∫ 0 π 2 cos θ sin θ d θ d ϕ = 1 c π = 1 c = 1 π c\rho\int_{\Omega} (\vec{\omega_i}\cdot\vec{n}) d\vec{\omega_i} = \rho \\
c\int_0^{2\pi}\int_0^{\frac{\pi}{2}}\cos{\theta}\sin{\theta}d\theta d\phi = 1\\
c\pi = 1\\
c = \frac{1}{\pi} c ρ ∫ Ω ( ω i ⋅ n ) d ω i = ρ c ∫ 0 2 π ∫ 0 2 π cos θ sin θ d θ d ϕ = 1 c π = 1 c = π 1
したがって拡散反射のBRDFは
f = ρ π f = \frac{\rho}{\pi} f = π ρ
となる。
練習問題
問1
点x ⃗ \vec{x} x に法線n ⃗ \vec{n} n で存在する半径r r r の円を、原点にある単位球面上に投影した面積Ω \Omega Ω を求めよ。(つまり立体角を求める)
問2
∫ Ω d ω ⃗ = 2 π \int_{\Omega} d\vec{\omega} = 2\pi ∫ Ω d ω = 2 π を示せ。
問3
L i ( x , ω i ⃗ ) = 1 L_i(x, \vec{\omega_i}) = 1 L i ( x , ω i ) = 1 と与えられているとき(つまり空が真っ白)、x x x における放射側面密度d Φ d A \frac{d\Phi}{dA} d A d Φ を求めよ。
問4
問3の設定で、BRDFがf ( x , ω i ⃗ , ω o ⃗ ) = ρ π f(x, \vec{\omega_i}, \vec{\omega_o}) = \frac{\rho}{\pi} f ( x , ω i , ω o ) = π ρ と与えられているとき、点x x x から方向ω o ⃗ \vec{\omega_o} ω o に反射される放射輝度L r ( x , ω o ⃗ ) L_r(x, \vec{\omega_o}) L r ( x , ω o ) を求めよ。
問5
鏡面反射のBRDFを求めよ。