graphics.hatenablog.com

テクニカルアーティストの技術を書き殴るためのメモ帳

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

前回 の続き。

ラフネスの変更を「マイクロサーフェスの引き伸ばし」と捉えて、それが幾何減衰項に与える影響を取り上げる。ていうかこの章、数式の導出によくわからないとこがたくさんあって、ちゃんと理解できた自信が正直あんまない。


3 Stretching Invariance of the Masking Function


3.1 Masking Probability Invariance

 マイクロサーフェスを輪切りにした1次元構造を考える。視点を変えずにこれを2倍に引き伸ばしたとき、各マイクロサーフェスからのビューベクトルの傾きは  \frac{1}{2} になって、その傾きの分布関数のサポートも  \frac{1}{2} になる。ところが、引き伸ばす前に遮蔽されていたマイクロサーフェスは引き伸ばしたあとも相変わらず遮蔽されているし、引き伸ばす前に遮蔽されていなかったものは、遮蔽されないまま残る。つまり、各マイクロサーフェスの遮蔽率 masking probability は引き伸ばしの影響を受けず、遮蔽率分布関数の形状 shape は変化しない。
f:id:hal1932:20140214011431j:plain


3.2 Shape Invariance of the Distribution

 いくつかの等方性 BRDF では、ビューベクトルの分布がラフネス  \alpha に依存するため、 \alpha を変化させるとその分布形状も変わる。ここで、ジオメトリ法線  \theta_n の傾きとラフネスとの比率  \frac{ {\rm tan}\theta}{\alpha} のみに依存して分布形状が変わる この性質を、分布関数のラフネスに対する形状不変性 shape invaliance と呼ぶことにする。

 BRDF のマスク関数 (確率分布関数) はビューベクトルの分布に依存して決まるため、これはつまり、ビューベクトルの傾きを \frac{1}{{\rm tan}\theta_o} として、マスク関数は a = \frac{1}{\alpha {\rm tan} \theta_o} のみに依存することになる。Beckmann と GGX に関しては、それらの陪関数 associated functions が a に依存することがわかっているため、この2つの関数は形状不変性を持つのだといえる。

 ちなみに「陪関数」というのはその関数の特徴量みたいなもので、フーリエ級数的な、Spherical Harmonics にもでてくる量子力学の概念、らしい。


3.3 Deriving Masking Functions for Shape-Invariant Anisotropic Distributions

 同様の形状普遍性は、異方性 BRDF においても確認することができる。そのときの係数  a は、2軸に沿ったジオメトリ法線の傾き  {\rm tan} \theta_n {\rm cos} \phi_n {\rm tan} \theta_n {\rm sin} \phi_n、引き伸ばし係数  \alpha_x \alpha_y を用いて以下のように書ける。
f:id:hal1932:20140214020142j:plain

 このように引き伸ばしたときのビューベクトルの傾きの分布関数 (2次元分布) は以下の図の通り。1次元のときの同様に形状普遍性が保たれているのがわかる。
f:id:hal1932:20140214021340j:plain

 この性質を使って、等方性 BRDF から異方性 BRDF を導出することができる。細かい数式と Beckmann/GGX の例がこの論文には載ってるけど、超ややこしいので以下略。


3.4 More Generalization

Arbitrary Shape-Invariant Distributions
 形状不変性について重要なのは、マスク関数を構築するのに必要なすべての情報が、ラフネスや異方性に関わらず、ひとつの陪関数の中に詰まっているということになる。逆に言えば、陪関数さえうまく定義できれば、以下の式を使って任意の法線分布関数を導出できることになる。
f:id:hal1932:20140215134323j:plain
式中の f が陪関数で、c がそれを正規化するための定数パラメータ。

Non Asix-Aligned Stretching
 以下の 2x2 行列を使って、軸に沿わない引き伸ばしも定義できる。
f:id:hal1932:20140215134902j:plain
 r_{xy} はそれぞれの軸上での引き伸ばし率の相関係数。 \bar{n}={\rm tan}({\rm cos}\phi_n,{\rm sin}\phi_n) を使って  Q の2乗ノルムを定義できるので、それに従って引き伸ばされたあとのラフネスを計算できる。例えば  r_{xy} \neq 0 の場合、以下のようになる。
f:id:hal1932:20140215135326j:plain

Vertical Shearing and Non-Centered Deistributions
 最後のマイクロサーフェスの縦方向シフト vertical shearing について。ここではマイクロファセットの各面を平均した面をメゾサーフェス mesosurface と呼ぶことにして、その辺を  \bar{x}_{\bar{n}} だけ縦に移動させたケースについて議論する。
f:id:hal1932:20140215144602j:plain

 移動前のビューベクトルは 0 を中心とする分布になっていて、これはメゾサーフェスがマクロサーフェス (そのマイクロファセットが存在しているジオメトリ面) と平行であるという状態を指す。ただしバンプマップやノーマルマップ、ディスプレースメントマップなどでマクロサーフェスの法線を変更してしまった場合は、これにあたらない。この場合、マップ適用後のビューベクトル分布は原点からズレていることになり、縦方向シフトが行われた状態であると見做せる。

 幸運なことに、縦方向シフトが行われた状態でも BRDF を正しく適用できることは既に知られており、法線分布 (D項) の議論とは別に、マスク関数のオフセット係数  a と移動後のラフネス  \alpha_o は以下の計算で求められる。なお、縦方向シフトでビューベクトル分布の形状が変わらないことは明らかであり、ラフネスを求める式は「軸に沿わない引き伸ばし」のときと同じになる。
f:id:hal1932:20140215150158j:plain

 気をつけなければいけないのは、これはあくまで「ビューベクトルの張る空間」上で成立する議論であり、「法線の張る空間」上では成り立たない。ラフネスを変えずに法線だけを回転させるようなケースでは、その回転をビューベクトル空間に射影すると非線形な操作になってしまう ため、議論を変える必要がある。

 併せて、BRDF における 視線方向に射影された領域 についても補足しておく。この大きさはメゾサーフェスの法線の角度から計算するものであるため、引き伸ばしの結果をビューベクトルのコサイン項  {\rm cos}\theta_o = \omega_{\bar{n}} \cdot \omega_o に反映する必要があるようにみえる。これはメゾサーフェスの法線を  \omega_{\bar{n}} として  \frac{\omega_{\bar{n}} \cdot \omega_o}{\omega_{\bar{n}} \cdot \omega_g} で求められるが、メゾサーフェスとマクロサーフェスが一致している以上、 \omega_{\bar{n}} = \omega_g であり、結局のところ  {\rm cos} \theta_o に引き伸ばしの影響は及ばない。更に詳しい議論は LEADR mapping の論文(PDF) を参照のこと。


次回へ続く。