李華,楊華民,趙建平,陳純毅,馬愛斌
(長春理工大學 計算機科學技術學院,長春 130022)
交互式全局光照計算是目前計算機圖形學真實感繪制領域的主要研究內容之一,全局光照效果繪制的瓶頸來自于準確的間接光照計算。目前,全局光照算法有兩個主要類別—光線跟蹤和輻照度,這兩類方法都需要幾分鐘或幾小時來生成一個具有全面全局光照效果的單一圖像。全面的全局光照與交互式應用通常是不相容的。已有的能達到交互式應用級別的算法也都是依賴消耗大的預先計算實現的,不適用于動態場景[1,2]。交互式光線追蹤能以交互式幀頻生成全局光照效果,但需要多臺PC集群才能實現在高分辨率情況下的互動。實踐證明,全局光照的解決方案,尤其是間接光照計算并不要求精確,在許多情況下,考慮只反彈一次的間接光照即可[3]。而且,多數情況下,間接光照的遮擋關系也可以忽略。因此,很多近似的全局光照模擬方法被提出。在反射陰影圖中,描述了一種基于陰影圖原理的粗略近似地計算場景中一次反彈的間接光照計算方法,能夠快速獲得視覺可接受的全局光照效果。該方法通過對場景中的可見點進行采樣,作為間接光照的虛擬點光源,實現一次彈射的間接光照計算。但是受陰影圖分辨率的影響,間接光照計算成本仍然很高。本文對反射陰影圖的虛擬點光源采樣進行了分析,提出一種動態劃分采樣分辨率的細化算法,能夠有效的去除無貢獻或者貢獻小的采樣點,在相同的采樣方式下能明顯減少采樣點的數量,提高計算效率。
反射陰影圖(Reflective Shadow Map,RSM)[4],是標準陰影圖[5]的擴展。在RSM中,存儲光源到可見表面點的深度值(Depth)即陰影圖(SM)、陰影圖中點的表面法向量(Normal)和輻射通量(Flux)以及世界空間坐標(Position)。反射陰影圖的基本思想來自于瞬間輻照度(Instant Radiosity,IR)法[6],生成的紋理圖可以包含直接光照信息和一次反彈的間接光照信息。因此,能夠快速近似計算全局光照[7,8]。
在反射陰影圖算法中,首先將陰影圖里的每個紋素視為一個虛擬點光源(VPL),通過對虛擬點光源的采樣,進行基于法向量的光照貢獻判斷和屏幕空間的間接光照計算,為了加快計算過程,利用屏幕空間插值快速模擬場景的全局光照效果。反射陰影圖在動態場景中的主要缺陷是性能低和遮擋計算復雜。近些年,大量的近似全局光照繪制方面的研究方法被提出,比較著名的包括Ritschel T的Imperfect shadow map(ISM)[9],此方法利用低分辨率的均勻采樣計算間接光照,能提高間接光照計算的效率,可以應用在大規模、全動態場景中,但是由于其分辨率低,使得間接光照的計算近似程度不高。Kien T Nguyen[10]提出在動態場景中利用層次采樣結構,建立光照緩存,稀疏的計算間接光照,利用幀間相干性和插值方法完成近似全局光照計算,該方法計算復雜性高。Carsten D等提出利用與RSM相反的過程SII[11],首先在RSM中采樣一定數量的VPLs,根據每個VPL的輻射通量和法向量,計算得到一個該點光源影響的區域范圍,再利用延遲渲染合成計算間接光照。Greg N等[12]對SII進一步的改進,不再限制每個VPL的影響范圍是一個狹小的影響域,而是每個VPL都可以影響到整個屏幕空間。上述算法的間接光照都是基于采樣點光源實現的,采樣方式主要包括重要性采樣,均勻采樣,隨機采樣等手段。其中,反射陰影圖是基于重要性和隨機相結合的采樣方法,由于陰影圖是二維深度值,沒有考慮世界坐標空間中的距離關系,因此具有改進空間。
在反射陰影圖中假設在陰影圖中的鄰近關系等同于世界坐標空間的鄰近關系,即在陰影圖中鄰近的兩個點,在世界坐標空間中兩個點的位置關系也是鄰近的。因此,在采樣時鄰近的點一定會被考慮進來。但是由于在陰影圖中采樣本身考慮的是平面的鄰近關系,不能體現三維空間的鄰近關系。如果深度值的差過大,則代表兩點在世界坐標中的距離遠,在采樣計算時,這些點光源的計算就會引起過度光照的偏差,嚴重時引起走樣。
采樣自適應細化算法(ARRSM),通過陰影圖的深度方差分析,估算某個采樣區域的有效VPLs分布密度及光照貢獻強度,可實現自動調節采樣分辨率。假設場景的所有表面為漫反射表面(diffuse),需存儲的信息包括SM中的每個像素 p的深度dp;像素對應的世界空間坐標xp;像素法向量np;輻射通量?p;假設像素光源足夠小(點光源),那么,光源發射到ω方向的光強表示為:

