読者です 読者をやめる 読者になる 読者になる

graphics.hatenablog.com

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

Physics and Math of Shading (2)

前回 の続き。


The Mathematics of Shading

電磁気学 radiometry の観点から光 light を考えるのに、ひとまずは放射輝度 radiance だけをみることにする。ここでは、放射輝度を「1本のレイから放射される光の量」を定義する値として用いる。理論的には波長に応じた放射輝度を考える必要があるけど、実際にはもっと簡略化して RGB の 3 要素をまとめて扱うことにする。



The BRDF

BRDF は双方向反射率分布関数 Bidirectional Reflectance Distribution Function の略で、表面 surface が光を受けたときの反応 response を定量化するための関数だ。これは、入射ベクトル l、反射ベクトル v を球面座標系の θ と φ で扱う、4次元関数となる。v の回転は BRDF に影響を与えないが、異方性 isotropic の BRDF を考える場合はその限りではない。
f:id:hal1932:20131027022556j:plain

原則として、BRDF は半球上の l と v によってのみ定義される、つまり、内積 n・l と n・v は必ず正の値となる。BRDF の意味付け interpretation は 2 種類あり、ひとつは「入射光の分布から出射光を考える」、もうひとつは「入射光から出射光の分布を考える」だ。
f:id:hal1932:20131027023945j:plain

BRDF の定義式は以下の通りで、これは、入射光のそれぞれに何らかの重み付け加算を行った結果が出射光である、という意味になる。
f:id:hal1932:20131027024147j:plain

BRDF の物理的妥当性 physically plausible を担保するため、相反性 reciprocity とエネルギー保存 energy conservation を守る必要がある。相反性とは、入射光 l と出射光 v を入れ替えても結果が変わらないこと、エネルギー保存とは、出射光の総和が入射光の総和を超えないことを指す。少なくとも非金属表面の BRDF の場合、反射と表面下散乱というふたつの物理的現象を考える。反射成分をスペキュラ specular と呼び、表面下散乱成分をディフューズ diffuse と呼ぶ。
f:id:hal1932:20131027024821j:plain


Surface Reflectance (Specular Term)

物理的に正しいスペキュラ BRDF は、マイクロファセット理論 microfacet theory を基に考える。ざらつきのある表面を、目に見えないほど小さなの面(マイクロファセット)が大量にあると考える。それぞれの面が光学的に平面 optically-flat であると仮定して、すべての面上での反射と屈折を考える。
f:id:hal1932:20131027025246j:plain

マイクロファセット上での入射と出射には様々なケースが考えられる。入射光がマイクロファセット上で反射・屈折して視点に届く場合、他のマイクロファセットに遮られて光が届かない場合、出射した光が他のマイクロファセットに遮られる場合、出射した光が他のマイクロファセット上で更に反射する場合だ。個別にすべてを計算することはできないので、それぞれの分布関数を考えることにする。
f:id:hal1932:20131027025906j:plain

D 項は法線の分布関数 normal distribution function で、入射光を受け止められる方向を向いているマイクロファセットの割合を表す。G 項は幾何項 geometric function, shadowing-masking function と呼ばれ、出射した光が他のマイクロファセットに遮られないようなマイクロファセットの分布を表す。D 項と G 項を掛けた結果は、アクティブなマイクロファセット active microfacet の分布だと考えることができる。F 項はフレネル反射で、アクティブなマイクロファセットがどれくらい光を反射するかを表している。分母はこれらの結果を正規化するための値と考えればいい。


Fresnel Reflectance

フレネル反射関数は光学的に平坦な面上で光が反射する割合を表し、入射光の角度と物体表面の屈折率に依存する。
f:id:hal1932:20131027031412j:plain

このグラフをみての通り、入射光の角度が 0°のときのフレネル値が、その物体のスペキュラ反射を最もよく特徴付ける値 characteristic specular reflectance となっている。
f:id:hal1932:20131027031504j:plain

