Skip to content
Go back

Physics and Math of Shading

· Updated:

slides video web

拙訳

物理学の視点から見ると、光は電磁波であり、電磁波は横波transverse waveである。つまり、電磁場が進行方向に対して垂直に、小刻みに振動するwiggleことでエネルギーを伝搬する。

電磁波の特徴量として、1秒に何回振動するかを示す周波数frequencyと、その逆数で、波のピークの間隔を示す波長wavelengthがある。

電磁波はその波長により0.01nm以下のガンマ線から10,000km超のラジオ波まであらゆる波長が技術利用されている。そのうち、400nmから700nmは可視光と呼ばれ、人の目が色として認識できる。

電磁波の模式図ではよく単純なサイン波として表されるが、実際には様々な波長が混じり合った複雑な波形をしている。

これらの異なる波長をエネルギー量として可視化する方法として、Spectral Power Distribution (SPD)がある。例えば、緑単色のレーザー光のSPDを考えたとき、530nm当たりにスパイクを持つディラックのデルタ関数として現れる。

プロジェクタの色は赤緑青それぞれの光を組み合わせて表現しているため、SPD上では赤緑青の各色のスパイクを確認できる。対して、同じ色に見える自然光ではSPD上で見るとエネルギー量が連続しているのが確認できる。

これは人間の色覚が、色を知覚するために相当量の非可逆的変換を行っていること表している。

電磁波は真空中ではロスなく伝播する。媒質との相互作用は以下のように考えられる。

電磁波は原子と衝突すると、そのエネルギーは原子に吸収される。原子は分極(電荷の偏り)を起こすが、増えた分のエネルギーを熱や電磁波として放出することで、もとの状態に戻ろうとする。

これらの相互作用は、密度の低い気体においては分子間距離が遠いために独立して扱うことができるが、それ以外では状況が複雑すぎて正確なシミュレーションを行うことは難しい。

Physical (Wave) Optics

分子レベルでの相互作用は複雑すぎるので、光学、特に物理光学を用いて単純化したり近似したりすることを考える。

媒質が均質媒質homogeneous mediumであると仮定する。均質媒質は完全に一定の密度や組成を持つので、光がその中を直進することができるため、前提を単純化できる。

均質媒質の特性は屈折率index of refraction(IOR)によって定められる。これは複素数で記述され、実数部は媒質中の光の速度を、虚数部は光が媒質に吸収される割合を表す。

媒質中の局所化された非均質性localized inhomogeneitiesは、粒子particleとしてモデル化される。パーティクルは入射光を様々な方向に散乱する屈折率の不連続性を生み出す。これは、分子の分極と似た反応だが、パーティクルは分子の集合として構成することができる。

媒質の全体的な見た目は吸光と散乱の特性によって決定される。例えば、牛乳の濁った白色は媒質が低吸光・高散乱であるために起こる。

Diffraction

物理光学において、原子レベルで見ると真に平坦な面は存在せず、いずれにも少なからずの凹凸irregularityが存在する。この光の波長より小さい凹凸により、回折diffractionと呼ばれる現象が発生する。このときの光の波長レベルの凹凸をnanogeometryと呼ぶことにする。

ホイヘンス=フレネルの原理Huygens-Fresnel Principleは回折を直感的に理解するための助けになる。この原理によれば、次の波面は現在の波面を球面上に広がる波の発生源としてみなすことで表すことができる。回折はこの球面波を考えることで説明できる。

すべての凹凸がnanogeometryレベルである、光学的に滑らかな面を考える。

そこに平面波を当てると、表面の各点から球面波が放射され、ホイヘンスの原理により表面の凹凸の形に沿った波面が形成される。

Geometric (Ray) Optics

現在の3DCGでよく用いられる幾何光学geometric opticsは、端的に言えば、nanogeometryを無視することである。光の波長以下の凹凸が存在せず、平坦な面は数学的にも完全な平坦である。

幾何光学において、平坦な面に入射する光は反射と屈折の2つに分割される。

現実の表面はたいてい完全な平面ではなく、光の波長以上の凹凸を含んでいる。これは、microgeometryと呼ばれる。

microgeometryは光を反射・屈折する幾何光学的特性を持つが、3DCGにおいてピクセル以下に紛れ込んでしまうため、最終的に統計的な処理で表現される。

microgeometryはroughnessと深い関係にある。滑らかなmicrogeometryでは整った法線を持つため、反射光がある一定の範囲のみに反射する鏡面反射的な効果を生み出す。対して、荒いmicrogeometryでは法線の向きに統一性が現れなくなり、拡散反射的な効果を生み出す。

屈折が発生するかは、表面の材質がどんな種類なのかによって異なる。

材質はその電気的特性に応じて、金属(導体conductor)、誘電体(絶縁体 insulator)、半導体semiconductorに分けられる。しかし、3DCGでは半導体は登場せず、金属か非金属かによる分類が基本となる。

金属では、屈折光はエネルギーとして取り込まれて外に出てくることはない。

