以下はまだ検討段階なので半分くらい妄想。あるいは既に考えられているとか、既存の理論で書けるかもしれない。
はじめに
Eric Heitzの
Understanding the Masking-Shadowing Function
in Microfacet-Based BRDFs
を読んで、結構面白い事をやってると思ったので公理化できないかなと模索している。
どんな事かというと、平らな面(幾何学面)の表面に非常に細かい構造を考えて、その微細構造における光の反射を、例えば法線分布といった球面上での積分として計算する。このとき幾何学面というマクロな構造と、法線分布や遮蔽函数で表されるミクロな構造が両立するようなものを考える。
例えば[0,1]の表面に正三角形を並べた図形を考えてみる。正三角形の辺の長さはなんでもいいが、この表面は折れ線(曲面)なので、この上の積分は実行できる。では一片の長さを無限に小さくしたものはどう考えるべきか。解析学的にはもちろん[0,1]に収束する。しかしmicrofacet理論では微細な凹凸が残っていると考える。つまり6πを向いてる面積が1で、65πを向いてる面積が1と考え、法線分布を
D(ω)=1⋅δ6π(ω)+1⋅δ65π(ω)
で与える。更に法線分布だけでは微細構造を決定しないと考えて、遮蔽函数G(ω0,ω)を考慮する。ω0方向にωを向いた面がどれだけ遮蔽されるかを表す函数である。
正直なところ論文中の式変形は良く分からなくて、例えばSpatial-Statistical変換についてGLの変換をGとLの変換の積にしているなど怪しい操作をしている。(準同型か?)しかし発想は面白くて、光の反射やらBRDFは分からなくても、エッセンスだけ取り出せば色々な分野にも応用できそうな気がする。
Microfacet理論の公理化に動機があるとすれば以下に挙げる通りだろう。
- 微細構造上での積分が非常に難しい。計算困難あるいは単純な式で表せない。
- 表面の特性は分かっていて、例えば法線分布や遮蔽函数で表される。
- 微細構造上の函数(例えば輝度)の積分を計算し、その定量的な評価を与えたい。
微細構造上の積分が可能な場合に、それと整合的であるべきか、あるいはそうでないかは分からない。
素朴な公理化
定義 Ω=Snとする。集合MのΩ-微細構造は以下のデータからなる。
Ψg(ω)=D(ω)1∫ΩΨ[δω(ωm(⋅))g(⋅)](η)D(η)dη
定数函数cについてΨc=cが成り立ち、論文中ではΨ[GL]=ΨGΨLを用いたりしているので、Ψは代数準同型とするのが良いのかもしれない。むしろGの性質かもしれないが。
例 M上の積分が存在する場合、
D(ω)Ψg(ω):=∫Mδω(ωM(p))dp,:=D(ω)1∫Mδω(ωM(p))g(p)dp
と定めればよい。実際、まず定義より
D(ω)=∫Mδω(ωm(p))dp
である。従ってΩ上の函数fについて
Ψ[f∘ωm](ω)=D(ω)1∫Mδω(ωm(p))f(ωm(p))dp=D(ω)1∫Mδω(ωm(p))dp⋅f(ω)=f(ω)
を得る。また
D(ω)1∫MΨ[δω(ωm(⋅))g(⋅)](η)D(η)dη=D(ω)1∫ΩD(η)1∫Mδη(ωm(p))δω(ωm(p))g(p)dp⋅D(η)dη=D(ω)1∫Mδω(ωm(p))g(p)(∫Ωδη(ωm(p))dη)dp=D(ω)1∫Mδω(ωm(p))g(p)dp=Ψg(ω)
より条件を満たす。
注意 積分の交換はあまり重要ではない。というのも函数の集合を誤魔化して書いているので、交換できるgについてのみ考えている。またΩ=Snも本質的に重要ではない。D(ω)=0となるようなωも考えていない。最終的にはきちんと書くべきところだが、現時点では柔軟に考える。
微細構造上の積分
公理化のためにはΨについてより多くの例と検証が必要だと思う。今のままでは、上の等式はωmに依るので非常に扱い辛い。というのも、三角形の例でも分かるように、微細構造は曲面でないものを考えたい。よって各点を取ってその法線を求めるということが原理的に難しい。個人的には法線分布と遮蔽函数などが表面特性を表すと思っているので、各点の法線という表現をしたくない。M上の積分がないときに積分っぽいものを考えることができる、というのがmicrofacet理論の目指すべき方向性ではないだろうか。
定義 Ω′⊂ΩについてM′={p∈M:ωM(p)∈Ω′}とする。M上の函数gのM′における積分を
∫M′Ψg(p)dp:=∫Ω′Ψg(η)D(η)dη
で定める。
例 M上の積分があるときは一致する。実際
∫M′Ψg(p)dp=∫Ω′Ψg(η)D(η)dη=∫Ω′D(ω)1∫Mδη(ωm(p))g(p)dp⋅D(η)dη=∫M(∫Ω′δη(ωm(p))dη)g(p)dp=∫M′g(p)dp
である。
命題 以下が成り立つ。
∫M′Ψdp=∫Ω′D(η)dη,∫MΨf(ωm(p))dp=∫ΩΨ[f∘ωm](η)D(η)dη=∫Ωf(η)D(η)dη,Ψg(ω)=D(ω)1∫ΩΨ[δω(ωm(⋅))g(⋅)](η)D(η)dη=D(ω)1∫MΨδω(ωm(p))g(p)dp.
幾何学面との両立
幾何学面の持つマクロな構造は、微細構造を無視したときの法線ωgで決定される。三角形の例であれば、[0,1]が幾何学面であり、その面は2π方向を向いている。微細構造の法線ωm(p)はむしろωgに対する回転で表すべきだろう。現時点では平らな面しか考えていないが、いずれ曲率を伴う多様体の一部と見なすのが自然である。つまりマクロな構造といっても局所的なもので、大域的なマクロ構造! は別にある。このとき多様体の座標変換に応じて、その回転が両立するように定義すべきかもしれない。いずれにせよそれを考えるのは時期尚早だが。
G(ω0,p)は、点p∈Mがω0方向に遮蔽されているか否かを表す二値函数とする。このときω0方向への投射面積はM上の面積が存在するとき、
∫MG(ω0,p)⟨ωm(p),ω0⟩dp=∫MΨG(ω0,p)⟨ωm(p),ω0⟩dp
で表される。ここで⟨⋅,⋅⟩は正にクランプした(負はゼロにする)内積である。右辺を計算すると
∫ΩΨ[G(ω0,⋅)⟨ωm(⋅),ω0⟩](η)D(η)dη=∫ΩD(η)1∫Mδη(ωm(p))G(ω0,p)⟨ωm(p),ω0⟩dp⋅D(η)dη=∫ΩD(η)1∫Mδη(ωm(p))G(ω0,p)dp⟨η,ω0⟩D(η)dη=∫ΩΨG(η)⟨η,ω0⟩D(η)dη
となる。このΨGは
∣ΨG(ω0,ω)∣=∣∣∣∣D(ω)1∫Mδω(ωm(p))G(ω0,p)dp∣∣∣∣≤D(ω)1∫Mδω(ωm(p))dp=1
より、ΨG(ω0,ω)∈[0,1]を満たす。
さて、微細構造は微細なのだから、マクロな視点から見れば投射面積に影響を与えない。従って、上の積分は幾何学面の面積
cosθ0
と一致するだろう。(θ0はω0とωgの成す角。)故に遮蔽函数を次のように定義できる。
定義 0≤H(ω0,ω)≤1が任意のω0について
∫ΩH(ω0,η)⟨η,ω0⟩D(η)dη=cosθ0=ωg⋅ω0
を満たすとき、遮蔽函数と呼ぶ。