任中慧 王波
(長春理工大學 計算機科學技術學院,吉林長春 130022)
在計算機渲染領域,主流的全局光照算法都會考慮間接光照效果[1]的繪制,但大多數(shù)的算法在繪制間接光照效果時都需要較大的開銷,因而無法應用于實時交互的場景。光線跟蹤算法實現(xiàn)非常簡單繪制的效率非常高,卻因為陰影測試機制而無法直接繪制間接光照。因此,本文提出了一種利用光線跟蹤算法[2]獲得二次點光源,并利用邊界檢測機制將間接光照的計算分為邊界區(qū)域的間接光照計算,與非邊界區(qū)域的間接光照計算兩部分的算法,從而大大加快了算法的繪制速度。
將相機置于光源位置,并向場景投射光線。如圖1所示,檢測并記錄光線與場景的第一個交點,并將獲取到的交點的深度值、法向量、光通量,世界坐標值信息[3]存儲到指定緩沖區(qū)。這里獲取到的交點就是計算間接光照所需要的虛擬點光源(VPLs)[4],亦即實驗中所需的二次點光源。接著對獲取到的虛擬點光源進行均勻采樣,最終獲得了256個二次點光源。
物體的邊界輪廓具有法向量值突變和深度值突變的特性,其中法向量的值決定了這一點是否可見,深度的值決定了這一點的亮度值。算法以相機位置為視點,向場景投射光線,將相機與場景中的物體的第一個碰撞點的深度值、法向量值存儲到兩個緩沖區(qū)中,以備物體的邊界檢測之用。
對于深度緩沖區(qū)的每一個像素,計算以此為中心的3*3的網(wǎng)格內(nèi)的最大和最小值,當其差值大于設定的閾值時即為邊界區(qū)域。對法向量緩沖中的像素,需要獲取以此為中心的3*3的網(wǎng)格內(nèi)的所有法向量值,然后為每一個像素計算等式si=sin(0.5×arccos(n·ni))(其中i=1,2,…9,n為網(wǎng)格中心像素的法向量,ni為其余像素的法向量),這樣會得到所有si,并將si最大值和最小值的差值(范圍[0,1])進行存儲,這里的閾值設定為0.2。對于差值超出閾值的像素點,將其標記為邊界像素。
對于邊界區(qū)域像素點,利用公式計算間接光照貢獻值:以邊界區(qū)域像素為中心,在rmax半徑區(qū)域內(nèi)的二次點光源按照公式(2.1)和(2.2)對此像素計算間接光照貢獻值。
圖1 獲取二次點光源
其中p表示二次點光源p的光通量,np表示二次點光源p的表面法向量,xp表示二次點光源p的世界坐標,〈np|x-xp〉表示兩者的點乘值,||x-xp||表示兩者的距離。
由于間接光照是計算所有的二次點光源對可視場景點的影響,上面公式只計算了一個二次光源對x點的影響,所有的二次光源對x的影響可以用累加的方式來計算,如下公式(4.2)所示:
圖2 實驗結果
對于非邊界區(qū)域則通過插值的方式計算間接光照,并最終將邊界與非邊界區(qū)域的間接光照以及直接光照效果相疊加。
實驗結果如圖2所示。通過觀察可以看到,在場景的復雜度較低時,本文提出的方法在繪制速度上具有明顯的優(yōu)勢。但是當場景中包含交復雜的三維對象時,本文方法的執(zhí)行效率會有一定的下降,主要原因在于復雜場景下,通過插值計算間接光照的像素比例會降低,造成算法開銷增大。
[1]Dachsbacher C, Stamminger M. Splatting Indirect Illumination
[J]. Proceedings of the 2006 Symposium on Interactive 3D Graphics and Games. New York: ACM Press, 2006: 93-100.Whitted T. An improved illumination model for shaded display[J]. Communications of the ACM,1980, 23(6):343-349.
[2]Williams L. Casting curved shadows on curved surfaces[J].Siggraph Computer Graph,1978, 12(3):270-274.
[3]Dachsbacher C, Stamminger M. Reflective shadow maps[J].Proceedings of the 2005 symposium on Interactive 3D graphics and games.New York:ACM Press,2005:203-231.
[4]陳純毅,楊華民等.基于幀間虛擬點光源重用的動態(tài)場景間接光照近似求解算法[J].吉林大學學報(工學版),2013,43(5):1352-1358.