非金属では、屈折光の一部は吸収されて外に出ることはないが、吸収されなかった光は外に再び出てくる。そのとき、ガラスのような透明な材質であれば、何にも邪魔されずにそのままのベクトルで裏面から外に出てくるが、大抵の材質では屈折光は表面下で散乱し、入射した面の側から再び外に出てくる。

光が外に出てくる地点は入射地点から離れていることが多く、入射地点から出射地点までの距離entry-exit distancesの分布は密度や散乱パーティクルのパラメータに依存する。この距離に対してピクセルサイズが十分に大きければ、シェーディング用としてはこの距離を0と仮定することもできる。そうすれば、ある地点でのシェーディングはそこに入射する光による影響を考えるだけでよくなる。

光と材質の相互作用は利便性のために2つに分けられる。specularは表面での反射を示し、diffuseは屈折や散乱、再屈折による結果を示す。

entry-exit distancesがピクセルサイズより大きい場合、表面下散乱をレンダリングする特別な処理が必要になる。とはいえ、通常のdiffuse shadingも、散乱する距離の大小が違うだけで、同じ表面下散乱の結果である。

Physics to Math

数学的なモデルに落とし込むとき、物理量を数値化する必要がある。

光は1本の光線として扱い、光線の強度は放射輝度radianceとして表される。放射輝度は厳密にはスペクトルとして表されるが、一般的なレンダリングではRGB値を用いる。

BRDF

シェーディングが局所的に完結すると仮定することで、ある表面上の点surface pointにおける光の応答light responseは光の向きと視線の向きにのみ依存すると考えることができる。

これをBRDFとして表す。BRDFは巨視的macroscopicな表面上における光と視線の向きl\mathbf{l}v\mathbf{v}を取る。

The Reflectance Equation

Lo(v)=Ωf(l,v)Li(l)(nl)dωiL_o(\mathbf{v}) = \int_\Omega f(\mathbf{l}, \mathbf{v}) \otimes L_i(\mathbf{l})(\mathbf{n} \cdot \mathbf{l}) d\omega_i

この方程式は、簡単に言えば、半球上の入射光をBRDFとコサインで重み付けした平均を取っている。

\otimesReal-Time Renderingという本によれば、RGB各要素ごとの積を表す。

Microfacet theory

まずは鏡面反射について考える。

マイクロファセット理論は、光学的に平坦でない表面から表面反射におけるBRDFを導く方法である。

このとき、表面の凹凸は目視できないほど小さいが光の波長よりは大きいと仮定する。

また、各点は局所的に完全な鏡面である。すなわち、各入射光はただ1つの出射方向に反射し、その出射光は入射光の向きl\mathbf{l}とマイクロファセットの法線m\mathbf{m}に依存する。

光線が視線方向へ反射するとき、その面の法線はl\mathbf{l}v\mathbf{v}のちょうど中間にある。これをhalf vectorと呼び、h\mathbf{h}で表す。

つまりマイクロファセット理論では、表面を反射する光は、h\mathbf{h}を法線とするマイクロファセットが反射する光だけで構成されていると考えることができる。

また、光はマイクロファセットによって遮蔽される場合があること想定しなければならない。このとき、入射光が遮蔽される現象をshadowingと呼び、出射光が遮蔽される現象をmaskingと呼ぶ。

現実には、光が複数回のバウンスを繰り返して視線方向へ出てゆくこともあり得るが、マイクロファセットBRDFではこれを無視する。

Microfacet Specular BRDF

f(l,v)=F(l,h)G(l,v,h)D(h)4(nl)(nv)f(\mathbf{l}, \mathbf{v}) = \frac{F(\mathbf{l}, \mathbf{h})G(\mathbf{l}, \mathbf{v}, \mathbf{h})D(\mathbf{h})}{4(\mathbf{n} \cdot \mathbf{l})(\mathbf{n} \cdot \mathbf{v})}
Fresnel Reflectance

FFはフレネルの反射率を表す。これは入射角に対して物質ごとに異なる変化を見せる。値のおおまかな傾向として、0°では物質ごとに特有の値を持ち、45°まではほぼ一定の値を取り、そこから75°までは緩やかに上昇し、以降90°にかけて一気に1まで上昇する。

フレネルの反射率が取りうる値を考えると、0°のときの反射率F0F_0に近い値を取ることが多いことが分かる。なので、F0F_0は物質固有のspecular色として扱うことができる。

金属では、入射光が表面下で散乱せずに反射するため、F0F_0は全体的に大きく出る。また、表面の色がspecular色として現れるため、色ごとの反射率が異なるものが多い。

対して誘電体では、表面下散乱が起こるため、F0F_0は全体的に小さく出る。また、表面の色はdiffuse色として現れるため、specular色に色ごとの差はない。

ちなみに、半導体では、金属より暗く誘電体より明るい、誘電体と金属の中間のような値を取る。しかし、半導体を表すF0F_0が20%から45%の範囲は、現実感を損ねかねないとして忌避される、禁じられたゾーンforbidden zoneであるため、プロダクションシーンで見ることはまずない。