其中<|>為點乘。像素 p在一個表面上點x處產生的對于法向量為n的方向輻射度表示如下:

其中φp是表面反射系數 fc與輻射通量flux的乘積。在平行光源下輻射通量flux為常量,在點光源下,輻射通量flux值隨著出射角度增大而余弦減小,即:

表面法向量為n的一點x的亮度為所有采樣點輻射度的總和E(x,n)表示為:

由于一個典型的陰影圖的紋素數量是很大的(512×512=262144 VPLs),所以估算上述的總和開銷非常大,不能適用于實時環境。而且,延遲的陰影緩沖區的應用也不能完全解決場景復雜性與渲染時間之間的矛盾。所以,讓初始的子采樣根據深度值與法向進行自適應細化,可以大大降低場景復雜性的影響[4]。
陰影圖中一點x(s,t)的值,代表了該點到光源的距離。在RSM中,x和xp在陰影圖上的距離合理近似于它們在世界空間中的距離,以此為依據進行VPLs的采樣及間接光照的計算。在RSM中沒有考慮由于深度差帶來的世界空間距離差別,因此RSM方法的間接光照計算是高估了影響。
在采樣范圍內的點與點x在世界空間中的距離如果大于采樣半徑rmax會導致過度計算點光源。相對而言,距離點x更近的點光源,由于相同的采樣率而被忽略了更有價值的點,如圖1所示。其中Sk=|dx-di|≤rmax。

圖1 RSM采樣點的空間范圍關系
算法采用方差作為深度分析的主要手段,結合方差的數學含義,自適應細化采樣算法主要包括:(1)計算陰影圖深度值方差,以方差自適應劃分陰影圖;(2)劃分不同采樣分辨率,屏幕空間插值計算一次間接光照。
方差刻畫了隨機變量的取值對于其數學期望的離散程度。在這里用深度方差來表示場景深度的分散程度,確定深度分布密度及采樣分辨率。首先,將深度值理解為離散隨機變量,對視口區域計算深度方差按式(5)計算。

其中,di為深度值,c為控制常數。設定方差閾值為ξ0,若K≤ξ0,深度值相對一致,分布比較集中,則按照RSM的隨機方式采樣,通過式(5)進一步減少可采樣點數量,若方差K>ξ0,深度值分布分散,那么以均值為界,將陰影圖分成兩個子圖,使得深度值集合分成兩部分,且S1和S2滿足式(6),如圖1所示。

若dx∈S2,則在S2子圖范圍內設置高分辨率采樣,S1子圖范圍內設置低分辨率采樣。設ξ1和ξ2是均勻分布的隨機數,則對于屏幕空間點x,采樣方法滿足式(7):

其中ξ0為控制常數,用來根據深度方差而確定采樣密度,深度方差與平均深度davg的關系滿足k=c×davg,c為大于1的整數。
采樣區間細化的實施是在渲染的第二個通道中完成的,即從照相機視角繪制場景。在這一過程中,關鍵是對比陰影圖中存儲的深度值和光源到該像素點的距離,以確定該點是否在陰影中。將采樣點x坐標投射到光照空間。若x不在陰影中,則x的亮度直接來自光源,累加后產生是色滲效果。而在全局光照模式下,陰影中的點的亮度是由接收到的一次反射光照決定的。因此自適應采樣細化算法的光照計算限制在式(5)表示的范圍內:設dx為待計算場景點深度,p為RSM采樣范圍內一點,且dp為其深度值,只有當為采樣半徑,本算法rmax=0.03m),計算 p點的輻照度,減少低貢獻VPLs的計算數量。
另外,深度方差的計算還應用在屏幕空間插值過程中,方差越大插值采樣點越多,可以有效增加抗失真性能。圖2和圖3表示了分級采樣的原理,圖中深藍色表示繪制場景點x所在深度級別,橙色為深度差值大于rmax而可以不予采樣的陰影子圖。此外,由于計算陰影圖的深度均值與深度差值復雜性是O(n),操作在線性的時間內完成,不增加系統開銷。
由于間接光照通常是低頻的,因此一個像素點受到的照明情況與其相鄰點受到的照明情況在大多數情況下都是非常接近的,采樣點具有區域性。按照方差的采樣方法,構造分級采樣,如圖2所示。

圖2 陰影圖的分級采樣及細分

