劉曉蕓,姚承宗,曾曉勤
(河海大學計算機與信息學院,江蘇 南京 211100)
在真實感圖形繪制中,全局光照能夠為場景提供更為豐富的光影效果,通過計算光線的多次反射、折射能夠產生更為逼真的光影細節。早期實現全局光照繪制的算法主要有光線跟蹤[1]、輻射度[2]、光子映射[2]等。這些基于間接光照的算法,需計算光線在物體之間的多次反射、折射,與光源特性、場景中物體的物體特性以及物體的相對空間位置等有關,因而計算量巨大。
隨著可編程GPU出現,涌現出一些使用GPU對全局光照進行加速的算法。如周昆[1]等提出了在CUDA上構建KD樹的新算法,核心是對KD樹中的大結點和小結點分別處理,該方法能夠充分利用GPU的并行計算能力,明顯提高渲染速度。但大結點分割質量比較低,而且排序過程的計算量比較大。Wang等人[5]提出一種基于GPU的分割數據采樣和插值的全局光照方法,該方法通過自適應的K值聚類,將場景分割成條理分明的簇,對每一個簇使用基于GPU的光子圖法來計算其輻照度,最終將每一個光子圖切片整合。由于分割只進行了極有限次數的采樣,該方法會丟失一些幾何特征,并且在實現上受限于現存的時序算法。
為了提高渲染速度,有一些通過犧牲渲染精度為代價的方法被提出,如Keller[6]提出將來自一個反射面的反射光線擬合成一組虛擬點光源來簡化計算,但這一方法忽視了折射和反射的細節。Dachsbacher[7]通過機器學習的方法,根據不同的能見度對場景進行分層,對能見度較高的層,用精度較高全局光照模型進行計算,對于能見度較低的層,則使用精度較低的模型進行計算。采用該方法渲染的場景部分區域較為精細,而其它部分較為粗糙。Kaplanyan[8]通過三維場景中的光能傳播來擬合間接光照值,然而其只能擬合漫反射表面的間接光照。
還有一些方法通過預計算的方法來實現全局光照的實時繪制。如Sloan[9]提出的預計算輻射亮度傳輸(precomputed radiance transfer PRT),在靜態場景中將物體表面的低頻光照包括全局光照產生的陰影以及物體相互之間的反射關系等轉化成輻射度傳輸,從而計算靜態環境對于各個方向光源的反射數據等,在進行渲染時調用這些計算結果,可以實現動態低頻光照的全局光照效果。由于動態的光源和高頻發光之間的相互反射,繪制動態場景的效果不理想。Ren等人[10]則構建了一個多層前饋神經網絡作為光照回歸函數(radiance regression function RRF)來擬合間接光照值,通過預先渲染好的場景作為導師數據對網絡進行訓練,使用訓練好的網絡擬合間接光照值,能實現場景的實時渲染,然而其網絡過于復雜,冗余數據較多,收斂較慢,并且無法實現動態場景的擬合。
徑向基函數(Radial Basis Function, RBF)神經網絡[11]能夠逼近任意的非線性函數,可以處理難以解析表示的映射,具有良好的泛化能力和較快的學習收斂速度,已成功應用于非線性函數逼近、時間序列分析、數據分類、模式識別、信息處理、圖像處理、系統建模、控制和故障診斷等方面。RBF網絡是一個局部逼近網絡,也就是對輸入空間的某個局部區域只有少數幾個連接權值影響輸出,因此它較每一個權值都要調整的全局逼近網絡具有更快的收斂速度。
本文將回歸分析方法引入全局光照的渲染過程之中,使用RBF神經網絡構建學習模型,對通過蒙特卡洛光線跟蹤方法得到的光照樣本數據集進行學習,確定每個基函數單元的寬度、中心及隱含層與輸出層單元之間的權值矩陣,從而發掘出每個場景對象表面可見點的特征屬性之間的非線性關聯。實驗表明,基于RBF神經網絡學習模型的全局光照技術可以很好地擬合蒙特卡洛離線渲染的結果,用其構建神經網絡模型來擬合光照計算,可以避免傳統光線跟蹤過程中繁雜的光線求交計算,在確保渲染精度的同時,提高了場景渲染的速度。
針對點光源的靜態場景,由Peter[12]提出的光照方程,可以得到在視點Θ處觀察到場景中點x處的反射光照強度為

