周文言,陳純毅
(長春理工大學(xué) 計算機科學(xué)技術(shù)學(xué)院,長春 130022)
陰影由兩部分構(gòu)成:本影區(qū)和半影區(qū)。本影區(qū)是指在面光源的照射下所有光線均不能到達的區(qū)域,在視覺上表現(xiàn)為完全黑暗;半影區(qū)是指部分光線能夠到達的區(qū)域,在視覺上呈現(xiàn)出由暗到明自然過渡的陰影效果。真實地模擬出明暗過渡的半影現(xiàn)象一直以來都是柔和陰影算法研究的重點。目前流行的陰影繪制算法可以分為三類:陰影圖[1],陰影體[2]和全局光照算法[3]。蒙特卡羅可見性采樣通過向面光源產(chǎn)生隨機投射的陰影光線可以繪制出物理正確的柔和陰影效果,該方法可以很容易地加入到基于并行光線跟蹤的全局光照算法[4]中。然而它需要為每個可視場景點均產(chǎn)生大量的光源采樣點,造成了很大的開銷。
圖1 本文算法流程圖
Ramamoorthi等[5]通過對不同的非自適應(yīng)蒙特卡羅采樣方法進行像素-光源空間的2D傅里葉分析,發(fā)現(xiàn)依據(jù)光源類型選擇合適的可見性采樣策略可以減少20-40%的陰影采樣數(shù)量?;隰敯舻恼`差估計,Bauszat等[6]為每個像素自適應(yīng)地選取一個最優(yōu)的重建濾波器,有效地減少了蒙特卡羅繪制中產(chǎn)生的陰影噪聲。Chen等[7]基于光線跟蹤算法計算出3D場景的光源可見性并通過采用盒體濾波器對可見性進行平滑處理的方式生成在點光源照射下的近似柔和陰影。Egan等[8]提出一種基于蒙特卡羅光線跟蹤的4D可見性剪切濾波方法,通過復(fù)用鄰近像素的采樣點以較低的采樣率繪制出面光源照射下高質(zhì)量的柔和陰影。
為了解決蒙特卡羅可見性采樣開銷大的問題,本文提出了一種基于自適應(yīng)迭代面光源采樣的物理正確柔和陰影繪制算法,可顯著減少計算量,并繪制出高效的柔和陰影。
本文算法是在并行光線跟蹤框架中完成的。首先在每個可視場景點產(chǎn)生一個隨機光源采樣點,投射陰影光線后計算3D場景的面光源可見性;然后采用可見性梯度探測算法,獲得半影區(qū)的啟發(fā)式信息;最后對半影區(qū)進行大量采樣,對非半影區(qū)(本影區(qū)和完全可視區(qū)域)進行少量采樣,并采用兩次迭代的方式計算出可視場景區(qū)域的面光源可見性。最終的全局光照值等于該值乘以不考慮遮擋情況下可視場景區(qū)域的直接光照值,加上間接光照值。本文算法的流程如圖1所示。圖2對自適應(yīng)面光源采樣的原理進行了說明。
柔和陰影算法的關(guān)鍵是模擬出半影區(qū)由明到暗自然過渡的陰影效果,為此每個可視場景點均需要進行大量的陰影光線求交計算,會造成巨大的計算開銷。然而,對于位于本影區(qū)或者完全可視區(qū)域的可視場景點而言,由于其可見性是非0(不可見)即1(可見)的,因此若進行均勻采樣會造成計算量上的浪費。
圖2 自適應(yīng)面光源采樣的原理
基于可見性梯度探測算法,在確定需要進行大量采樣的可視場景區(qū)域后,通過為半影區(qū)和非半影區(qū)(本影區(qū)和完全可視區(qū)域)自適應(yīng)地計算出光源采樣點的數(shù)量,可以顯著減少面光源可見性的計算量,提高算法的性能。
下面給出本文算法的詳細步驟:
(1)創(chuàng)建包含兩個元素的一維數(shù)組atten[0]、atten[1],用于存儲可視場景點連續(xù)兩次迭代的面光源可見性。創(chuàng)建兩個屏幕空間大小的2D緩沖區(qū)Vis[M×N]={1}、Grad[M×N]={0},用于存儲3D場景的直接光照可見性和可見性梯度值。變量i用于記錄投射主光線的次數(shù)。
(2)為可視場景點p設(shè)置一個隨機的光源采樣點。
(3)從視點出發(fā)向可視場景點p投射主光線,然后進行遞歸式光線跟蹤。
①記錄可視場景點p的面光源可見性V,存入緩存Vis、atten[i%2]。
②采用可見性梯度探測算法計算出緩存Vis中可視場景點p的可見性梯度值G,存入緩存Grad。
③如果可見性梯度值G大于0,則可視場景點p所在的區(qū)域為半影區(qū),設(shè)置其光源采樣點數(shù)量為k1;否則該可視場景點所在區(qū)域為本影區(qū)或者完全可視區(qū)域,設(shè)置其光源采樣點數(shù)量為k2。(k1應(yīng)大于k2,在本文算法中設(shè)置k1=9,k2=4)。
(4)采用分層隨機抖動采樣方法[9]確定多個光源采樣點的位置分布情況,并重復(fù)(3)。
(5)對(4)迭代n次后計算可視場景點p的面光源可見性(atten[0]+atten[1])/2。(本文算法中迭代次數(shù)n設(shè)置為2)。
本文采用對面光源可見性按列作差值運算的方式,通過判斷可見性梯度值的大小來獲得半影區(qū)的啟發(fā)式信息,從而確定面光源照射下3D場景中半影區(qū)域的范圍。
可見性梯度探測算法的原理如圖3所示。由于每個可視場景點只向3D場景中投射一條陰影光線,因此其面光源可見性是非0(不可見)即1(可見)的。如果在這張二值面光源可見性圖中存在一個連續(xù)區(qū)域,該區(qū)域內(nèi)所有元素對應(yīng)的可視場景點面光源可見全為0則該區(qū)域為本影區(qū),如果全為1則為完全可視區(qū)域。由于半影區(qū)是本影區(qū)到完全可視區(qū)域的一個過渡區(qū)域,因此該區(qū)域中可視場景點的光源可見性可能為0也可能為1,是不連續(xù)的。若為每個可視場景點投射多條陰影光線,則半影區(qū)的光源可見性在[0,1]之間。對面光源可見性按列作差值運算,計算出當(dāng)前可視場景點與相鄰可視場景點的可見性梯度值。如果該值>0.0f,表示兩者之間的可見性是不連續(xù),即當(dāng)前可視場景點處于半影區(qū),需要為其產(chǎn)生更多的光源采樣點;反之,只需要為其產(chǎn)生較少的光源采樣點。圖4(b)為對圖4(a)經(jīng)過可見性梯度檢測得到的半影圖。
圖4 兩次迭代面光源可見性效果對比
僅經(jīng)過一次可見性梯度探測只能粗略地判斷出半影區(qū)的范圍,誤差較大。因此本文采用多次迭代的方式,通過累加前一次迭代的面光源可見性,可以以更小的誤差計算出3D場景的面光源可見性。
兩次迭代的面光源可見性效果對比如圖4所示。圖4(a)為每個可視場景點只進行一次光源可見性計算得到的原始二值面光源可見性圖,對其進行可見性梯度探測后得到圖4(b)所示的半影圖。圖4(b)中白色區(qū)域即為需要進行大量光源采樣的可視場景區(qū)域。圖4(c)為進行第一次自適應(yīng)迭代面光源采樣后得到的面光源可見性圖,對其進行可見性梯度探測后得到圖4(d)所示的半影圖。圖4(e)為兩次迭代后得到的面光源可見性圖,同圖4(a)、4(c)相比可以發(fā)現(xiàn),經(jīng)過多次可見性梯度探測后其半影區(qū)域的過渡更加平滑,并進一步減少了陰影區(qū)域的噪聲。
本文實驗的計算機配備 Intel(R) Xeon(R)E3-1225 v3 3.2GHz CPU,8GB內(nèi)存和NVIDIA Quadro K2200顯示,算法采用NVIDIA OptiX SDK光線跟蹤加速引擎和NVIDIA CUDA并行計算架構(gòu),并使用SBVH加速結(jié)構(gòu)[10]來加速光線跟蹤的求交運算。實驗中的屏幕分辨率為1024×768,4個不同場景復(fù)雜度下本文算法的繪制結(jié)果如圖5所示。表1對圖5中場景的三角面片數(shù)和繪制時間進行了統(tǒng)計。實驗結(jié)果表明,本文算法能高效地繪制出面光源照射下物理正確的柔和陰影。
圖5 本文算法的繪制結(jié)果
表1 圖5所示實驗場景的繪制時間
本文以蒙特卡羅算法生成的圖像作為參照,來驗證采用本文算法生成的物理正確柔和陰影的有效性。如圖6所示,圖6(a)和圖6(b)對這兩種算法的繪制效果進行了比較;通過對圖6(a)和圖6(b)對應(yīng)位置的像素值作相減計算,并放大10倍后,得到了圖6(c)所示的10倍圖像差。觀察該圖像差可以發(fā)現(xiàn),圖中的黑色區(qū)域(存在差異的部分)在放大10倍后才基本可見;對比兩種算法的性能可以發(fā)現(xiàn),本文算法的繪制時間減少了1倍左右。因此可以證明本文算法雖然極大地減少了計算量,但是繪制效果并沒有明顯下降。
圖6 與蒙特卡羅算法性能比較
表2 不同算法的繪制時間比較(ms/幀)
表2對在不同分辨率下,本文算法與蒙特卡羅算法的繪制時間進行了比較??梢园l(fā)現(xiàn),在同等柔和陰影質(zhì)量的情況下,本文算法的性能都明顯優(yōu)于蒙特卡羅算法。
本文提出了一種基于自適應(yīng)迭代面光源采樣的物理正確柔和陰影繪制算法,通過自適應(yīng)地計算每個可視場景點需要產(chǎn)生的光源采樣點數(shù)量,解決了可見性計算開銷大的問題,有效提高了算法的性能。與蒙特卡羅算法進行對比發(fā)現(xiàn),本文算法不僅能夠繪制出高質(zhì)量的柔和陰影,而且在算法性能上擁有很大的優(yōu)勢。
[1]Liktor G,Spassov S,Dachsbacher C.Stochastic soft shadow mapping[J].Computer Graphics Forum,2015,34(4):1-11.
[2]Kolivand H,Sunar M S.Survey of shadow volume algorithms in computer graphics[J].Iete Technical Review,2013,30(1):38-46.
[3]陳純毅,楊華民,李文輝,等.基于環(huán)境遮擋掩碼的物理正確柔和陰影繪制算法[J].吉林大學(xué)學(xué)報:工學(xué)版,2012,42(4):971-978.
[4]張全貴,王普,閆健卓,等.基于光線跟蹤方法的全局光照研究[J].計算機科學(xué),2010,37(4):27-30.
[5]Ramamoorthi R,Anderson J,Meyer M,et al.A theory ofmonte carlo visibility sampling[J].Acm Transactions on Graphics,2012,31(5):1-16.
[6]Bauszat P,Eisemann M,Eisemann E,et al.General and robust error estimation and reconstruction for monte carlo rendering[J].Computer Graphics Forum,2015,34(2):597-608.
[7]Chen C Y,Yang H M,Li H.Interactive rendering of approximate soft shadows using ray tracing with visibility filtering[C].Proceedings of the 2016 International Conference on Computer Science,Technology and Application.Singapore:World Scientific Publishing,2016:68-74.
[8]Egan K,Hecht F,Durand F,et al.Frequency analysis and sheared filtering for shadow light fields of complex occluders[J].Acm Transactions on Graphics,2011,30(2):9.
[9]Mitchell D P.Consequences of stratified sampling in graphics[C].Conferenceon ComputerGraphics and Interactive Techniques.New York:ACM Press,1996:277-280.
[10]Stich M,F(xiàn)riedrich H,and Dietrich A.Spatial splits in bounding volume hierarchies[C].Proceedings of the Conference on High Performance Graphics.New York:ACM Press,2009:7-13.