日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Polygonal-Light Shading with LTC

發(fā)布時間:2023/12/13 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Polygonal-Light Shading with LTC 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

如果我們有一個上半球的余弦分布函數(shù)(Do)(D_{o})(Do?),并對這個余弦分布函數(shù)進行一個矩陣(M)(M)(M)變換,變換為一個新的分布函數(shù)(D)(D)(D)

  • D=MDoD = M D_{o}D=MDo?

  • 這就是基本思想:用一個余弦分布函數(shù)來擬合出不同的分布函數(shù),并且誤差很小。

    LTC基本定義與性質(zhì)

    我們定義DoD_{o}Do?為我們的基函數(shù),也就是我們的原始分布函數(shù)。
    我們在DoD_{o}Do?上采樣一個方向向量ωo\omega_{o}ωo?,那么我們對這個方向向量做一個線性變換,也就是做一個MMM矩陣乘法變換為一個新的方向向量ω\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ω?,
  • 那么一個目標(biāo)分布函數(shù)D(ω)D(\omega)D(ω)如何變換為Do(ωo)D_{o}(\omega_{o})Do?(ωo?)呢?

    即就是一個變量替換:

  • 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ω3M?1?
  • ?ωo?ω=∣M?1∣∣∣M?1ω∣∣3\frac{\partial\omega_{o}}{\partial\omega} = \frac{|M^{-1}|}{||M^{-1}\omega||^{3}}?ω?ωo??=M?1ω3M?1?是Jacobian項,可以從幾何關(guān)系上進行推導(dǎo)。

    那就讓我們簡單推導(dǎo)一下吧!(假如想要了解詳細(xì),請參考原文哦!)

    這要從立體角開始推導(dǎo)啦。我們定義一個原始分布上的立體角?ωo\partial\omega_{o}?ωo?,將其進行MMM變換,得到一個新的立體角?ω\partial\omega?ω

  • ?ω=?ωoAcosθr2\partial\omega = \partial\omega_{o}A\frac{cos\theta}{r^{2}}?ω=?ωo?Ar2cosθ?
  • 這就是一個立體角的定義。讓我們來探討一下里面的面積與距離的表達吧!

    偷懶一下,可以從圖中看到面積與距離的表達,那么讓我們來化簡一下吧。

  • 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?=MM?T(ω1?×ω2?)=MM?Tωo?
  • ?ω?ωo=∣M∣∣∣Mωo∣∣3\frac{\partial\omega}{\partial\omega_{o}} = \frac{|M|}{||M\omega_{o}||^{3}}?ωo??ω?=Mωo?3M?
  • ?ω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)矩陣,這個Jacobian項等于一。即分布形狀是不變的。

    讓我們假設(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|| = \lambdaM?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ω3M?1?=1
  • 讓我們假設(shè)矩陣是旋轉(zhuǎn)矩陣M=RM = RM=R

  • ∣M∣=∣M?1∣=1|M| = |M^{-1}| = 1M=M?1=1
  • ∣∣M?1ω∣∣=1||M^{-1}\omega|| = 1M?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?
  • 其次對于多邊形積分相等:

  • ∫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

    我們在對LTC有了一些基本的認(rèn)識之后,讓我們用它來進行擬合BRDF吧! 這里作者使用了各項同性的GGX微表面分布模型。

    對于一個原分布DoD_{o}Do?,我們選擇一個上半球的余弦分布,當(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ù)帶著余弦項的:

  • D≈ρ(ωv,ωl)cosθlD \approx \rho(\omega_{v},\omega_{l})cos\theta_{l}Dρ(ωv?,ωl?)cosθl?
  • 對于一個各項同性的材質(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)可以用一個矩陣MMM來很好的擬合DDD,矩陣被寫為:

  • M=[a0b0c0d01]M = \begin{bmatrix} a& 0 &b \\ 0& c & 0\\ d& 0 &1 \end{bmatrix}M=???a0d?0c0?b01????
  • 可以看見這個矩陣只有四個參數(shù)需要被確定。


    可以從圖中看出擬合效果很不錯!

    使用LTC進行多邊形光源的著色

    我們在不同的多邊形光源PPP上計算直接光照的著色,ω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對BRDF函數(shù)進行擬合,可得:

  • 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是一個常數(shù),即L(ωl)=LL(\omega_{l}) = LL(ωl?)=L,那么我們可以進一步簡化:

  • 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?=LP?D(ωl?)dωl?
  • 我們再進行積分變換:

  • ∫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?)
  • 對于一個余弦分布的半球面函數(shù)上的多邊形積分是有表達式的,即:

  • 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),注意將多邊形光源進行變換后,要將光源進行上半球面的裁剪。

    這里的證明就不再贅述了。

    對于帶著紋理的光源來說,作者給出的方法很奇怪,就不再討論。

    總結(jié)

    對于這篇paper,將一種數(shù)學(xué)方法引入了圖形學(xué),是很不錯的。

    優(yōu)點:

    • 對于簡單多邊形光源(矩形,三角形等)來說,對于場景的著色很快,效果很棒,誤差小。

    缺點:

    • 復(fù)雜多邊形光源(心形等)的著色速度慢,已經(jīng)很難達到實時。
    • 只能針對二維平面上的多邊形光源。
    • 只能進行直接光照著色。

    實現(xiàn)流程:

  • 通過視口方向ωv,α\omega_{v},\alphaωv?α進行采樣LUT得到矩陣MMM。將面積光源進行旋轉(zhuǎn),即面積光源坐標(biāo)系轉(zhuǎn)變?yōu)橐韵袼攸c為原點的局部坐標(biāo)系。即構(gòu)造一個TBN矩陣。
    mul(Minv, transpose(mat3(T, B, N)));
  • 將世界坐標(biāo)系下的面積光源的頂點變換。
  • 裁剪多邊形。
  • 進行線積分。
  • 這里給出LTC的網(wǎng)站,想了解更詳細(xì)的內(nèi)容可以看看哦!

    對那充滿不安的日子說再見吧,對那充滿不安的日子說再見吧,滿
    向著未知的夢境之地前行,向著未知的夢境之地前行,
    我想總有一日我會變得更加堅強!我想總有一日我會變得更加堅強!

    總結(jié)

    以上是生活随笔為你收集整理的Polygonal-Light Shading with LTC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。