陳純毅,楊華民,李文輝,蔣振剛
(1.長(zhǎng)春理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,長(zhǎng)春 130022;2.吉林大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,長(zhǎng)春 130012)
全局光照由直接光照和間接光照兩部分組成[1],直接光照可用陰影映射或陰影體算法[2]快速計(jì)算,間接光照的求解則相對(duì)困難。即時(shí)光能輻射度(IR)算法[1]通過創(chuàng)建虛擬點(diǎn)光源來近似計(jì)算間接光照,但它的計(jì)算精度受虛擬點(diǎn)光源采樣分布影響,不恰當(dāng)?shù)牟蓸臃植紩?huì)導(dǎo)致較大的計(jì)算誤差[3]。增量式IR算法[4]沒有考慮可視場(chǎng)景區(qū)域與虛擬點(diǎn)光源的空間關(guān)系,某些在高光照強(qiáng)度區(qū)域上創(chuàng)建的虛擬點(diǎn)光源未必能對(duì)可視場(chǎng)景區(qū)域產(chǎn)生間接光照貢獻(xiàn)。當(dāng)前圖形處理器(GPU)已被廣泛用于加速各種三維圖形計(jì)算[5]。Segovia等[3]提出可視場(chǎng)景區(qū)域敏感的虛擬點(diǎn)光源重要性采樣方法,但其在GPU上實(shí)現(xiàn)起來比較復(fù)雜。動(dòng)態(tài)場(chǎng)景的幾何對(duì)象運(yùn)動(dòng)變化可能導(dǎo)致前一幀中創(chuàng)建的虛擬點(diǎn)光源在后一幀中失效。Laine等[4]的算法需將場(chǎng)景幾何對(duì)象分為動(dòng)態(tài)對(duì)象和靜態(tài)對(duì)象分別進(jìn)行處理,且未考慮動(dòng)態(tài)對(duì)象對(duì)各幀間接光照的影響。Debattista等[6]的間接光照幀間重用方法需使用額外的緩存數(shù)據(jù)結(jié)構(gòu),增加了數(shù)據(jù)管理的復(fù)雜度。本文提出一種通過在幀間重用虛擬點(diǎn)光源來提高動(dòng)態(tài)場(chǎng)景間接光照計(jì)算效率的方法。首先推導(dǎo)出基于虛擬點(diǎn)光源的間接光照求解公式;然后研究可視場(chǎng)景區(qū)域敏感的虛擬點(diǎn)光源重要性采樣策略以及間接光照貢獻(xiàn)聚集方法,并給出它們?cè)贕PU上的實(shí)現(xiàn)途徑;最后提出虛擬點(diǎn)光源的幀間重用與更新方法,以實(shí)現(xiàn)對(duì)動(dòng)態(tài)場(chǎng)景間接光照的高效計(jì)算。
根據(jù)Veach給出的三維場(chǎng)景光照傳播的路徑表述方法[7],像素j接收到的間接光照可寫成如下的積分形式:
式中:間接光照傳播路徑空間Ωind=∪k≥3Ωk,Ωk為包含k個(gè)光照直線傳播線段的路徑組成的空間=x0x1…xk為Ωk中的一條光照傳播路徑,其中x0為相機(jī)所在位置,x1為像素j對(duì)應(yīng)的可視場(chǎng)景點(diǎn),xk為初始光源位置,x2…xk-1為三維場(chǎng)景中的k-2個(gè)光照反射點(diǎn);μ(·)表示Ωind上的一個(gè)測(cè)度;路徑x-對(duì)像素j的間接光照貢獻(xiàn)為
式中:fr(·)為幾何表面的雙向反射分布函數(shù);Le(xk→xk-1)為從初始光源入射到點(diǎn)xk-1上的光照值;G(·)為光照在兩個(gè)場(chǎng)景點(diǎn)之間傳播的幾何因子,可寫為
式中:θ為向量xi→xi+1與點(diǎn)xi處的法向量之間的夾角;θ′ 為向量xi+1→xi與點(diǎn)xi+1處的法向量之間的夾角。
Ωind中的任意一條間接光照傳播路徑可分為兩部分,即=x0x1和=x2…xk。不難發(fā)現(xiàn),對(duì)于給定的像素j,其對(duì)應(yīng)的間接光照傳播子路徑是固定的,不同的間接光照傳播路徑僅表現(xiàn)為的不同。IR算法首先在場(chǎng)景中創(chuàng)建一系列子路徑,并在其端點(diǎn)x2處創(chuàng)建虛擬點(diǎn)光源,將這些虛擬點(diǎn)光源對(duì)可視場(chǎng)景點(diǎn)的光照貢獻(xiàn)作為間接光照近似值。使用蒙特卡洛積分方法求解式(1),在Ωind中隨機(jī)生成 N 條子路徑,并在所有子路徑的端點(diǎn)x2處創(chuàng)建虛擬點(diǎn)光源,考慮到虛擬點(diǎn)光源與可視場(chǎng)景點(diǎn)之間的可見性,像素j收到的間接光照可寫為
式中:x2,i為第i個(gè)虛擬點(diǎn)光源所在位置(即第i個(gè)虛擬點(diǎn)光源對(duì)應(yīng)的間接光照傳播子路徑的端點(diǎn));x1,j為像 素j 對(duì)應(yīng)的可視場(chǎng) 景點(diǎn);Lv(x2,i→x1,j)為第i個(gè)虛擬點(diǎn)光源在x2,i→x1,j方向上的發(fā)射光照強(qiáng)度;V(x2,i,x1,j)為點(diǎn)x2,i與點(diǎn)x1,j之間的可見性函數(shù);p(x2,i)為第i個(gè)虛擬點(diǎn)光源的采樣概率密度。
利用式(4)計(jì)算三維場(chǎng)景的間接光照,首先必須根據(jù)某概率分布基于重要性采樣技術(shù)創(chuàng)建虛擬點(diǎn)光源。Tabellion等[8]指出,僅考慮單次反射造成的間接光照對(duì)大多數(shù)高質(zhì)量三維場(chǎng)景繪制就已經(jīng)足夠了。因此,為了簡(jiǎn)化虛擬點(diǎn)光源的創(chuàng)建過程,在此限定間接光照傳播路徑的線段數(shù)k=3。
借鑒Segovia等[3]的雙向重要性采樣方法,本文以對(duì)可視場(chǎng)景區(qū)域的實(shí)際間接光照貢獻(xiàn)大小為準(zhǔn)則來設(shè)計(jì)虛擬點(diǎn)光源的重要性采樣策略。首先,以初始光源位置為視點(diǎn),利用GPU的光柵化操作繪制三維場(chǎng)景,生成反射陰影圖[9],然后根據(jù)重要性采樣策略從反射陰影圖中選擇一部分像素來創(chuàng)建虛擬點(diǎn)光源。為了敘述方便,在此將反射陰影圖中的每個(gè)像素稱作候選虛擬點(diǎn)光源。
從候選虛擬點(diǎn)光源中選擇實(shí)際繪制使用的虛擬點(diǎn)光源的具體策略直接影響三維場(chǎng)景間接光照的計(jì)算精度和效率。在創(chuàng)建反射陰影圖時(shí),需要將陰影圖像素對(duì)應(yīng)場(chǎng)景點(diǎn)的反射光亮度記錄在緩沖區(qū)中。從直覺上說,反射光亮度值越大的虛擬點(diǎn)光源對(duì)三維場(chǎng)景的間接光照貢獻(xiàn)也越大,可以據(jù)此選擇實(shí)際繪制使用的虛擬點(diǎn)光源。然而在實(shí)際三維場(chǎng)景繪制過程中使用這一準(zhǔn)則未必能選擇出最優(yōu)的虛擬點(diǎn)光源。如圖1所示,實(shí)心圓圈表示反射陰影圖中的像素對(duì)應(yīng)的場(chǎng)景點(diǎn)(每個(gè)實(shí)心圓圈都是一個(gè)候選虛擬點(diǎn)光源),空心圓圈表示通過光柵化操作計(jì)算出的可視場(chǎng)景點(diǎn)。可以發(fā)現(xiàn),并非每個(gè)候選虛擬點(diǎn)光源對(duì)可視場(chǎng)景點(diǎn)都有間接光照貢獻(xiàn),例如圖1中最右邊的實(shí)心圓圈表示的候選虛擬點(diǎn)光源對(duì)所有可視場(chǎng)景點(diǎn)都沒有間接光照貢獻(xiàn)。因此,從候選虛擬點(diǎn)光源集合中挑選實(shí)際繪制使用的虛擬點(diǎn)光源時(shí),還需要考慮候選虛擬點(diǎn)光源和可視場(chǎng)景區(qū)域的空間關(guān)系,只有那些對(duì)整個(gè)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)最大的候選虛擬點(diǎn)光源才是最優(yōu)的虛擬點(diǎn)光源。
圖1 候選虛擬點(diǎn)光源與可視場(chǎng)景點(diǎn)的空間關(guān)系Fig.1 Spatial relationships between potential virtual point lights and scene points seen by camera
為了估計(jì)一個(gè)候選虛擬點(diǎn)光源對(duì)整個(gè)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)大小,最直接的方法是計(jì)算出候選虛擬點(diǎn)光源對(duì)所有可視場(chǎng)景點(diǎn)產(chǎn)生的間接光照值,不過這種方式的計(jì)算開銷太大,在實(shí)際中難以使用。為了減小計(jì)算開銷,只能從所有可視場(chǎng)景點(diǎn)集合中選擇一個(gè)子集,再計(jì)算候選虛擬點(diǎn)光源對(duì)該子集產(chǎn)生的間接光照值,以此來近似虛擬點(diǎn)光源對(duì)整個(gè)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)??梢晥?chǎng)景點(diǎn)和三維場(chǎng)景畫面的像素是一一對(duì)應(yīng)的,而且在空間上相鄰的兩個(gè)可視場(chǎng)景點(diǎn)對(duì)應(yīng)的像素在幀緩存中也必然相鄰。借鑒Dachsbacher等[9]的反射陰影圖像素光源選擇方法,本文根據(jù)候選虛擬點(diǎn)光源對(duì)屏幕空間中與其相鄰的若干個(gè)像素產(chǎn)生的間接光照值,來估計(jì)它對(duì)整個(gè)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)大小。在屏幕空間中,如果某像素到候選虛擬點(diǎn)光源的距離d滿足:1/d2>T,其中T為一個(gè)由用戶指定的閾值,則計(jì)算此候選虛擬點(diǎn)光源對(duì)該像素產(chǎn)生的間接光照貢獻(xiàn)值。通過T可以控制評(píng)估候選虛擬點(diǎn)光源的光照貢獻(xiàn)時(shí)所考慮的像素個(gè)數(shù)。在估計(jì)候選虛擬點(diǎn)光源對(duì)可視場(chǎng)景區(qū)域的光照貢獻(xiàn)時(shí),不考慮候選虛擬點(diǎn)光源的可見性問題,以便提高計(jì)算效率。
虛擬點(diǎn)光源的創(chuàng)建本質(zhì)上是一個(gè)采樣問題,即從候選虛擬點(diǎn)光源集合中選取一個(gè)能使計(jì)算結(jié)果方差最小的子集。估計(jì)出所有候選虛擬點(diǎn)光源對(duì)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)大小后,據(jù)此可進(jìn)一步計(jì)算候選虛擬點(diǎn)光源集合的光照貢獻(xiàn)累積密度函數(shù)。根據(jù)該累積密度函數(shù),使用重要性采樣方法,可從候選虛擬點(diǎn)光源集合中無偏地選取實(shí)際繪制使用的虛擬點(diǎn)光源子集。本文創(chuàng)建虛擬點(diǎn)光源的具體過程如算法1所示。
算法1 虛擬點(diǎn)光源的創(chuàng)建過程
①以光源位置為視點(diǎn),在GPU上利用光柵化操作繪制場(chǎng)景,生成反射陰影圖,獲得候選虛擬點(diǎn)光源集合。
②以相機(jī)位置為視點(diǎn),在GPU上利用光柵化操作繪制場(chǎng)景,將所有可視場(chǎng)景點(diǎn)的空間位置、法向量和顏色保存到一個(gè)離屏緩沖區(qū)(G-buffer)中。
③利用GPU片段程序?qū)⒑蜻x虛擬點(diǎn)光源變換到屏幕空間,根據(jù)指定的閾值T從G-buffer中選擇屏幕像素,并計(jì)算候選虛擬點(diǎn)光源對(duì)選定屏幕像素對(duì)應(yīng)的可視場(chǎng)景點(diǎn)產(chǎn)生的光照值,以此來近似候選虛擬點(diǎn)光源對(duì)整個(gè)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)。
④根據(jù)候選虛擬點(diǎn)光源集合的光照貢獻(xiàn)估計(jì)結(jié)果,在GPU上利用并行求和面積表方法[10]計(jì)算候選虛擬點(diǎn)光源集合的光照貢獻(xiàn)累積密度函數(shù)。
⑤根據(jù)累積密度函數(shù),在GPU上利用重要性采樣方法從候選虛擬點(diǎn)光源集合中選擇指定數(shù)目的虛擬點(diǎn)光源。
算法1根據(jù)候選虛擬點(diǎn)光源對(duì)可視場(chǎng)景區(qū)域的光照貢獻(xiàn)大小來計(jì)算候選虛擬點(diǎn)光源集合的光照貢獻(xiàn)累積密度函數(shù),因此能實(shí)現(xiàn)可視場(chǎng)景區(qū)域敏感的虛擬點(diǎn)光源重要性采樣。
雖然前文在評(píng)估候選虛擬點(diǎn)光源對(duì)可視場(chǎng)景區(qū)域的間接光照貢獻(xiàn)大小時(shí)沒有考慮虛擬點(diǎn)光源的可見性問題,但是在計(jì)算實(shí)際間接光照時(shí)必須考慮此問題,否則將得到不正確的間接光照結(jié)果。為了使本文算法能夠很好地適應(yīng)GPU硬件架構(gòu),在此使用陰影映射方法實(shí)現(xiàn)虛擬點(diǎn)光源的可見性判斷。傳統(tǒng)陰影映射方法在創(chuàng)建陰影圖時(shí)以光源位置為視點(diǎn),利用光柵化操作繪制三維場(chǎng)景。如果光源是一個(gè)聚光燈類型的光源,且聚光燈的光照發(fā)射角不是非常大,則通過一遍光柵化操作就可以創(chuàng)建出能實(shí)現(xiàn)可見性計(jì)算的陰影圖。然而,從理論上說虛擬點(diǎn)光源可向以其所在表面的法向量為正方向的半球空間中的任意方向發(fā)射光照(即虛擬點(diǎn)光源的光照發(fā)射角可為180°),只是不同方向的光照發(fā)射強(qiáng)度由虛擬點(diǎn)光源的入射光照方向以及所在表面的法向量和雙向反射分布函數(shù)共同決定。
對(duì)于具有180°光照發(fā)射角的虛擬點(diǎn)光源來說,如果用傳統(tǒng)的陰影圖創(chuàng)建方法,必須將光源的發(fā)射空間角分成若干個(gè)子區(qū)域,再分別針對(duì)每個(gè)子區(qū)域創(chuàng)建陰影圖。這會(huì)明顯增加陰影圖的創(chuàng)建時(shí)間。本文使用Brabec等[11]提出的拋物面映射方法為每個(gè)虛擬點(diǎn)光源創(chuàng)建拋物面陰影圖,以此實(shí)現(xiàn)虛擬點(diǎn)光源的可見性計(jì)算。
根據(jù)虛擬點(diǎn)光源集合,計(jì)算可視場(chǎng)景點(diǎn)收到的總間接光照稱為間接光照貢獻(xiàn)聚集。相對(duì)于直接光照,三維場(chǎng)景的間接光照變化通常比較平滑。根據(jù)這一特點(diǎn),Wald等[12]在計(jì)算機(jī)集群上使用間隔采樣技術(shù)減小基于虛擬點(diǎn)光源的間接光照計(jì)算開銷,同時(shí)使用光線跟蹤[13]來計(jì)算虛擬點(diǎn)光源的可見性,但這在GPU上實(shí)現(xiàn)起來比較復(fù)雜。
本文在GPU上結(jié)合Deferred shading技術(shù)[9]實(shí)現(xiàn)間隔采樣,以減少可視場(chǎng)景點(diǎn)間接光照貢獻(xiàn)聚集計(jì)算的時(shí)間開銷。首先對(duì)算法1中生成的G-buffer進(jìn)行間隔采樣,將其劃分為n×m個(gè)塊,每個(gè)塊代表了一個(gè)間隔采樣結(jié)果。接著,將前面創(chuàng)建的每個(gè)虛擬點(diǎn)光源唯一地分配給一個(gè)間隔采樣塊,并且保證各間隔采樣塊分得的虛擬點(diǎn)光源的個(gè)數(shù)大致相等。對(duì)于每個(gè)間隔采樣塊,使用片段程序取出其中各個(gè)像素的空間位置和法向量,并根據(jù)為其分配的各虛擬點(diǎn)光源的拋物面陰影圖計(jì)算可見性,如果虛擬點(diǎn)光源可見,則進(jìn)一步計(jì)算其產(chǎn)生的間接光照值。在此通過對(duì)單個(gè)虛擬點(diǎn)光源產(chǎn)生的間接光照值進(jìn)行限幅處理來避免IR算法特有的亮斑失真。在計(jì)算出各間隔采樣塊中的所有像素的間接光照值后,利用與間隔采樣相反的過程,實(shí)現(xiàn)對(duì)間接光照緩沖區(qū)的聚集計(jì)算。通過上述過程計(jì)算出的三維場(chǎng)景間接光照結(jié)果會(huì)存在明顯的斑紋噪聲。為了去掉斑紋噪聲,本文使用方盒濾波器[4]對(duì)間接光照緩沖區(qū)進(jìn)行濾波處理。
對(duì)于動(dòng)態(tài)場(chǎng)景來說,幾何對(duì)象在各幀間的運(yùn)動(dòng)變化會(huì)造成某些虛擬點(diǎn)光源失效。如果簡(jiǎn)單地每幀重建所有虛擬點(diǎn)光源及其拋物面陰影圖,則不但會(huì)產(chǎn)生大量的計(jì)算開銷,而且會(huì)導(dǎo)致相鄰幀的畫面出現(xiàn)時(shí)間閃爍噪聲,這將嚴(yán)重地降低動(dòng)態(tài)畫面的視覺真實(shí)感。對(duì)于緩慢變化的動(dòng)態(tài)場(chǎng)景,相鄰兩幀的間接光照變化非常小,即相鄰幀之間存在很強(qiáng)的時(shí)間相關(guān)性,幾何對(duì)象的運(yùn)動(dòng)變化只造成少量虛擬點(diǎn)光源失效,大多數(shù)虛擬點(diǎn)光源基本不受影響。因此在繪制動(dòng)態(tài)場(chǎng)景時(shí),可以重用前一幀未失效的虛擬點(diǎn)光源以減小計(jì)算開銷。同時(shí),通過重用前一幀的虛擬點(diǎn)光源,也可提高相鄰幀間接光照的時(shí)間相關(guān)性,因此也能大大減小相鄰幀畫面的時(shí)間閃爍噪聲。
在繪制動(dòng)態(tài)場(chǎng)景時(shí),只能重用那些基本不受動(dòng)態(tài)變化影響的虛擬點(diǎn)光源。如果三維場(chǎng)景的變化導(dǎo)致某個(gè)虛擬點(diǎn)光源與初始光源之間不再直接可見,則該虛擬點(diǎn)光源應(yīng)該被丟棄,并重新創(chuàng)建一個(gè)新的虛擬點(diǎn)光源。利用基于陰影映射的可見性判斷方法,可以很容易地測(cè)試出某個(gè)虛擬點(diǎn)光源和初始光源之間是否直接可見。由于認(rèn)為動(dòng)態(tài)場(chǎng)景是緩慢變化的,因此被重用的虛擬點(diǎn)光源的拋物面陰影圖在連續(xù)的幾幀之內(nèi)可不用重建,即忽略細(xì)微的場(chǎng)景變化對(duì)虛擬點(diǎn)光源可見性的影響。當(dāng)然,為了保證虛擬點(diǎn)光源可見性計(jì)算的正確性,如果某虛擬點(diǎn)光源在連續(xù)的許多幀中一直有效,也需要在適當(dāng)時(shí)機(jī)重新計(jì)算其拋物面陰影圖。
算法2 虛擬點(diǎn)光源的幀間重用與更新算法
①以初始光源位置為視點(diǎn)繪制當(dāng)前幀對(duì)應(yīng)的三維場(chǎng)景,將可視場(chǎng)景點(diǎn)的空間位置、法向量和顏色值保存在G-buffer中,對(duì)比當(dāng)前幀和前一幀G-buffer中的每個(gè)像素的空間位置和法向量,如果相等,則將該像素標(biāo)記為“未變化”,否則標(biāo)記為“已變化”。
②根據(jù)當(dāng)前幀的G-buffer,按照第2節(jié)的方法,估計(jì)候選虛擬點(diǎn)光源集合的光照貢獻(xiàn)及其累積密度函數(shù)。
③找出前一幀的每個(gè)虛擬點(diǎn)光源在當(dāng)前幀的G-buffer中對(duì)應(yīng)的像素,如果像素“已變化”,則刪除該虛擬點(diǎn)光源及其拋物面陰影圖,在此過程中記錄刪除的虛擬點(diǎn)光源個(gè)數(shù)Nd。
④如果刪除的虛擬點(diǎn)光源個(gè)數(shù)Nd少于給定閾值NT,則再刪除NT-Nd個(gè)光照貢獻(xiàn)最小的虛擬點(diǎn)光源。
⑤將所有剩下的虛擬點(diǎn)光源的時(shí)間標(biāo)識(shí)加1。
⑥根據(jù)第②步計(jì)算出的累積密度函數(shù),按照第2節(jié)的方法再創(chuàng)建若干個(gè)虛擬點(diǎn)光源,使虛擬點(diǎn)光源的總數(shù)與前一幀的虛擬點(diǎn)光源的總數(shù)相等。
⑦為新創(chuàng)建的每個(gè)虛擬點(diǎn)光源生成拋物面陰影圖,將這些虛擬點(diǎn)光源的時(shí)間標(biāo)識(shí)設(shè)置為1。
⑧為時(shí)間標(biāo)識(shí)值排在前Nt位的虛擬點(diǎn)光源更新其拋物面陰影圖。
在算法2的第①步中,由于數(shù)值精度受限,不能用絕對(duì)相等來進(jìn)行條件測(cè)試。對(duì)于空間位置的比較,本文計(jì)算當(dāng)前幀和前一幀像素空間位置的距離,并判斷該距離是否超過指定范圍,如果超過則將該像素標(biāo)記為“已變化”;對(duì)于法向量的比較,本文對(duì)法向量的三個(gè)坐標(biāo)分量進(jìn)行分別比較,只要在某個(gè)分量上相差超過指定閾值,就將該像素標(biāo)記為“已變化”。
在算法2的第③步中,刪除了所有失效的虛擬點(diǎn)光源,而在第④步中,則進(jìn)一步刪除若干個(gè)未失效的虛擬點(diǎn)光源,根據(jù)第②步得到的虛擬點(diǎn)光源集合的光照貢獻(xiàn)估計(jì)結(jié)果,刪除那些光照貢獻(xiàn)最小的虛擬點(diǎn)光源。
動(dòng)態(tài)場(chǎng)景幾何對(duì)象的運(yùn)動(dòng)變化也可能導(dǎo)致某些有效的虛擬點(diǎn)光源的拋物面陰影圖失效。本文為每個(gè)虛擬點(diǎn)光源設(shè)置一個(gè)時(shí)間標(biāo)識(shí),用于記錄該虛擬點(diǎn)光源經(jīng)歷了多少幀。為了保證算法的計(jì)算效率,在算法2的第⑧步中只更新部分虛擬點(diǎn)光源的拋物面陰影圖。由于每次都是更新時(shí)間最久的虛擬點(diǎn)光源的拋物面陰影圖,因此如果三維場(chǎng)景靜止下來,經(jīng)過若干幀后,所有虛擬點(diǎn)光源的拋物面陰影圖都將得到正確的更新。
實(shí)驗(yàn)所使用的計(jì)算機(jī)配有XeonTM3.2GHz處理器、2GB內(nèi)存以及Nvidia Quadro FX 570 GPU。實(shí)驗(yàn)中的初始光源為一個(gè)半球點(diǎn)光源,其向以點(diǎn)光源位置為球心的半球空間發(fā)射光照,不同方向上的光照強(qiáng)度按該方向與主光照方向形成的空間夾角θ的余弦衰減,如圖2所示。實(shí)驗(yàn)中創(chuàng)建的虛擬點(diǎn)光源數(shù)目設(shè)置為256,虛擬點(diǎn)光源的拋物面陰影圖分辨率為256×256,使用16位深度值,對(duì)應(yīng)的存儲(chǔ)空間為32MB。在間隔采樣過程中,將G-buffer劃分成4×4的子塊。實(shí)驗(yàn)中的相機(jī)分辨率為800×600像素,算法1的參數(shù)T=0.025,算法2的參數(shù)NT=15、Nt=4。為了清楚地顯示半球點(diǎn)光源所在位置,在該點(diǎn)光源位置處放置一個(gè)手電筒幾何模型,手電筒的出射方向即為半球點(diǎn)光源的主光照方向。
圖2 半球點(diǎn)光源的光照方向示意圖Fig.2 Schematic of illuminating directions of a hemispherical point light
圖3所示為本文使用的兩個(gè)測(cè)試場(chǎng)景,其中所有場(chǎng)景表面皆為漫反射面。為了便于對(duì)比分析,在此使用陰影映射方法計(jì)算了兩個(gè)場(chǎng)景的直接光照結(jié)果。圖3(a)和(b)分別為第一個(gè)場(chǎng)景的直接光照和間接光照計(jì)算結(jié)果,圖3(e)和(f)分別為第二個(gè)場(chǎng)景的直接光照和間接光照計(jì)算結(jié)果。兩個(gè)場(chǎng)景包含的幾何對(duì)象及其面片數(shù)目如表1所示。第一個(gè)場(chǎng)景由Conrnell box(康奈爾盒子)、Lamppu(蘭普手電筒)和Cow(牛)3個(gè)模型組成,其中Cow模型對(duì)象隨時(shí)間上下來回運(yùn)動(dòng),是場(chǎng)景中唯一的動(dòng)態(tài)幾何對(duì)象。第二個(gè)場(chǎng)景由Sibenik(希貝尼克大教堂)、Lamppu和Cow三個(gè)模型組成,其中Cow模型是場(chǎng)景中唯一的動(dòng)態(tài)幾何對(duì)象,隨時(shí)間上下來回運(yùn)動(dòng)。
由于初始半球點(diǎn)光源豎直向下照射場(chǎng)景,因此圖3(a)和(e)中位于點(diǎn)光源之上的場(chǎng)景表面接收不到直接光照,呈現(xiàn)出漆黑一片(Lamppu幾何對(duì)象也看不見);從圖3(a)和(e)還可發(fā)現(xiàn),不同區(qū)域的直接光照變化非常明顯。然而,圖3(b)和(f)中場(chǎng)景表面對(duì)直接光照反射產(chǎn)生的間接光照使得位于點(diǎn)光源之上的場(chǎng)景表面變得清晰可見;與直接光照不同,可以發(fā)現(xiàn)整個(gè)場(chǎng)景的間接光照變化很平滑,這與現(xiàn)實(shí)生活體驗(yàn)是一致的,例如房間中不能被電燈直接照射到的區(qū)域的實(shí)際光照也是平滑變化的。圖3(c)(d)(g)(h)給出了本文算法與增量式IR算法以及每幀全部重建虛擬點(diǎn)光源算法的繪制圖像之差(為了便于觀察,圖3中的顯示結(jié)果是實(shí)際圖像差的6倍)。從結(jié)果上看,本文算法與增量式IR算法的繪制圖像之差比與每幀全部重建虛擬點(diǎn)光源算法的繪制圖像之差稍小。由圖3可以發(fā)現(xiàn),相對(duì)于增量式IR算法以及每幀全部重建虛擬點(diǎn)光源算法,本文算法的繪制圖像與這兩種算法的繪制圖像在視覺上的差異可以忽略。
圖3 兩個(gè)測(cè)試場(chǎng)景的繪制結(jié)果比較Fig.3 Comparisons of rendering results of two test scenes
文獻(xiàn)[4]對(duì)比了增量式IR算法與每幀全部重建虛擬點(diǎn)光源算法的繪制幀速率。表1給出了本文算法、增量式IR算法與每幀全部重建虛擬點(diǎn)光源算法的間接光照計(jì)算時(shí)間,其中平均計(jì)算時(shí)間對(duì)應(yīng)了80幀動(dòng)態(tài)畫面的平均計(jì)算時(shí)間。由表1可知,本文算法的間接光照平均計(jì)算時(shí)間比增量式IR算法短,對(duì)于第一個(gè)測(cè)試場(chǎng)景,增量式IR算法的間接光照平均計(jì)算時(shí)間是本文算法的1.63倍,對(duì)于第二個(gè)測(cè)試場(chǎng)景,增量式IR算法的間接光照平均計(jì)算時(shí)間是本文算法的1.38倍。這主要是因?yàn)樵隽渴絀R算法使用CPU光線跟蹤方法來測(cè)試虛擬點(diǎn)光源在幀間是否失效,而本文算法直接在GPU上實(shí)現(xiàn)了虛擬點(diǎn)光源的幀間失效測(cè)試,因而獲得了一定的計(jì)算加速。另外,與增量式IR算法相比,本文算法不需要將場(chǎng)景幾何對(duì)象分為動(dòng)態(tài)對(duì)象和靜態(tài)對(duì)象分別處理,因此不需要對(duì)場(chǎng)景變化對(duì)象作限制,提高了算法的靈活性。相對(duì)于每幀全部重建虛擬點(diǎn)光源算法,本文重用虛擬點(diǎn)光源后,間接光照的平均計(jì)算時(shí)間大大降低。由表1可知,對(duì)于第一個(gè)場(chǎng)景,每幀全部重建虛擬點(diǎn)光源算法的間接光照平均計(jì)算時(shí)間是本文算法的2.75倍;對(duì)于第二個(gè)場(chǎng)景,每幀全部重建虛擬點(diǎn)光源算法的間接光照平均計(jì)算時(shí)間是本文算法的2.83倍。因此本文算法大大提高了動(dòng)態(tài)場(chǎng)景的間接光照計(jì)算效率。
表1 不同算法的間接光照計(jì)算時(shí)間(ms)對(duì)比Table 1 Comparisons of computation timings of indirect illumination between various algorithms
利用虛擬點(diǎn)光源近似計(jì)算三維場(chǎng)景間接光照的思路,提出一種動(dòng)態(tài)場(chǎng)景的間接光照求解算法,設(shè)計(jì)出可視場(chǎng)景區(qū)域敏感的虛擬點(diǎn)光源重要性采樣、基于間隔采樣的間接光照貢獻(xiàn)聚集以及虛擬點(diǎn)光源在幀間的重用與更新方法。根據(jù)測(cè)試場(chǎng)景的間接光照計(jì)算結(jié)果,分析了本文算法的性能。相對(duì)于增量式IR算法,針對(duì)兩個(gè)測(cè)試場(chǎng)景,本文算法分別獲得了1.63倍和1.38倍的加速效果;相對(duì)于每幀全部重建虛擬點(diǎn)光源算法,針對(duì)兩個(gè)測(cè)試場(chǎng)景,本文算法分別獲得了2.75倍和2.83倍的加速效果。本文算法無需對(duì)動(dòng)態(tài)場(chǎng)景的變化對(duì)象作限制,并能顯著提高動(dòng)態(tài)場(chǎng)景的間接光照計(jì)算效率。
[1]Ritschel T,Dachsbacher C,Grosch T,et al.The state of the art in interactive global illumination[J].Computer Graphics forum,2012,31(1):160-188.
[2]陳純毅,楊華民,李文輝,等.基于環(huán)境遮擋掩碼的物理正確柔和陰影繪制算法[J].吉林大學(xué)學(xué)報(bào):工學(xué)版,2012,42(4):971-978.Chen Chun-yi,Yang Hua-min,Li Wen-h(huán)ui,et al.Algorithm for rendering physically correct soft shadows based on ambient occlusion masks[J].Journal of Jilin University:Engineering and Technology E-dition,2012,42(4):971-978.
[3]Segovia B,Iehl J C,Mitanchey R,et al.Bidirectional instant radiosity[C]∥Proceedings of the 17th Eurographics Symposium on Rendering,Nicosia,Cyprus,2006.
[4]Laine S,Saransaari H,Kontkanen J,et al.Incremental instant radiosity for real-time indirect illumination[C]∥Proceedings of the 18th Eurographics Symposium on Rendering,Grenoble,F(xiàn)rance,2007.
[5]陳純毅,楊華民,李文輝,等.線索化包圍盒層次結(jié)構(gòu)的并行創(chuàng)建算法[J].吉林大學(xué)學(xué)報(bào):工學(xué)版,2011,41(5):1388-1393.Chen Chun-yi,Yang Hua-min,Li Wen-h(huán)ui,et al.Parallel construction algorithm for threaded-BVH[J].Journal of Jilin University(Engineering and Technology Edition),2011,41(5):1388-1393.
[6]Debattista K,Dubla P,Banterle F,et al.Instant caching for interactive global illumination[J].Computer Graphics Forum,2009,28(8):2216-2228.
[7]Veach E.Robust Monte Carlo methods for light transport simulation[D].USA:Department of Computer Science,Stanford University,1997.
[8]Tabellion E,Lamorlette A.An approximate global illumination system for computer generated films[J].ACM Transactions on Graphics,2004,23(3):469-476.
[9]Dachsbacher C,Stamminger M.Reflective shadow maps[C]∥Proceedings of the 2005Symposium on Interactive 3DGraphics and Games,Washington,DC,USA,2005.
[10]Hensley J,Scheuermann T,Coombe G,et al.Fast summed-area table generation and its applications[J].Computer Graphics Forum,2005,24(3):547-555.
[11]Brabec S,Annen T,Seidel H P.Shadow mapping for hemispherical and omnidirectional light sources[C]∥Proceedings of Computer Graphics International,Bradford,UK,2002.
[12]Wald I,Kollig T,Benthin C,et al.Interactive global illumination using fast ray tracing[C]∥Proceedings of the 13th Eurographics Workshop on Rendering,Pisa,Italy,2002.
[13]權(quán)勇,李文輝,龐云階.利用表面元素繪制圖形的方法[J].吉林大學(xué)學(xué)報(bào):理學(xué)版,2004,42(4):554-558.Quan Yong,Li Wen-h(huán)ui,Pang Yun-jie.Rendering method based on surface elements[J].Journal of Jilin University(Science Edition),2004,42(4):554-558.