(1)
Lr(x→Θ)=Ldirect+Lindirect
(2)
其中Ψ為光源位置,Ωx為x點附近的球面,fr表示點x位置處的雙向反射分布函數(Bidirectional Reflectance Distribution Function, BRDF),Nx表示點x位置處的表面法向量,Li表示點x位置處來自方向i的入射光亮度。G(x,y)表示x與y的光線傳輸幾何關系,V(x,y)表示兩者的能見度關系。
根據BRDF的定義,有

(3)
由于場景中物體表面都是固定的,可以看出,BRDF是一個與點x的位置、入射光線和視點位置有關的函數,因而可以將其簡化為如下三元組
fr(x,Ψ→Θ)=fr(f(x),Ψ,Θ)
(4)
式(2)中Ldirect表示直接光照值,Lindirect表示間接光照值。
對于Ldirect部分,本文采用自適應采樣的蒙特卡洛方法來進行加速,Lindirect部分則通過RBF網絡進行模擬。
為了敘述方便,對公式進行歸一化,用n表示x處的單位法向量,s表示光源方向單位向量,v表示視點方向單位向量,可以將Lindirect部分簡化為

(5)
本文對間接光照的解決方法是將其視為一個神經網絡的學習問題來解決。
根據式(5)可以定義一個與x,s,v,n,f有關的函數Lin用來擬合Lindirect
Lindirect≈Lin(x,s,v,n,f)
(6)
對于確定的場景,Lin是一個固定的函數,可以通過計算光線傳輸來得到任意視點、光源以及位置x處的Lin函數。如果采用傳統的光線跟蹤算法進行計算,因涉及到光線多次求交的問題,算法復雜性很高。
本文采用RBF神經網絡方法,根據不同場景的特征值,擬合出一個該場景下計算間接光照值的函數,避免了光線求交計算,實現靜態場景的實時渲染。
根據式(6)可以構建如圖1所示的RBF神經網絡,這是一個R12+nf到R3[r,g,b]的映射。

圖1 RBF神經網絡
其中x=(a1,a2,a3),s=(a4,a5,a6),v=(a7,a8,a9),n=(a10,a11,a12),f=(a13,…,a12+nf),將訓練網絡得到的擬合函數記為Lnet。通過擬合函數計算每個像素的間接光照值
B=[r,g,b]=Lnet(x,s,v,n,f)
(7)

采用監督學習算法對網絡所有的參數(RBF的寬度、中心及隱含層到輸出層的權值矩陣)進行訓練。主要工作是對代價函數進行梯度下降,然后修正每個參數。
通過減聚類算法[13],將得到的聚類中心作為RBF的中心Φi(i=1…P)。采用減聚類算法原因在于在該算法中,數據集本身作為聚類中心的候選集。算法所涉及的計算量與數據點的數目之間呈現為簡單的線性關聯,與維數無關,可以有效減小網絡規模。具體過程如下



針對ΩZ中的元素,根據減聚類的定義推導出其密度指標計算式(8)

(8)

4) 對式(8)密度指標迭代公式進行修正,得到新的密度指標迭代式(9),選取密度指標最高的數據點作為新的聚類中心。

(9)
選取好聚類中心Φi(i=1…P)后,采用隨機分布,初始化隱含層到輸出層的權值wi。采用梯度下降法對網絡中的三種參數都進行監督訓練優化,代價函數的表現形式見式(10),表示網絡輸出和理想輸出的方差與輸入規模的比值。