圖3 深度圖(左),法向量(中)和采樣算法反射光分布(右)
本實驗通過采樣點法向量方向和光照計算點x的法向量方向來計算光照,當x與xp的法向量夾角接近90°時,cosα及cosβ的值可以忽略,方法是設定閾值kn,去掉點乘小于kn(本算法kn=0.01)的采樣點。計算采樣區間的平均法向量nˉ并比較其它所有法向量nij計算采樣點中對x光照產生影響的VPLs。
反射陰影圖的采樣算法的改進并在可編程管線中 實 現 ,實 驗 環 境 為 Intel(R)Xeon(R)CPU E5620@雙核2.40GHz,NVIDIA Quadro K5000,以及多核CPU環境下測試。為了實現CPU和GPU之間、CPU多核之間的任務負載平衡。本算法采用的技術方案是為CPU和GPU之間以及CPU多核之間的任務劃分建立兩個間接光照及采樣數據庫,分別對計算和存儲場景點的深度、表面法向量、flux通量及片段著色器中采樣的分級結構存儲和方差計算,記錄任務的劃分比例,其中CPU與GPU之間的任務劃分比例根據問題規模確定,且在整個應用程序執行過程中根據CPU和GPU的實測性能自動調整任務劃分的比例,實現任務劃分的負載平衡。采用該方法既能保證CPU和GPU的任務負載平衡,提高科學計算程序利用GPU加速的性能,又能平衡CPU每個核之間的任務負載,提高多核CPU的性能[13]。圖3所示為場景分辨率為(1408*848)下的深度、表面法向量和本采樣算法的反射光源分布。最終繪制效果如圖4所示,左側為標準反射陰影圖,右側為本算法繪制效果,在相同采樣數量下由于自適應細化(ARRSM)能對重要采樣區域提高采樣分辨率,因而細節及暗處更清晰。圖5所示為ARRSM在不同采樣數量下的繪制效果。

圖4 反射陰影圖(RSM)(左)采樣與自適應細化采樣(右)

圖5 不同采樣數量的ARRSM方法112(左)224(中)448(右)

表1RSM采樣與ARRSM采樣數量對比
CPU-GPU異構系統的混合編程方法負載平衡是關鍵,如果劃分的任務不平衡,則將造成CPU或GPU中一方先完成,需要等待另一方任務完成,造成CPU或GPU空轉,使得整個任務完成時間延遲,從而降低了并行效率[13]。本算法通過建立兩個間接光照及采樣數據庫,分別對計算和存儲場景點的深度、表面法向量、flux通量及片段著色器中采樣的分級結構存儲和方差計算,并記錄任務的劃分比例,達到負載平衡的目的,圖7為本算法應用的CUDA tools中計算能力為2.0以及共享內存為16348下相同24個采樣時刻下的CPU-GPU任務計算時間分配關系,充分發揮了CPU和GPU的運算能力。

圖6 24個相同采樣時下GPU與CPU計算時間分配關系(單位:μs)
通過對RSM采樣與ARRSM采樣數量對比,根據場景不同,ARRSM能在RSM的基礎上去掉約11.6%~20.5%的采樣點。為進一步衡量間接光照計算時間的計算效率,運用本算法對不同模型進行測試,在112和224兩種隨機采樣數量下本文算法和標準反射陰影圖對比如表2所示,間接光照計算時間在原基礎上可以減少約20%。

表2RSM與ARRSM間接光照計算時間對比(ms)
實驗表明,通過異構CPU-GPU平臺下與基于GPGPU的對大量虛擬點光源的間接光照計算對比,并獲得了負載平衡和運算峰值,提高計算效率。
[1]Sloan P,Kautz J,Snyder J.Precomputed Radiance transfer for real-time rendering in dynamic,low-frequency lighting environments[J].ACM Transactions on Graphics,2002,21(3):527-536.
[2]Walter B,Alppay G,Lafortune.Fitting virtual lights fornon-diffusewalk throughs[C].ComputerGraphics Proceedings,1997:45-48.
[3]Tabellion E,Lamorlette A.An approximate global illumination system for computer generated[J].ACM Transactions,2004,23(3):469-476.
[4]Dachsbacher C,Stamminger M.Reflective shadow maps[R].Interactive 3D Graphics,2005:203-231.
[5]Williams L.Casting curved shadows on curved surfaces[C].ACM SIGGRAPH Computer Graphics,1978,12(3):270-274.
[6]KellerA.Instantradiosity[C].In Proceedingsof SIGGRAPH,1997:49-56.
[7]Tabellion E,Lamorlette A.An approximate global illumination system for computer generated films[J].ACM Transactions on Graphics,2004,23(3):469-476.
[8]Dachsbacher C,Stamminger M.Translucent shadow maps.eurographics symposium on rendering[C].2003:197-201.
[9]Ritschel T,Grosch T,Kim M,et al.Imperfect shadow maps for efficient computation of indirect illumination[J].ACM Transactions on Graphics,2008,27(5):129.
[10]Kien T Nguyen,Hanyoung J.Image space hierarchical coherence buffer[J].The Visual Computer 2011,27(6-8):759-768.
[11]Dachsbacher C,Stamminger M.Splatting indirect illumination[C].Interactive 3D Graphics and Games,2006:93-100.
[12]Nichols G,Wyman C.Multi-resolution splatting for indirect illumination[C].Interactive 3D Graphics and Games,2009:83-90.
[13]廖湘科,易會戰,杜云飛,等.一種基于負載平衡的cpu和gpu兩級動態任務劃分方法[P].中國國家知識產權局,歐洲專利數據庫(Espacenet)2012.