概述
如果我們有一個(gè)上半球的余弦分布函數(shù)(Do)(D_{o})(Do?),并對(duì)這個(gè)余弦分布函數(shù)進(jìn)行一個(gè)矩陣(M)(M)(M)變換,變換為一個(gè)新的分布函數(shù)(D)(D)(D)。
D=MDoD = M D_{o}D=MDo?
這就是基本思想:用一個(gè)余弦分布函數(shù)來擬合出不同的分布函數(shù),并且誤差很小。
LTC基本定義與性質(zhì)
我們定義DoD_{o}Do?為我們的基函數(shù),也就是我們的原始分布函數(shù)。
我們?cè)?span id="ozvdkddzhkzd" class="katex--inline">DoD_{o}Do?上采樣一個(gè)方向向量ωo\omega_{o}ωo?,那么我們對(duì)這個(gè)方向向量做一個(gè)線性變換,也就是做一個(gè)MMM矩陣乘法變換為一個(gè)新的方向向量ω\omegaω。
ω=Mωo∣∣Mωo∣∣\omega = \frac{M\omega_{o}}{||M\omega_{o}||}ω=∣∣Mωo?∣∣Mωo??,ωo=M?1ω∣∣M?1ω∣∣\omega_{o} = \frac{M^{-1}\omega}{||M^{-1}\omega||}ωo?=∣∣M?1ω∣∣M?1ω?,
那么一個(gè)目標(biāo)分布函數(shù)D(ω)D(\omega)D(ω)如何變換為Do(ωo)D_{o}(\omega_{o})Do?(ωo?)呢?
即就是一個(gè)變量替換:
D(ω)=Do(ωo)?ωo?ω=Do(M?1ω∣∣M?1ω∣∣)∣M?1∣∣∣M?1ω∣∣3D(\omega) = D_{o}(\omega_{o})\frac{\partial\omega_{o}}{\partial\omega} = D_{o}(\frac{M^{-1}\omega}{||M^{-1}\omega||})\frac{|M^{-1}|}{||M^{-1}\omega||^{3}}D(ω)=Do?(ωo?)?ω?ωo??=Do?(∣∣M?1ω∣∣M?1ω?)∣∣M?1ω∣∣3∣M?1∣?
?ωo?ω=∣M?1∣∣∣M?1ω∣∣3\frac{\partial\omega_{o}}{\partial\omega} = \frac{|M^{-1}|}{||M^{-1}\omega||^{3}}?ω?ωo??=∣∣M?1ω∣∣3∣M?1∣?是Jacobian項(xiàng),可以從幾何關(guān)系上進(jìn)行推導(dǎo)。
那就讓我們簡(jiǎn)單推導(dǎo)一下吧!(假如想要了解詳細(xì),請(qǐng)參考原文哦!)
這要從立體角開始推導(dǎo)啦。我們定義一個(gè)原始分布上的立體角?ωo\partial\omega_{o}?ωo?,將其進(jìn)行MMM變換,得到一個(gè)新的立體角?ω\partial\omega?ω。
?ω=?ωoAcosθr2\partial\omega = \partial\omega_{o}A\frac{cos\theta}{r^{2}}?ω=?ωo?Ar2cosθ?
這就是一個(gè)立體角的定義。讓我們來探討一下里面的面積與距離的表達(dá)吧!
偷懶一下,可以從圖中看到面積與距離的表達(dá),那么讓我們來化簡(jiǎn)一下吧。
Mω1×Mω2=∣M∣M?T(ω1×ω2)=∣M∣M?TωoM\omega_{1}\times M\omega_{2} = |M|M^{-T}(\omega_{1} \times \omega_{2}) = |M|M^{-T}\omega_{o}Mω1?×Mω2?=∣M∣M?T(ω1?×ω2?)=∣M∣M?Tωo??ω?ωo=∣M∣∣∣Mωo∣∣3\frac{\partial\omega}{\partial\omega_{o}} = \frac{|M|}{||M\omega_{o}||^{3}}?ωo??ω?=∣∣Mωo?∣∣3∣M∣??ωo?ω=M?1∣∣M?1ω∣∣3\frac{\partial\omega_{o}}{\partial\omega} = \frac{M^{-1}}{||M^{-1}\omega||^{3}}?ω?ωo??=∣∣M?1ω∣∣3M?1?
如果MMM是縮放矩陣或者旋轉(zhuǎn)矩陣,這個(gè)Jacobian項(xiàng)等于一。即分布形狀是不變的。
讓我們假設(shè)矩陣是縮放矩陣(M=λIM = \lambda IM=λI),
∣M?1=∣M∣=∣λI∣=λ3|M^{-1} = |M| = |\lambda I| = \lambda^{3}∣M?1=∣M∣=∣λI∣=λ3∣∣M?1ω∣∣=∣∣λIω∣∣=λ||M^{-1}\omega|| = ||\lambda I \omega|| = \lambda∣∣M?1ω∣∣=∣∣λIω∣∣=λ?ωo?ω=∣M?1∣∣∣M?1ω∣∣3=1\frac{\partial\omega_{o}}{\partial\omega} = \frac{|M^{-1}|}{||M^{-1}\omega||^{3}} = 1?ω?ωo??=∣∣M?1ω∣∣3∣M?1∣?=1
讓我們假設(shè)矩陣是旋轉(zhuǎn)矩陣M=RM = RM=R。
∣M∣=∣M?1∣=1|M| = |M^{-1}| = 1∣M∣=∣M?1∣=1∣∣M?1ω∣∣=1||M^{-1}\omega|| = 1∣∣M?1ω∣∣=1?ωo?ω=1\frac{\partial\omega_{o}}{\partial\omega} = 1?ω?ωo??=1
那么被變換后的分布DDD有哪些性質(zhì)呢?
首先是范數(shù):
∫ΩD(ω)dω=∫ΩDo?ωoωdω=∫ΩDo(ωo)dωo\int_{\Omega}D(\omega)\mathrmozvdkddzhkzd\omega = \int_{\Omega}D_{o}\frac{\partial\omega_{o}}{\omega}\mathrmozvdkddzhkzd\omega = \int_{\Omega}D_{o}(\omega_{o})\mathrmozvdkddzhkzd\omega_{o}∫Ω?D(ω)dω=∫Ω?Do?ω?ωo??dω=∫Ω?Do?(ωo?)dωo?
其次對(duì)于多邊形積分相等:
∫PD(ω)dω=∫PoDo(ωo)dωo\int_{P}D{(\omega)}\mathrmozvdkddzhkzd\omega = \int_{P_{o}}D_{o}(\omega_{o})\mathrmozvdkddzhkzd\omega_{o}∫P?D(ω)dω=∫Po??Do?(ωo?)dωo?
Po=M?1PP_{o} = M^{-1}PPo?=M?1P
使用LTC近似BRDF
我們?cè)趯?duì)LTC有了一些基本的認(rèn)識(shí)之后,讓我們用它來進(jìn)行擬合BRDF吧! 這里作者使用了各項(xiàng)同性的GGX微表面分布模型。
對(duì)于一個(gè)原分布DoD_{o}Do?,我們選擇一個(gè)上半球的余弦分布,當(dāng)然還可以選擇cosine2cosine^{2}cosine2,均勻半球分布等:
Do(ωo=(x,y,z))=1πmax(0,z)D_{o}(\omega_{o} = (x,y,z)) = \frac{1}{\pi}max(0,z)Do?(ωo?=(x,y,z))=π1?max(0,z)
我們來定義一下目標(biāo)分布吧,也就是我們將要擬合的BRDF分布函數(shù)帶著余弦項(xiàng)的:
D≈ρ(ωv,ωl)cosθlD \approx \rho(\omega_{v},\omega_{l})cos\theta_{l}D≈ρ(ωv?,ωl?)cosθl?
對(duì)于一個(gè)各項(xiàng)同性的材質(zhì)而言,BRDF函數(shù)分布只依賴于入射方向ωv=(sinθv,0,cosθv)\omega_{v} = (sin\theta_{v},0,cos\theta_{v})ωv?=(sinθv?,0,cosθv?)和粗糙度α\alphaα。
我們發(fā)現(xiàn)可以用一個(gè)矩陣MMM來很好的擬合DDD,矩陣被寫為:
M=[a0b0c0d01]M = \begin{bmatrix} a& 0 &b \\ 0& c & 0\\ d& 0 &1 \end{bmatrix}M=???a0d?0c0?b01????
可以看見這個(gè)矩陣只有四個(gè)參數(shù)需要被確定。
可以從圖中看出擬合效果很不錯(cuò)!
使用LTC進(jìn)行多邊形光源的著色
我們?cè)诓煌亩噙呅喂庠?span id="ozvdkddzhkzd" class="katex--inline">PPP上計(jì)算直接光照的著色,ωv\omega_{v}ωv?代表視口方向(view direction),ρ\rhoρ代表BRDF函數(shù),LLL是多邊形光源出射的radiance。
I=∫PL(ωl)ρ(ωv,ωl)cosθldωlI = \int_{P}L(\omega_{l})\rho(\omega_{v}, \omega_{l})cos\theta_{l}\mathrmozvdkddzhkzd\omega_{l}I=∫P?L(ωl?)ρ(ωv?,ωl?)cosθl?dωl?
我們使用LTC對(duì)BRDF函數(shù)進(jìn)行擬合,可得:
I=∫PL(ωl)ρ(ωv,ωl)cosθldωl≈∫PL(ωl)D(ωl)dωlI = \int_{P}L(\omega_{l})\rho(\omega_{v}, \omega_{l})cos\theta_{l}\mathrmozvdkddzhkzd\omega_{l} \approx\int_{P}L(\omega_{l})D({\omega_{l})}\mathrmozvdkddzhkzd\omega_{l}I=∫P?L(ωl?)ρ(ωv?,ωl?)cosθl?dωl?≈∫P?L(ωl?)D(ωl?)dωl?
這里我們假設(shè)多邊形光源出射的radiance是一個(gè)常數(shù),即L(ωl)=LL(\omega_{l}) = LL(ωl?)=L,那么我們可以進(jìn)一步簡(jiǎn)化:
I=∫PL(ωl)D(ωl)dωl=L∫PD(ωl)dωlI = \int_{P}L(\omega_{l})D({\omega_{l})}\mathrmozvdkddzhkzd\omega_{l} = L\int_{P}D(\omega_{l})\mathrmozvdkddzhkzd\omega_{l}I=∫P?L(ωl?)D(ωl?)dωl?=L∫P?D(ωl?)dωl?
我們?cè)龠M(jìn)行積分變換:
∫PD(ω)dω=∫PoDo(ωo)dωo=E(Po)\int_{P}D(\omega)\mathrmozvdkddzhkzd\omega = \int_{P_{o}}D_{o}(\omega_{o})\mathrmozvdkddzhkzd\omega_{o} = E(P_{o})∫P?D(ω)dω=∫Po??Do?(ωo?)dωo?=E(Po?)
對(duì)于一個(gè)余弦分布的半球面函數(shù)上的多邊形積分是有表達(dá)式的,即:
E(p1,...,pn)=12π∑i=1nacos(<pi,pj>)?pi×pj∣∣pi×pj∣∣,[001]?E(p_{1},...,p_{n}) = \frac{1}{2\pi}\sum_{i=1}^{n}acos(<p_{i},p_{j}>)\left \langle \frac{p_{i}\times p_{j}}{||p_{i}\times p_{j}||}, \begin{bmatrix}0\\ 0\\1\end{bmatrix} \right \rangleE(p1?,...,pn?)=2π1?∑i=1n?acos(<pi?,pj?>)?∣∣pi?×pj?∣∣pi?×pj??,???001?????
這里的j=(i+1)mod(n)j = (i+1)mod(n)j=(i+1)mod(n),注意將多邊形光源進(jìn)行變換后,要將光源進(jìn)行上半球面的裁剪。
這里的證明就不再贅述了。
對(duì)于帶著紋理的光源來說,作者給出的方法很奇怪,就不再討論。
總結(jié)
對(duì)于這篇paper,將一種數(shù)學(xué)方法引入了圖形學(xué),是很不錯(cuò)的。
優(yōu)點(diǎn):
- 對(duì)于簡(jiǎn)單多邊形光源(矩形,三角形等)來說,對(duì)于場(chǎng)景的著色很快,效果很棒,誤差小。
缺點(diǎn):
- 復(fù)雜多邊形光源(心形等)的著色速度慢,已經(jīng)很難達(dá)到實(shí)時(shí)。
- 只能針對(duì)二維平面上的多邊形光源。
- 只能進(jìn)行直接光照著色。
實(shí)現(xiàn)流程:
通過視口方向ωv,α\omega_{v},\alphaωv?,α進(jìn)行采樣LUT得到矩陣MMM。將面積光源進(jìn)行旋轉(zhuǎn),即面積光源坐標(biāo)系轉(zhuǎn)變?yōu)橐韵袼攸c(diǎn)為原點(diǎn)的局部坐標(biāo)系。即構(gòu)造一個(gè)TBN矩陣。
mul(Minv, transpose(mat3(T, B, N)));將世界坐標(biāo)系下的面積光源的頂點(diǎn)變換。裁剪多邊形。進(jìn)行線積分。
這里給出LTC的網(wǎng)站,想了解更詳細(xì)的內(nèi)容可以看看哦!
對(duì)那充滿不安的日子說再見吧,對(duì)那充滿不安的日子說再見吧,對(duì)那充滿不安的日子說再見吧,
向著未知的夢(mèng)境之地前行,向著未知的夢(mèng)境之地前行,向著未知的夢(mèng)境之地前行,
我想總有一日我會(huì)變得更加堅(jiān)強(qiáng)!我想總有一日我會(huì)變得更加堅(jiān)強(qiáng)!我想總有一日我會(huì)變得更加堅(jiān)強(qiáng)!
總結(jié)
以上是生活随笔為你收集整理的Polygonal-Light Shading with LTC的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。