(10)
在合成一副圖像的時候,不同區域的灰度值變化不同,細節的豐富程度也不一樣。對于細節比較豐富的圖像區域,需要進行較多次數的采樣,才能詳細的描述出該區域的細節特征。而針對細節比較少的圖像區域,進行較少次數的采樣就能描述出該區域的細節特征。自適應采樣算法[14]就是根據圖像當前區域細節的豐富程度決定其采樣次數。
具體實現時,首先采用均勻分布的方式分布初始采樣點。
然后,采用非局部均值方法去噪,在合成圖像的時候,生成兩個采樣點相同的緩沖區域A和B。
假設在緩沖區A中有兩個相鄰像素點p和q,在對像素點p進行去噪處理時,首先計算在緩沖區A中以p為中心的區域和以q為中心的區域之間的加權歐氏距離,計算公式見式(11),其中,f為區域大小。

(11)
通過式(12)求出權值。

(12)
將求取的權值代入式(13)去計算B緩沖區的圖像。

(13)
同理,使用B緩沖區中得到的權值去計算A緩沖區中的圖像,這樣可以消除濾波系數和噪聲之間的相關性。最后利用兩幅圖像之間的差值來表示錯誤率,其計算見式(14),其中N(p,f)表示這一區域的均值。

(14)
錯誤率越高,表示這一區域的細節越豐富,根據錯誤率來重新分配采樣點。
如此反復迭代,完成采樣,之后用經典的光線跟蹤算法完成直接光照部分的渲染。
完成對RBF網絡的訓練之后,便得到了擬合函數Lnet,可以用其對間接光照值進行擬合,得到該場景中不同光源位置和視點位置情況下各點的顏色值。
對于一組視點V和光源S,可以得到在該視點下需要渲染的場景點x,計算得到x處的法向量n和紋理映射f,從而對于任意需要渲染的像素點,都有一組歸一化的輸入向量[x,s,v,n,f],通過擬合函數即可得到該像素點的R、G、B顏色分量,即間接光照值。
將每個場景點的直接光照和間接光照進行疊加,得到最終的渲染圖像。
通過使用Mitsuba進行離線渲染,獲取訓練數據。使用Matlab對神經網絡進行訓練。再用訓練好的網絡對輸入數據進行擬合,得到輸出的圖像。實驗平臺為: i5處理器、3.3GHz主頻、8G內存、2G顯存。
本文采用了隨機采樣和基于高斯分布的采樣兩種方式選取樣本點,兩種采樣方式在神經網絡的訓練時間、收斂速度和渲染精度方面均無明顯差別。
針對同一場景,由于同一面的單位法向量相同等原因,所以在最終獲取到的訓練數據中,存在大量冗余數據。在訓練前,先將這一部分冗余數據剔除。
分別用BP網絡和RBF網絡進行了求解,對于Smallpt場景,擬合的間接光照效果如圖2所示。

圖2 間接光照擬合效果
RBF網絡擬合的間接光照與直接光照疊加,得到最終渲染圖像,效果如圖3所示。

圖3 離線渲染效果和本文方法效果
在不同的視點位置下渲染結果如圖4所示。

圖4 不同視點位置下的渲染效果
圖5是 Sponza場景在不同規模訓練數據下的渲染效果。

圖5 Sponza場景不同規模訓練數據下的渲染效果
實驗發現,但當訓練數據達到一定規模時,單次訓練時間不斷增加,網絡收斂速度越來越慢,錯誤率下降越來越慢。實驗還發現,最終的訓練時間與場景大小和離線渲染的訓練數據大小無關,而與有效的向量數量有關,以兩個不同大小的場景Smallpt和Sponza為例,兩者場景大小相差很大,離線渲染得到的訓練數據量相差也很大,但是有效向量數量接近,因而其最終的訓練消耗時間也類似。由于都是較小規模場景,在相同擬合誤差要求下,RBF相對BP網絡能更快收斂,其效果好于BP。具體比較見表1。
采用RBF神經網絡擬合的方法來實現間接光照,可以避免在傳統的光照模型中光線多次求交的問題,實現全局光照的實時繪制。雖然由于RBF網絡本身的局限性,在對較為復雜的場景渲染時,輸入空間增大,泛化能力下降,訓練時間增加。但較之前使用BP網絡的擬合方法,不易陷入局部極值,有更快的收斂速度和更好的擬合效果。
在后續工作中,考慮使用多個網絡并行對場景中不同的特征值進行處理,以應對更加復雜的場景和動態場景。

表1 不同場景比較