この曲線を近似する式としては、シュリック Schlick の式が有名だ。マイクロファセットの法線 h を用いて、以下の式で計算できる。
f:id:hal1932:20131027031700j:plain

表をみてわかるとおり、金属は非常に高いスペキュラ値を持っている。前回も述べた通り屈折して金属中にはいった光はほとんど吸収されてしまうため、「スペキュラカラーが強くディフューズカラーを持たない」というのが金属の特徴となっている。その一方で、非金属としては最も明るい部類のダイアモンドでさえ、0°では 17 % の光しか反射しない。自然界に存在しないごく少数の物体だけが 20~40% 程度の反射率を持っているが、そういう特殊な場合を除けば、大抵の非金属の反射率は、2~5% 程度の範囲内に収まってしまう。


Normal Distribution Function

マイクロファセット上で大抵の法線は「上側」を向いており、入射項を反射・屈折させることができる。D 項は、こうした法線の統計的分布を表す。ラフネス roughness と呼ばれるケースもあり、スペキュラハイライトの強さやかたち shape を決める要因になる。


Shadowing-Masking Function

上向き法線を持っていて光を反射・屈折させることができても、その光が視点まで届かなければピクセルの色には反映されない。また、「他のマイクロファセットから出射する光が、他のマイクロファセットによってどのくらい遮られるか」を考慮しないと、表面全体での出射量が大きくなりすぎてしまう。G 項は、視線方向(表面からの光の出射方向)から見えるマイクロファセットの割合を表す。BRDF のエネルギー保存を担保するために重要な項目で、表面全体に占めるアクティブなマイクロファセットの割合に関係する。
f:id:hal1932:20131027035838j:plain


Limitations of the Microfacet Model

マイクロファセットモデルでは、光の回折や干渉を表現できない。ただ、制作現場でそこまでの表現が必要なことは多くないため、物理的に正しい手法というよりも、もっとアドホックな技術が使われることが多い。
また、D 項は「視線方向によらずすべてのマイクロファセットが似たような法線方向を持っている」ことを前提としている。例えば「最初はざらざらだったが摩擦によってなめらかになった」ような場合、摩擦で削れた部分とそうでない部分でざらつき具合が異なってくる。そうすると、どの部分のマイクロファセットが見えているかよって法線の分布が異なってしまうが、マイクロファセットモデルではこれを表現できない。
f:id:hal1932:20131027040834j:plain


Subsurface Reflectance (Diffuse Term)

表面下散乱には様々なモデルがあるが、ここでは、一番単純なランバート反射 Lambertial について述べる。ランバート反射はコサイン項によってモデル化されるが、そのままではエネルギー保存を満たさない。これを正規化した正しいランバート反射の BRDF 式(式(1)のfに相当する)は以下のようになる。
f:id:hal1932:20131027041603j:plain

さて、エネルギー保存を考えると、出射光のディフューズ成分とスペキュラ成分の合計は常に同じになる。スペキュラ成分の大きさはフレネル効果によって変わってしまうため、ディフューズ成分の大きさもその影響を受ける。その影響を計算するには、例えば 1-[フレネル係数] をディフューズ成分の大きさに掛けるような単純な方法から、もっと複雑で物理的に正しい方法まで様々だ。
ランバート反射の他にも、ラフネスをきちんと考慮するようなモデルがある。ここで大切なのは、その現象をどんなスケール scale でみるか、だ。前回も述べたように、表面下散乱の具合は「ひとつのピクセルがその表面上のどれくらいの面積を占めているか」によって変わってくる。それよっては、ランバート反射とは似ても似つかないような結果になってくる場合がある。


Other Terms

反射という現象には、マイクロファセットモデルのように「1回の反射で出射光が決まる」ようなケースと、表面下散乱のように「複数の反射で出射光が決まる」ようなケースがある。マイクロファセットモデルでは、後者のケースは無視されている。これらのケースをカバーできるモデルもきっとあるはずだが、あまりいい方法は発表されていない。