graphics.hatenablog.com

技術系テクニカルアーティストのあれこれ

Physics and Math of Shading (2')

前回 の補足。

Lambertian の式はこれだよって、なんか投げやりな感じがしたから、真面目に解いたのを載せてみる。


BRDF がラディアンスの式だというのはいいとして、ラディアンスってのは「単位立体角あたりを通過する光束の量」になる。つまり、その光の量が求められればいいわけだ。更に、物理的な正しさを持たせるために「ヘルムホルツの相反性」と「エネルギー保存」を保証する必要がある。相反性のことはまぁさておき、取り上げた式がエネルギー保存の性質を満たすように書き換える操作を、正規化という。前回の「正しいランバート」というのは、この「正規化したランバート」のことだ。で、そのための計算過程が以下のメモの内容になる。

f:id:hal1932:20131027043655p:plain

まず、ラディアンスは「単位立体角」に関する式なのだから、これを入射光全体について合算してやる必要がある。光はどの方向から来るかわからんのだ。立体角積分についてざっくり説明すると、まず平面角(2次元)の場合、これは弧の大きさと半径との関係によって定義される。「ラジアンの定義は弧の長さを半径で割ったもの」だとか、そういうの。で、これを立体角(3次元)に拡張すると、「ステラジアンの定義は弧の面積を半径の2乗で割ったもの」だとか、そうなる。

これに対する積分は、この円上に投影された面積を積分することになる。図にすると、これとか、↑のメモの上半分あたりに書いてあるようなかんじ。微小面積 dA = r dθ×r sinθdφ になる。

これをランバートの式に当てはめて計算すると、結果がπになる。BRDF は入射光と出射光のラディアンスの比率を表すものだから、つまりこれをそのまま BRDF にすると入射光の総量にπを掛けたものが、出射光の総量になってしまう。なので、右辺をπで割って帳尻を合わせてやる。

ランバート以外に関しても、計算が面倒なだけで基本はだいたいこんなかんじ。