graphics.hatenablog.com

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

Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs (3)

前回 の続き。

4 Microfacet-Based BRDFs

可視法線分布の定義からマイクロファセットBRDFの式を導出してから、それを正規化するための検定を考えて、Smith の式がそれに合格していることを述べる。


4.1 Distribution of Visible Normals

 ピクセルに記録される放射輝度は、反射する放射輝度の全体を可視法線分布 the distribution of visible normals で重み付けしたものになる。
f:id:hal1932:20140216000024j:plain
ここでいう可視法線分布とは、「法線が視線方向を向いているマイクロサーフェスを視線方向に射影したときの面積」と「マスク関数」で、法線分布を重み付けしたもので、以下の式で表される。
f:id:hal1932:20140216002135j:plain
分子の  G_1 がマスク関数、 \langle \omega_o \cdot \omega_n \rangle が背面カリングされた視線方向への射影面積、 D(\omega_n) が法線分布関数を表す。これは重み付けに使う関数なので正規化されている必要があり、分母がそのための項。これに Smith の式を代入して整理すると綺麗に正規化されていることがわかる。
f:id:hal1932:20140216005926j:plain

 というわけでこれを全部まとめると、よくある BRDF の式になる。
f:id:hal1932:20140216010212j:plain


4.2 Construction of the BRDF

 放射輝度  L(\omega_o,\omega_n) に対して、入射方向  \omega_i に対する各マイクロファセットごとの micro-BRDF  \rho_{\mu}(\omega_o, \omega_i, \omega_n) を定義する。
f:id:hal1932:20140216014633j:plain
これについて、すべてのマイクロファセット上で完全鏡面反射が起こると仮定して式を整理すると、フレネル反射F を用いて以下のようになる。
f:id:hal1932:20140216015345j:plain

 ただし実際の反射ではこういった状態にはならず、入射した光は多重反射して一次反射したのとは別の方向に出射したりもする。BRDF はもともと多重反射は考慮しないものなので、マスク関数に shadowing function としての機能を追加する必要がなる。上記の式のマスク関数 masking functon G_1 を masking-shadowing function G_2 に置き換えると、よく知られたスペキュラマイクロファセット BRDF の式 になる。
f:id:hal1932:20140216020132j:plain
f:id:hal1932:20140216025549j:plain


4.3 The BRDF Normalization Test

The White Furnace Test
 現実世界で実際に起こっている 反射 を表す双方向散乱面反射率分布関数 BSSRDF を、入射位置と出射位置を同一とみなして簡略化したものが双方向散乱関数 BSDF s であり、これは双方向反射率分布関数 BRDF \rho と双方向透過率分布関数 BTDF t を足したものになる。
 ここで、エネルギー保存則が満たされた状態ですべての入射光が熱に転化しないと仮定すれば、すべての入射光について BSDF を積分した結果は 1 になるはず。更にフレネル反射率が常に 1 であると仮定すれば、 s = \rho + t = \rho となり、この場合に BSDF がエネルギー保存則を満たす条件は以下のようになる。
f:id:hal1932:20140216025642j:plain
 これを White Furnace Test と呼ぶことにする。日本語でいうと「対象の内部ロジックを反映した厳密な検定」というかんじの意味合いになりそう。とはいえ、解析的に定義する BRDF では shadowing function によってマイクロサーフェス上での多重反射の影響を取り除いてしまうため、積分しても 1 になることはない。

The Weak White Furnace Test
 なので、現実的な BRDF に沿って一次散乱だけを考慮するエネルギー保存検定を考え、shadowing を無視した上でフレネル反射率が常に 1 であるときに、正しいマスク関数であるかどうかをチェックする。

f:id:hal1932:20140216024935j:plain
 実際にこの検定を行ってみると、Smith の関数だけが合格する。その意味で、Smith の関数だけが、可視法線分布を扱う BRDF を正しく正規化できる関数であるといえる。


4.4 Summary

 BRDF正規化についてよくある質問として、「マイクロファセットBRDFの式を積分しても 1 にならないけど、完全に正規化しなくてもいいの?」というものがある。それに対する回答を与えるために、この章では以下のことを述べた。

  • BRDFは可視法線の分布から構成される
  • この分布は、BRDFがエネルギー保存していることを保証するために正規化しなければならない
  • この正規化係数を与えるのがマスク関数
  • マイクロファセットBRDFは、理論的には積分したときに 1 になるべき
  • shadowing function は、マイクロファセットBRDFでは考慮されていない多重反射の影響を取り除くもので、これを使わないとうまく正規化できない
  • ふつうのマイクロファセットBRDFはマスク関数によって正規化されていて、それを検証するのに Weak White Furnace Test が使える
  • 遮蔽される度合いと法線とが互いに依存しないという前提に立つ限り、Sumith の関数はこの検定に合格する

 マスク関数が正しく定義されているかどうかを検証するために Weak White Furnace Test を導入したが、だからといって shadowing なしでBRDFを運用すべきだということではない。shadowing はマイクロファセット上での多重反射を反映するためのもので、一般的なBRDFモデルではそれが考慮されていない (からその枠組内で正規化を行うときに考慮すべきではない) という話だ。


次回へ続く。