プロダクションでは、Schlickの近似式が一般的に用いられる。これは、計算量が少なくcheapほどよく正確reasonably accurateである。なにより、specular色がパラメータになっていることが重要である。

FSchlick(F0,l,n)=F0+(1F0)(1(ln))5F_{\text{Schlick}}(F_0, \mathbf{l}, \mathbf{n}) = F_0 + (1 - F_0) (1 - (\mathbf{l} \cdot \mathbf{n}))^5

マイクロファセットBRDFの場合、n=hn = hに置き換える。

Normal Distribution Function (NDF)

DDはマイクロファセットの法線の分布関数であり、h\mathbf{h}の方向に向いているマイクロファセットがどれだけあるかを表す。NDFはハイライトの大きさと形を決定する。

PhongのようなNDFは、ぼんやりとしたハイライトを持つガウス関数的である。

GGXのようなNDFは、明るい部分に囲まれて現れるくっきりとしたハイライトに見られる、ロングテールと尖った形を持つ。

大抵の面は滑らかな関数ではうまく表現できない。

プロダクションで用いられるBRDFや法線フィルタリングは等方的でも異方的でも滑らかなlobeを使うが、多くの面は比較的荒いcoarse microgeometryを持つため”glinty”な見た目が生じる。これを表現するための手法のうち、映像業界で使われそうなものは登場したが、ゲーム用途としてはまだコストが高すぎるため、アドホックな方法を使い続けている。

Nagano et al. [2015Nagano, K., Fyffe, G., Alexander, O., Barbič, J., Li, H., Ghosh, A. and Debevec, P. 2015. Skin microstructure deformation with displacement map convolution. ACM Trans. Graph. 34, 4. 10.1145/2766894. https://vgl.ict.usc.edu/Research/SkinStretch/.] により、人肌などの変形する表面をキャプチャすることでその変形効果をNDFに取り入れる手法が提案されている。

Geometry Function

GGはジオメトリ構造、またはshadowingとmaskingの効果を表す関数であり、h\mathbf{h}を向いているマイクロファセットのうち、視線v\mathbf{v}と光の向きl\mathbf{l}において他のマイクロファセットの影に入らず反射光が遮蔽されないものはどれだけあるかを示す。

Heitz [2014Heitz, E. 2014. Understanding the masking-shadowing function in microfacet-based brdfs. Journal of Computer Graphics Techniques (JCGT) 3, 2, 48–107. http://jcgt.org/published/0003/02/03/.] では、Smithの関数は数学的な妥当性と物理的な現実感を兼ね備えている、と述べている。

Subsurface Reflection

さて、ここまでは表面上での反射(specular)を考えてきたが、ここからは表面下での反射(diffuse)を考える。

なんだかんだ言っても、プロダクションではLambertモデルがもっとも標準的に使われている。

fLambert(l,v)=cdiffπf_{\text{Lambert}}(\mathbf{l}, \mathbf{v}) = \frac{\mathbf{c}_\text{diff}}{\pi}

しかし重要な物理現象のうち、Lambertが考慮していない部分もある。

Diffuse-Specular Tradeoff

diffuseは屈折光から成り、supecularは反射光から成る。言うなれば、specularが使った入射エネルギーの余った分でdiffuse効果が行われるとも言える。

Lambertはspecularがどうなっているかは考慮していないため、specularと合わせるとエネルギー過多になり得る。

Surface Roughness

Lambertは面の粗さを考慮していない。

大抵の場合、微視的な粗さはspecularにのみ影響を与える。ある点でのdiffuseの反射率はある領域上に入射する光に由来する。これは、microgeometryの些細な違いは平均化されてしまうことを意味する。しかし、散乱範囲より大きいmicrogeometryの場合、diffuse反射率に影響を及ぼす。これを表現するにはOren-Nayarのようなモデルが必要になる。

Oren-NayarやDisneyのdiffuseモデルなどの荒いdiffuseモデルにspecularのラフネスをそのまま使うことが当たり前になっているが、これはあまりよろしくない(と発表者は考えている)。

LightStageがnormal mapをdiffuseとspecularで別けていることからも分かるように、diffuse応答は実際的に小さな凹凸small bumpsを滑らかにしてしまうことが知られている。ラフネスではこれがより強く現れる。理想ではそれぞれのモデルに個別のラフネス値を設定すべきだが、せめて、microgeometryが散乱距離より大きいことが分かっている材質のみで用いるべきだろう。

Diffraction from Opticaly-Smooth Surface

いくつかの例外を除いて、今まで3DCGコミュニティーでは、nanogeometryの回折効果は無視されていたか、些細なことと切り捨てられていた。昨今のMaterial Appearance Modelingシンポジウムにおいて、HolzschuchとPacanowskiは、BRDFの振る舞いの一部(特にハイライトのロングテール)がこの現象に由来するという説得力のある証拠convincing evidenceを示した。

参考資料