夏博,劉艷麗,曾威,蒲一磊,張嚴(yán)辭
1. 四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065; 2. 四川大學(xué)視覺(jué)合成圖形圖像技術(shù)國(guó)家重點(diǎn)學(xué)科實(shí)驗(yàn)室,成都 610065
基于虛擬點(diǎn)光源(virtual point lights,VPLs)的立即輻射度算法(Keller,1997;Luksch 等,2019;Wang 等,2020)是一種常用的全局光照算法,通過(guò)借助大量虛擬點(diǎn)光源計(jì)算著色點(diǎn)的間接光照,優(yōu)點(diǎn)是適用于動(dòng)態(tài)場(chǎng)景,能夠使用基于物理的光照模型進(jìn)行光照計(jì)算,缺點(diǎn)是光照計(jì)算量較大,通常只能模擬一次反彈的間接光照。
反射陰影圖算法(Dachsbacher和Stamminger,2005)可以快速生成虛擬點(diǎn)光源。該算法的提出加速了實(shí)時(shí)立即輻射度方法的發(fā)展,但是通常只能模擬間接光的漫反射效果。由于光澤反射相比于漫反射要復(fù)雜很多,使用立即輻射度方法實(shí)時(shí)渲染出比較真實(shí)的間接光澤反射效果一直是具有挑戰(zhàn)性的難題。Dachsbacher和Stamminger(2006)基于反射陰影圖,通過(guò)將虛擬點(diǎn)光源的光照信息濺射到相鄰像素的方式,實(shí)時(shí)渲染出了間接光澤反射效果,但在計(jì)算間接光照時(shí)只用Phong模型,該光照模型不符合物理定律,無(wú)法渲染出真實(shí)效果。Tokuyoshi和Harada(2017)提出使用基于物理的GGX BRDF(bidirectional reflectance distribution function)計(jì)算每個(gè)虛擬點(diǎn)光源和著色點(diǎn)處的光澤反射GGX SLC(stochastic light culling)算法,雖然能得到相對(duì)真實(shí)的間接光澤反射效果,但是GGX BRDF公式極其復(fù)雜,計(jì)算開(kāi)銷(xiāo)太大,場(chǎng)景中虛擬點(diǎn)光源的數(shù)量將成為該算法的性能瓶頸。
為了降低GGX SLC算法渲染間接光澤反射效果時(shí)的計(jì)算開(kāi)銷(xiāo),本文基于數(shù)學(xué)方法中的線性變換球面分布(Heitz 等,2016),將復(fù)雜的GGX BRDF擬合為另一種計(jì)算復(fù)雜度較低的球面分布,并在多點(diǎn)光源環(huán)境下提出了一種更高效的實(shí)時(shí)間接光澤反射渲染算法。
用于快速生成虛擬點(diǎn)光源的反射陰影圖方法提出后,大量研究投入到立即輻射度算法,如何高效利用虛擬點(diǎn)光源渲染全局光照一直是研究重點(diǎn)。
對(duì)虛擬點(diǎn)光源帶來(lái)的多光源問(wèn)題,Dachsbacher等人(2014)進(jìn)行了詳細(xì)介紹,其中對(duì)光源進(jìn)行聚類(lèi)是一種常用方法。Lightcuts(Walter 等,2005)就是對(duì)光源進(jìn)行聚類(lèi)的一種經(jīng)典方法,使用二叉樹(shù)組織光源,在著色時(shí)從樹(shù)上選擇一個(gè)lightcut對(duì)著色點(diǎn)進(jìn)行光照計(jì)算?;谧钤嫉腖ightcuts,該方法出現(xiàn)了一些變種,如多維的Lightcuts(Walter 等,2006)和雙向的Lightcuts(Walter 等,2012)。通過(guò)對(duì)lightcut的選擇引入隨機(jī)性(Yuksel,2019;Lin 和 Yuksel,2020)解決了從光源樹(shù)上采樣的相關(guān)性問(wèn)題。此外,還有結(jié)合重要性采樣的方法(Vévoda 等,2018;Estevez和 Kulla,2018;Moreau 和 Clarberg,2019)以加速光照計(jì)算。另外,在實(shí)時(shí)渲染中交叉采樣方法(Segovia 等,2006)可以減少每個(gè)像素著色時(shí)需要的虛擬點(diǎn)光源數(shù)量。
光源裁剪是另一類(lèi)常用的多光源加速算法。Dachsbacher和Stamminger(2006)通過(guò)濺射虛擬點(diǎn)光源影響范圍的邊界幾何來(lái)渲染焦散效果。Balestra(2008)提出對(duì)渲染窗口進(jìn)行分塊,每一個(gè)分塊只需要對(duì)本分塊有影響的光源進(jìn)行著色計(jì)算。通過(guò)對(duì)深度方向上再次分塊(Olsson 等,2012)可以進(jìn)一步提高了分塊著色的裁剪精度。盡管光源裁剪算法極大提高性能,但對(duì)光源影響范圍的限制造成場(chǎng)景中著色時(shí)的黑暗性偏差。Tokuyoshi和Harada(2016)提出使用隨機(jī)的光源范圍進(jìn)行裁剪來(lái)解決此問(wèn)題。在計(jì)算光澤反射效果時(shí),雙向反射分布函數(shù)(BRDF)是非常重要的一部分。Cook和Torrance(1982)首次將基于微表面的BRDF引入計(jì)算機(jī)圖形學(xué)。關(guān)于BRDF中最重要的法線分布函數(shù)有諸多研究。廣泛使用的是Beckmann(Beckmann 和 Spizzichino,1987)、Phong(Phong,1975)和GGX(Walter 等,2007)等法線分布函數(shù),但只有GGX分布具有較好的拖尾效應(yīng),因此GGX BRDF廣泛應(yīng)用于計(jì)算機(jī)圖形學(xué)工業(yè)領(lǐng)域(McAuley 等,2012;Lagarde 和 de Rousiers,2014)。然而,完全基于物理的GGX BRDF計(jì)算非常復(fù)雜,在實(shí)際應(yīng)用中需要用一些方法來(lái)加速光照計(jì)算。Tokuyoshi和Harada(2017)提出計(jì)算一個(gè)緊湊的橢球包圍體來(lái)近似虛擬點(diǎn)光源的影響范圍,并結(jié)合隨機(jī)光源裁剪來(lái)產(chǎn)生光澤反射效果。Heitz等人(2016)提出使用線性變換球面分布這種數(shù)學(xué)思想來(lái)預(yù)計(jì)算GGX BRDF,從而避免了實(shí)時(shí)計(jì)算GGX BRDF的高開(kāi)銷(xiāo)問(wèn)題。該方法由于在實(shí)時(shí)渲染中的出色表現(xiàn),應(yīng)用于多種渲染算法中(Li 等,2018;Diolatzis 等,2020;Luksch 等,2020)。
立即輻射度算法的核心思想是使用大量虛擬點(diǎn)光源計(jì)算間接光照。即
(1)
式中,Lo是著色點(diǎn)p沿觀察方向ωo的輻射亮度,N表示場(chǎng)景中虛擬點(diǎn)光源的總數(shù),Ii(ωi)表示第i個(gè)虛擬點(diǎn)光源在ωi方向上的輻射強(qiáng)度,n是著色點(diǎn)的法線,f(p,ωi,ωo)是雙向反射分布函數(shù)BRDF,〈·,·〉是向量點(diǎn)積運(yùn)算。
為了用立即輻射度方法渲染出基于物理的間接光澤反射效果,GGX SLC算法使用GGX BRDF模型描述著色點(diǎn)以及虛擬點(diǎn)光源處表面的材質(zhì)屬性,即著色點(diǎn)的輻射亮度Lo和虛擬點(diǎn)光源的輻射強(qiáng)度Ii都需要通過(guò)GGX BRDF計(jì)算。然而,GGX BRDF公式極其復(fù)雜,當(dāng)用于計(jì)算間接光澤反射時(shí),光照計(jì)算的復(fù)雜度會(huì)隨著場(chǎng)景中虛擬點(diǎn)光源的數(shù)量呈線性增加,最終會(huì)成為GGX SLC算法的瓶頸。需要指出的是,此時(shí)的性能瓶頸并非是虛擬點(diǎn)光源的數(shù)量太多,根本原因是GGX BRDF模型太過(guò)復(fù)雜。因此,如何找到新的基于物理的點(diǎn)光源光照模型,同時(shí)具有較低的計(jì)算復(fù)雜度,是使用立即輻射度算法來(lái)精確且高效地模擬間接光澤反射效果的一大難點(diǎn)。針對(duì)上述難點(diǎn),需要解決以下兩個(gè)關(guān)鍵問(wèn)題。1)將具有高計(jì)算復(fù)雜度的GGX BRDF球面分布擬合為另一種計(jì)算量很小的球面分布flow,基本思路是基于線性變換球面分布這種數(shù)學(xué)思想,將GGX BRDF球面分布通過(guò)多次迭代擬合成相對(duì)簡(jiǎn)單的球面分布flow。2)將flow應(yīng)用在點(diǎn)光源光照模型中存在大量紋理采樣操作,無(wú)法直接用于間接光澤反射效果計(jì)算,否則將嚴(yán)重影響效率。所以需要找到一種解決方案,使本文點(diǎn)光源光照模型能夠很好地適配立即輻射度算法,真正降低渲染間接光澤反射效果時(shí)的計(jì)算開(kāi)銷(xiāo)。
本文利用線性變換球面分布來(lái)擬合GGX BRDF,針對(duì)點(diǎn)光源的間接光澤反射提出一種高效算法,大幅提升了渲染效率。本文的渲染管線如圖1所示,圖中綠色階段是本文的主要工作和創(chuàng)新點(diǎn)。
圖1 本文算法渲染管線
本文的核心算法是利用線性變換球面分布這種數(shù)學(xué)思想來(lái)改進(jìn)GGX BRDF模型計(jì)算間接光澤反射時(shí)的缺點(diǎn),提出了具有更低計(jì)算量的點(diǎn)光源光照模型。然后基于該光照模型,提出了更加高效的實(shí)時(shí)間接光澤反射渲染算法。
GGX BRDF計(jì)算公式復(fù)雜,在立即輻射度方法中計(jì)算間接光澤反射效果(即GGX SLC算法)時(shí)開(kāi)銷(xiāo)很大。找到一個(gè)相對(duì)簡(jiǎn)單的球面分布flow代替復(fù)雜的GGX BRDF球面分布是改進(jìn)GGX SLC算法非常重要的一個(gè)方向。本文發(fā)現(xiàn)線性變換球面分布這種數(shù)學(xué)方法可以將一種球面分布擬合為另一種球面分布。本文基于線性變換球面分布,將GGX BRDF球面分布f擬合為余弦球面分布fc。該余弦分布計(jì)算量很低,能夠滿足flow的要求。
將GGX BRDF球面分布擬合成為余弦球面分布的基本思路是,將粗糙度和觀察角度的余弦值cosθ分別作為紋理坐標(biāo)u和v,該觀察角度是觀察向量ωo和法線n的夾角。然后針對(duì)每一組粗糙度和觀察角度,在整個(gè)半球空間上對(duì)余弦分布進(jìn)行重要性采樣,將采樣得到的向量用線性余弦變換矩陣M變換到GGX BRDF球面分布上,然后分別計(jì)算兩個(gè)球面分布在各自采樣方向上的值,通過(guò)計(jì)算兩個(gè)值的差異不斷地迭代修正矩陣M中的元素,并將最終求得的矩陣M的逆矩陣M-1保存到紋理中。
需要注意的是,擬合球面分布屬于本文算法的預(yù)計(jì)算階段。在預(yù)計(jì)算階段無(wú)法獲取基礎(chǔ)反射率F0。因此,在實(shí)際擬合過(guò)程中,擬合的是少了菲涅爾項(xiàng)F(〈ωi,ωh〉)的余弦加權(quán)的GGX BRDF,即
(2)
式中,D(〈ωh,n〉)是法線分布函數(shù),G(ωi,ωo)是幾何遮擋函數(shù)。由于ρ(ωi,ωo)少了菲涅爾項(xiàng),本文單獨(dú)計(jì)算了菲涅爾項(xiàng)對(duì)整個(gè)積分的影響ρf,然后用ρf來(lái)縮放ρ(ωi,ωo)擬合之后的結(jié)果,從而近似地彌補(bǔ)了菲涅爾項(xiàng)。ρf的計(jì)算方法為
(3)
用Fresnel-Schlick近似公式替換F(〈ωi,ωh〉),可得
ρf=F0nA+(1-F0)fA
(4)
綜上,通過(guò)線性變換球面分布,可以用一個(gè)余弦球面分布近似代替余弦加權(quán)的GGX BRDF球面分布,即
f(ωi,ωo)〈ωi,n〉≈ρffc(ωci)
(5)
由3.1節(jié)可知,GGX BRDF球面分布f(ωi,ωo)可以擬合為余弦球面分布fc(ωci)。因此,著色點(diǎn)p受到的輻射亮度計(jì)算為
(6)
式中,Ψ表示著色點(diǎn)接收到的入射光線覆蓋的球面區(qū)域;Ψ′是Ψ經(jīng)過(guò)逆向線性余弦變換后的球面區(qū)域。由于ρf中的F0只取決于具體的著色點(diǎn),nA和fA都可以從紋理中采樣而得,其采樣坐標(biāo)只取決于觀察角度以及著色點(diǎn)的粗糙度,所以它們都與ωci無(wú)關(guān),可以提到積分符號(hào)外面。
式(6)是對(duì)球面上的區(qū)域Ψ的積分,如果Ψ無(wú)限小,則可以看做著色點(diǎn)p接收到的輻射來(lái)自一個(gè)無(wú)限小的點(diǎn)光源。因此,著色點(diǎn)接收到來(lái)自單個(gè)點(diǎn)光源的光照為
(7)
式中,I表示點(diǎn)光源的輻射強(qiáng)度。式(7)與式(6)相比,多了一項(xiàng)雅可比行列式dωci/dωi(Heitz等, 2016),這是因?yàn)樵趯?shí)際的光照計(jì)算中,由于線性余弦變換的存在,dωi和dωci對(duì)應(yīng)在單位球面上的面積并不相等。
計(jì)算fc(ωci)要用到余弦分布(Heitz 等,2016),令ωnci=M-1ωi,需要注意的是,ωnci并不是單位向量,而在計(jì)算fc(ωci)時(shí)要求ωci是單位向量,所以需要先將ωnci歸一化后再取其z分量,才能得到準(zhǔn)確的fc(ωci)的值。具體為
(8)
式中,znc是向量ωnci的z分量。
結(jié)合式(7)和式(8),可得到本文最終的單點(diǎn)光源光照模型,該光照模型使用余弦分布計(jì)算著色點(diǎn)接收到的基于物理的光照。具體為
(9)
從式(9)可知,本文得到的單點(diǎn)光源下的光照模型只存在少量的加法、乘法、除法、矩陣和向量相乘以及求行列式等計(jì)算量較小的運(yùn)算操作,而原始的GGX BRDF光照模型存在大量三角函數(shù)、開(kāi)方、高次冪等非常耗時(shí)的運(yùn)算操作。將該單點(diǎn)光源光照模型擴(kuò)展至多點(diǎn)光源環(huán)境時(shí),低計(jì)算量的優(yōu)勢(shì)進(jìn)一步放大。同時(shí),由于本文的光照模型本質(zhì)上是將GGX BRDF球面分布擬合為余弦分布,所以不僅光照計(jì)算量低,而且能夠?qū)崿F(xiàn)基于物理的光照效果。
由于立即輻射度算法需要使用大量虛擬點(diǎn)光源計(jì)算間接光照,所以需要將單點(diǎn)光源光照模型擴(kuò)展至多點(diǎn)光源環(huán)境。當(dāng)著色點(diǎn)p接收到來(lái)自多個(gè)點(diǎn)光源的輻射時(shí),利用式(9)對(duì)每一個(gè)光源貢獻(xiàn)求和即可得到本文提出的多點(diǎn)光源光照模型。具體為
(10)
在式(10)表示的多點(diǎn)光源光照模型中,ρf和M-1僅與著色點(diǎn)的材質(zhì)信息和觀察角度相關(guān),與具體的光源無(wú)關(guān)。因此,可以把與光源無(wú)關(guān)的參數(shù)提到求和符號(hào)外面,將式(10)化簡(jiǎn)為
(11)
式(11)即本文最終的多點(diǎn)光源光照模型。從式(11)可以看出,與光源數(shù)量呈正相關(guān)的操作只有少量的乘法、除法以及矩陣和向量相乘(求ωnci時(shí)需要用M-1乘以ωi),其余的運(yùn)算復(fù)雜度都只是O(1)。當(dāng)著色用的是GGX BRDF時(shí),計(jì)算復(fù)雜度很高的法線分布函數(shù)D(〈ωh,n〉)、幾何遮擋函數(shù)G(ωi,ωo)以及菲涅爾函數(shù)F(〈ωi,ωh〉)都與具體的光源相關(guān),所以運(yùn)算量將隨光源數(shù)量呈明顯的線性增長(zhǎng)。而式(11)表示的本文光照模型,在光源數(shù)量增加時(shí),運(yùn)算量呈次線性增長(zhǎng)。因此,本文提出的光照模型在多點(diǎn)光源環(huán)境下,相比于GGX BRDF多點(diǎn)光源光照模型具有更低的光照計(jì)算代價(jià)以及更好的光源數(shù)量可擴(kuò)展性。
使用立即輻射度渲染間接光照的基本思想是在直接光源照亮的物體表面上分布大量虛擬點(diǎn)光源,根據(jù)直接光計(jì)算出虛擬點(diǎn)光源的輻射強(qiáng)度,然后根據(jù)這些虛擬點(diǎn)光源的輻射強(qiáng)度計(jì)算出著色點(diǎn)的間接光照,如圖2所示。為了與著色點(diǎn)區(qū)分,使用上標(biāo)“′”表示與虛擬點(diǎn)光源相關(guān)的量。其中,ω′i表示直接光到虛擬點(diǎn)光源的入射方向,ω′o表示虛擬點(diǎn)光源到著色點(diǎn)的出射方向。
圖2 使用虛擬點(diǎn)光源計(jì)算著色點(diǎn)的間接光澤反射
計(jì)算虛擬點(diǎn)光源的輻射強(qiáng)度時(shí),可使用本文提出的單點(diǎn)光源光照模型,即式(9)。但是算法此處存在一個(gè)難點(diǎn):盡管相比于使用原始的GGX BRDF公式少了很多耗時(shí)的運(yùn)算,但由于不同的虛擬點(diǎn)光源對(duì)不同的著色點(diǎn)著色時(shí)具有不同的紋理采樣坐標(biāo),會(huì)導(dǎo)致紋理采樣次數(shù)太多,而現(xiàn)代GPU架構(gòu)上的紋理采樣是非常耗時(shí)的操作,將大幅降低渲染效率。
算法1 實(shí)時(shí)計(jì)算虛擬點(diǎn)光源的輻射強(qiáng)度
輸入:由影響當(dāng)前像素的虛擬點(diǎn)光源的索引構(gòu)成的數(shù)組VPLIndexes以及數(shù)組大小Ne,虛擬點(diǎn)光源結(jié)構(gòu)體數(shù)組VPLs,著色點(diǎn)位置p,矩陣紋理MatTex,直接光源的入射方向ω′i。
輸出:每個(gè)虛擬點(diǎn)光源對(duì)當(dāng)前著色點(diǎn)的輻射強(qiáng)度。
1) fori←0 toNedo;
2)Index←VPLIndexes[i];
3)F′0,α′,n′,←VPLs[Index];
4)ω′o←norm(p-VPLs[Index].position);
5)UV←calcUV(α′,dot(n′,ω′o));
6)M′-1,n′A,f′A←texture(MatTex,UV);
7)I(ω′o)←calcIntensity(ω′i,M′-1,n′A,f′A,F′0);
8) end。
其中,norm為向量歸一化;position為虛擬點(diǎn)光源位置;UV是紋理采樣坐標(biāo)。
使用本文提出的單點(diǎn)光源光照模型計(jì)算虛擬點(diǎn)光源的輻射強(qiáng)度存在兩個(gè)問(wèn)題。1)紋理采樣次數(shù)過(guò)多。算法1需要對(duì)每個(gè)著色點(diǎn)進(jìn)行Ne次紋理采樣,假設(shè)渲染窗口的分辨率為W×H,那么共需要的紋理采樣次數(shù)為W×H×Ne。場(chǎng)景中的虛擬點(diǎn)光源數(shù)量增大會(huì)導(dǎo)致更多的紋理采樣次數(shù),根本原因在于同一個(gè)虛擬點(diǎn)光源對(duì)不同著色點(diǎn)著色時(shí),每次著色都要進(jìn)行一次紋理采樣,因?yàn)椴蓸泳仃嚰y理的紋理坐標(biāo)與ω′o有關(guān),即與具體的著色點(diǎn)有關(guān)。2)多次紋理采樣被串行執(zhí)行。算法1中Ne次紋理采樣被串行執(zhí)行也是該算法性能低效的主要原因之一。假設(shè)一次紋理采樣所需時(shí)間為t,那么算法1在紋理采樣上的時(shí)間就是Net。降低該采樣時(shí)間甚至降低為t,即只耗費(fèi)執(zhí)行一次紋理采樣所需的時(shí)間是一項(xiàng)具有挑戰(zhàn)性的工作。難點(diǎn)是需要減少紋理采樣次數(shù),并且盡可能使這些紋理采樣過(guò)程被并行執(zhí)行。本文注意到,對(duì)于各向同性的物體材質(zhì),當(dāng)交換入射向量ωi和出射向量ωo時(shí),GGX BRDF值不變,即
f(p,ωi,ωo)=f(p,ωo,ωi)
(12)
同理,通過(guò)余弦分布近似計(jì)算GGX BRDF的分布值時(shí),也具有類(lèi)似的屬性,即
fc(ω′i,M′-1)=fc(ω′o,M″-1)
(13)
式中,M′-1和M″-1都是從矩陣紋理中采樣而得,上標(biāo)“″”表示改變紋理采樣坐標(biāo)后與虛擬點(diǎn)光源相關(guān)的量。M′-1的紋理采樣坐標(biāo)取決于虛擬點(diǎn)光源所處表面點(diǎn)的粗糙度和ω′o與虛擬點(diǎn)光源處法線n′的夾角。M″-1的紋理采樣坐標(biāo)取決于虛擬點(diǎn)光源所處表面點(diǎn)的粗糙度和ω′i與虛擬點(diǎn)光源處法線n′的夾角。
結(jié)合式(9),可得虛擬點(diǎn)光源輻射強(qiáng)度的計(jì)算式,即
(14)
式中,Φ表示直接光源的輻射強(qiáng)度,ρ″f里面的n″A、f″A和M″-1都采自于紋理。采樣坐標(biāo)取決于虛擬點(diǎn)光源所處表面點(diǎn)的粗糙度和直接光入射向量ω′i與虛擬點(diǎn)光源處法線n′的夾角,且ω″nci=M″-1ω′o。
使用式(14)計(jì)算虛擬點(diǎn)光源輻射強(qiáng)度的好處是紋理采樣坐標(biāo)與具體著色點(diǎn)無(wú)關(guān),只與虛擬點(diǎn)光源和直接光源有關(guān),可以將矩陣紋理采樣操作與著色點(diǎn)進(jìn)行解耦。這樣在一個(gè)Pass中使用計(jì)算著色器并行執(zhí)行與虛擬點(diǎn)光源數(shù)目相等的GPU線程,每個(gè)線程根據(jù)虛擬點(diǎn)光源處的粗糙度以及直接光入射方向,從矩陣紋理中并行地采樣出n″A、f″A以及M″-1。然后采用第2個(gè)Pass對(duì)每個(gè)著色點(diǎn)并行地執(zhí)行光照計(jì)算,著色時(shí)與虛擬點(diǎn)光源相關(guān)的量只需要在GPU緩存中取出對(duì)應(yīng)的n″A、f″A以及M″-1即可。
算法2 實(shí)時(shí)計(jì)算虛擬點(diǎn)光源的輻射強(qiáng)度(改進(jìn)版)
輸入:由影響當(dāng)前像素的虛擬點(diǎn)光源的索引構(gòu)成的數(shù)組VPLIndexes以及數(shù)組大小Ne,虛擬點(diǎn)光源結(jié)構(gòu)體數(shù)組VPLs,著色點(diǎn)位置p,矩陣紋理MatTex,直接光源的入射方向ω′i。
輸出:每個(gè)虛擬點(diǎn)光源對(duì)當(dāng)前著色點(diǎn)的輻射強(qiáng)度。
Pass 1:所有虛擬點(diǎn)光源并行采樣。
1)Index←ThreadId;
2)α′,n′←VPLs[Index];
3)UV←calcUV(α′,dot(n′,ω′i));
4)M″-1,n″A,f″A←texture(MatTex,UV);
5)VPLs[Index]←M″-1,n″A,f″A。
Pass 2:片元著色。
6) fori←0 toNedo;
7)Index←VPLIndexes[i];
8)F″0,M″-1,n″A,f″A←VPLs[Index];
9)ω′o←norm(p-VPLs[Index].position);
10)I(ω′o)←calcIntensity(ω′o,M″-1,n″A,f″A,F″0);
11) end。
其中,ThreadId為當(dāng)前GPU線程索引。
與算法1相比,算法2由于紋理采樣坐標(biāo)與具體著色點(diǎn)無(wú)關(guān),總的紋理采樣次數(shù)等于虛擬點(diǎn)光源的總數(shù)N,遠(yuǎn)小于W×H×Ne,而且算法2中的紋理采樣被諸多GPU線程并行執(zhí)行,所以理論上能夠?qū)⒓y理采樣時(shí)間降低為t。
綜上,使用算法2計(jì)算虛擬點(diǎn)光源對(duì)著色點(diǎn)的輻射強(qiáng)度,結(jié)合本文提出的多點(diǎn)光源光照模型(即式(11))對(duì)著色點(diǎn)著色,可以高效地渲染間接光澤反射效果。
針對(duì)GGX SLC算法使用GGX BRDF光照模型計(jì)算間接光澤反射帶來(lái)的高開(kāi)銷(xiāo)問(wèn)題,實(shí)驗(yàn)首先驗(yàn)證本文提出的光照模型的正確性,然后從渲染效果和渲染效率兩方面與GGX SLC算法對(duì)比,驗(yàn)證本文算法能夠?qū)崿F(xiàn)與GGX SLC算法相似的渲染效果,同時(shí)比GGX SLC算法具有更高的渲染效率。此外,驗(yàn)證了隨著場(chǎng)景中虛擬點(diǎn)光源數(shù)量的增加,本文算法能夠取得更大的效率提升。
實(shí)驗(yàn)環(huán)境為NVIDIA GeForce RTX 2070 GPU、Intel i7-9750H CPU、32 GB內(nèi)存。若無(wú)特殊說(shuō)明,渲染圖像分辨率為1 920 × 1 080像素,虛擬點(diǎn)光源由分辨率為512 × 512像素的反射陰影圖生成,實(shí)驗(yàn)使用8 × 8的交叉采樣模式,使用濾波半徑為16的geometry-aware濾波(Segovia 等,2006)過(guò)濾交叉采樣產(chǎn)生的噪聲,使用16×16的分塊對(duì)虛擬點(diǎn)光源進(jìn)行分塊著色。本文算法和GGX SLC算法渲染得到的圖像的差異使用均方根誤差(root mean squared error,RMSE)來(lái)衡量。
1)本文提出的光照模型的正確性驗(yàn)證。由于本文間接光澤反射渲染算法基于本文提出的單點(diǎn)光源以及多點(diǎn)光源光照模型,所以需要先驗(yàn)證本文提出的光照模型的正確性。實(shí)驗(yàn)在單點(diǎn)光源場(chǎng)景驗(yàn)證本文提出的光照模型的正確性。場(chǎng)景中只有一個(gè)平面,在平面上方有一個(gè)點(diǎn)光源。由于實(shí)驗(yàn)場(chǎng)景只有一個(gè)點(diǎn)光源,在光照計(jì)算時(shí)沒(méi)有使用分塊著色、交叉采樣等光照加速算法。實(shí)驗(yàn)渲染圖像的分辨率為800 × 600像素。圖3展示了不同粗糙度下使用本文單點(diǎn)光源光照模型和GGX BRDF光照模型的渲染結(jié)果??梢钥闯觯诓煌植诙认?,本文提出的光照模型能夠?qū)崿F(xiàn)與GGX BRDF光照模型相似的渲染結(jié)果,RMSE均不超過(guò)0.002,從而驗(yàn)證了本文提出的光照模型的正確性。
圖3 本文單點(diǎn)光源光照模型和GGX BRDF光照模型在不同粗糙度下的渲染結(jié)果
2)渲染效果和效率對(duì)比。為驗(yàn)證本文算法能否實(shí)現(xiàn)與GGX SLC算法相似的渲染效果,是否具有比GGX SLC算法更高的渲染效率,在Sponza、金屬指環(huán)和Museum場(chǎng)景進(jìn)行實(shí)驗(yàn),渲染結(jié)果如圖4所示。其中,Sponza場(chǎng)景使用的反射陰影圖的分辨率為256 × 256像素。從圖4可以看出,在3種不同場(chǎng)景中,使用本文算法渲染得到的最終效果與GGX SLC算法得到的非常接近,RMSE均不超過(guò)0.006,驗(yàn)證了本文算法能夠?qū)崿F(xiàn)與GGX SLC算法相似的間接光澤反射效果。
圖4 本文算法與GGX SLC算法在不同場(chǎng)景下渲染效果的對(duì)比
表1為本文算法和GGX SLC算法在Sponza場(chǎng)景渲染最終的間接光澤反射效果過(guò)程中每個(gè)Pass的時(shí)間開(kāi)銷(xiāo)。由于在漫反射計(jì)算中,本文算法和GGX SLC算法使用的都是Lambert漫反射光照模型,因此本文算法和GGX SLC算法在漫反射計(jì)算上不存在效果和效率上的差別。通過(guò)表1可以看出,本文算法和GGX SLC算法在效率上的差異主要出現(xiàn)在“分塊裁剪 + 光照計(jì)算”階段,本文算法效率提升了41.0%。而兩個(gè)算法使用了相同的光源分塊裁剪方式,因此,渲染效率的提升源于本文算法在進(jìn)行光照計(jì)算時(shí)沒(méi)有使用GGX SLC算法使用的GGX BRDF光照模型,而是使用了本文的具有更低計(jì)算復(fù)雜度的間接光澤反射光照模型。
表1 本文算法和GGX SLC算法在Sponza場(chǎng)景中使用渲染間接光澤反射效果時(shí)每個(gè)pass的時(shí)間開(kāi)銷(xiāo)
3)虛擬點(diǎn)光源數(shù)量的影響。為驗(yàn)證場(chǎng)景中虛擬點(diǎn)光源數(shù)量增多時(shí),本文算法相比GGX SLC算法更加具有效率優(yōu)勢(shì),在金屬指環(huán)場(chǎng)景中使用不同數(shù)量的虛擬點(diǎn)光源進(jìn)行實(shí)驗(yàn),渲染結(jié)果和效率對(duì)比分別如圖5和表2所示。從圖5可以看出,當(dāng)虛擬點(diǎn)光源數(shù)量增加時(shí),兩種算法渲染得到的間接光澤反射效果都會(huì)更好,在虛擬點(diǎn)光源數(shù)量相同情況下,RMSE不超過(guò)0.003,兩種算法的渲染效果幾乎沒(méi)有區(qū)別。然而隨著場(chǎng)景中虛擬點(diǎn)光源數(shù)量的增加,從表2可以看出,使用本文算法渲染間接光澤反射效果時(shí),能夠比GGX SLC算法取得更大的效率提升,本質(zhì)原因是本文算法在計(jì)算間接光澤反射時(shí)所用的多點(diǎn)光源模型中,只有少量的加法以及乘除法運(yùn)算會(huì)隨著虛擬點(diǎn)光源數(shù)量的增加而增加,其運(yùn)算開(kāi)銷(xiāo)增加的速率低于GGX BRDF光照模型的運(yùn)算開(kāi)銷(xiāo)增加速率,所以虛擬點(diǎn)光源數(shù)量越多,本文算法能夠取得的效率提升就越大。
圖5 不同數(shù)量的虛擬點(diǎn)光源對(duì)本文算法及GGX SLC算法渲染效果的影響
表2 在金屬指環(huán)場(chǎng)景使用不同數(shù)量的虛擬點(diǎn)光源時(shí),本文算法與GGX SLC算法的渲染效率對(duì)比
本文針對(duì)GGX SLC算法在光照計(jì)算上的高開(kāi)銷(xiāo)問(wèn)題,提出了一種效率更高的實(shí)時(shí)間接光澤反射算法。該算法利用線性變換球面分布來(lái)擬合GGX BRDF,以降低BRDF的計(jì)算復(fù)雜度,并相應(yīng)地給出了在單、多點(diǎn)光源環(huán)境下的光照模型。同時(shí),針對(duì)多點(diǎn)光源環(huán)境下巨大的紋理采樣開(kāi)銷(xiāo),提出了一種紋理采樣的優(yōu)化策略。實(shí)驗(yàn)結(jié)果表明,本文算法能夠?qū)崿F(xiàn)與GGX SLC算法相似的間接光澤反射效果,而且渲染效率更高。
但是,本文算法依然存在值得繼續(xù)研究和改進(jìn)的地方。1)物體表面粗糙度很低時(shí),間接光澤反射效果不連續(xù)問(wèn)題。該問(wèn)題是因?yàn)榇植诙群艿蜁r(shí)虛擬點(diǎn)光源和著色點(diǎn)反射的光照信息更加高頻,如果虛擬點(diǎn)光源在表面上分布得不夠密集,將很難良好地重建出連續(xù)的高頻光照結(jié)果。基于立即輻射度方法,在低粗糙度下渲染出連續(xù)的間接光澤反射效果是未來(lái)的研究重點(diǎn)之一。2)物體幾何邊緣抖動(dòng)現(xiàn)象。該抖動(dòng)是由交叉采樣算法造成的,在物體幾何邊緣上法線、位置等信息會(huì)發(fā)生高頻變化,導(dǎo)致濾波時(shí)無(wú)法重建出良好的光照結(jié)果,從而出現(xiàn)抖動(dòng)現(xiàn)象。在未來(lái)工作中,可以考慮使用Metalights(Faure 和 Chang,2010)算法降低交叉采樣帶來(lái)的噪聲,從而降低該抖動(dòng)現(xiàn)象。3)某些情況擬合準(zhǔn)確性不高問(wèn)題。由于本文在擬合GGX BRDF的過(guò)程中采用了Heitz中的方法,因此會(huì)遇到很多與Heitz相同的問(wèn)題,例如掠射角擬合準(zhǔn)確性不高等問(wèn)題。進(jìn)一步提高在不同情況下擬合的準(zhǔn)確性,是未來(lái)的研究方向之一。