宗 華
(1.中國科學院上海微系統與信息技術研究所,上海200050;2.上海科技大學信息學院,上海201210;3.中國科學院大學北京100049)
為了提高渲染過程的效率與結果的真實感,幾十年來大量學者不斷探索研究,貢獻了大量杰出的工作。當前最先進的渲染方法可以對復雜的光照效果做真實感渲染[1-4],并出現了各種改進的渲染方法以加速渲染過程[5-12]。
雖然表面渲染已經可以做到實時渲染[13-16],非均勻介質下的體渲染因其介質內部復雜的光照變化,即使使用最先進的并行計算設備,實時體渲染依然是一個巨大的挑戰。
補償光線步進法通過預處理實現了全局光照下包含多層散射的煙霧實時渲染,但其預處理時間隨著煙霧數據分辨率的提升急劇上升到不可接受的量級。本文在補償光線步進法的基礎上引入多級分辨率與應用遺傳變異的思想,保證了在預處理結果質量近似的情況下所需時間減少50%以上,且同時得到多個分辨率下的預處理結果方便使用Level-of-Detail(LoD)技術進行實時渲染的加速。
在補償光線步進法中,假設環境光為低頻光。在這種光照條件的基礎上,我們可以合理地假設輻射源(source radiance)在煙霧中變化平緩,因此它的角變化可以用低階球諧函數(spherical harmonics)近似,其空間變化可以使用較少(300~1200)的徑向基函數近似。同時該方法還假設介質為光厚介質(optically thick),從而使用擴散過程(diffusion process)近似多層散射。
補償光線步進算法方法分為預處理和實時渲染兩部分。
煙霧的密度場D可被分解為一組徑向基函數(radial basis function,RBF)Bl的加權和與殘差R:

徑向基函數Bl由中心cl和半徑rl定義:

通過對密度場的分解,我們可以使用由徑向基函數近似的低頻密度信息計算介質中的全局光照,然后通過補償高頻殘差恢復局部細節。
在煙霧渲染中,計算消耗主要集中在計算密度場D中的源輻射J。為了加速計算,該方法由低頻徑向基函數近似的密度場D?計算近似的源輻射J?。此方法只計算徑向基函數因單層散射和多層散射得到的近似源輻射J?:

介質中任意一點x的近似源輻射J(x)可以通過這些中心點的近似源輻射求加權和得到:

在得到每個徑向基函數中心的源輻射后,可以通過光線步進法(ray marching)得到介質輻射率Lm(x,ωo)。Lm(x,ωo)由兩部分構成:徑向基函數近似的密度場?與近似的源輻射?所得到的近似輻射率,密度場殘差補償項:

其中表示由計算的透射比,xj標記了N個與x之間等間距分布的點。補償項將密度殘差造成的吸收或增強光照影響補償到光線步進過程中。通過高頻煙霧細節的補充,可以得到高質量的煙霧渲染結果。
補償光線步進法提出了一種基于優化過程的密度場近似方法(這種優化方法也被應用與三維紋理的向量化上)。
對于一個給定的徑向基函數個數n,可通過解決下面的優化問題得到煙霧密度場的理想近似:

其中(i,j,m)是對三維柵格上xijm位置的索引。實踐中采用L-BFGS-B優化方法。L-BFGS-B是一種基于導數的方法,所以在每一次迭代中,我們都需要給優化器提供目標函數值及對每一個變量的偏導。
為了防止在優化的早期陷入局部最優解,采用一種遷移策略:在近似過程中記錄誤差最大的位置,然后將最不顯著的徑向基函數遷移到這個位置。每當優化器完成固定次數迭代(實驗中使用的次數為20)時執行這一遷移策略。當優化器收斂時,隨機選擇將最不顯著的徑向基函數遷移到誤差最大的位置或者任意密度非零的位置。算法直到以上兩種策略都無法降低目標函數值時算法終止。
我們將一個徑向基函數Bl的顯著性定義為這一徑向基函數存在同不存在對目標函數值變化的影響:

對預處理結果使用相對誤差評估:

實驗證明,在優化過程中采用這種遷移策略可使最后的目標函數值下降20%~30%。
2.2.1 加入概率的遷移策略
2.1節中介紹的遷移策略可以在前期有效加速函數收斂,防止優化陷入局部最優解,但在函數即將收斂時,頻繁的遷移可能會導致函數長時間不收斂,當收斂閾值設置過小時此問題尤其明顯。
根據函數收斂的趨勢可知,在距收斂較遠時通過遷移和一輪固定次數的優化可以顯著降低目標函數值,而即將收斂時遷移和一輪固定次數的優化后目標函數值往往大于遷移前的值。
由此我們設計了一個基于概率的遷移策略:設置一個變化的概率變量P,每當固定次數的迭代完成后,按照P概率確定是否執行遷移策略。在執行遷移策略且結束一輪固定次數優化后,比對遷移前的目標函數值,若當前值更小,則可知尚未逼近收斂,應當適當擴大P值,鼓勵更多遷移;若當前值變大,則可知已接近收斂,則應縮減P值,抑制遷移操作。
通過實驗我們驗證了概率控制遷移策略的可行性,解決了可能存在的長期不收斂問題。
2.2.2 基于多分辨率的分層優化
多分辨率技術在計算機科學中存在廣泛應用,如優化中的多重網格技術(multi-grid method),渲染中的LoD技術等。我們將多分辨率技術引入優化過程,使用低分辨率的密度數據優化得到的結果為高分辨率的優化過程提供良好的初始化,從而提高優化效率。
首先我們將煙霧密度數據降采樣到一組從稀疏到密集的多層分辨率集合,為每層數據指定逐漸增多的RBF個數逐層優化,并將前一層優化結果用作后一層優化過程的初始化,第一次優化的初始值設置采用與2.1節中相同的隨機初始化。
由于后一層優化過程使用的RBF個數多于前一層,不能直接使用上一層的優化結果。在以上一層優化結果做初始化的過程中,將本層的徑向基函數中心隨機放置在某個上層徑向基函數中心周圍(添加一個微小的擾動),選取相似的半徑,在固定徑向基函數中心和半徑的前提下,使用類似2.1節中的優化過程確定每個徑向基函數的權重。

圖1 RBF近似的煙霧渲染
2.2.3 加入遺傳變異的初始化
實驗發現,上述的方法雖然提升了預處理速度,但卻因陷入局部最優解導致較大計算誤差。我們參考遺傳變異的思想,對初始化過程改進:對大部分(實驗中使用80%)的徑向基函數做2.2.2節所述的初始化,對于剩下小部分的則做隨機初始化,以保證快速收斂的同時有足夠大的隨機性跳出局部最優解。實驗證明這種方法可以收獲預期的效果,解決了之前的問題。
本文代碼主要使用CUDA語言實現于GPU端做并行計算。實驗所用電腦配置為2.40 GHz主頻CPU,16G內存和Nvidia Titan X顯卡。本文所使用煙霧密度數據來自物理仿真,且本文所使用的數據分辨率為128×128×128。本文代碼實現并非最優,但保證對比實驗運行于相同優化條件。
在實時渲染過程中,我們將環境光照投影到球諧函數空間,并通過球諧函數變換高效地進行渲染計算。其中每個RBF中心點的光學深度(optical depth)可以通過對單位RBF預處理所得記錄提取后旋轉、伸縮快速求得。每個RBF中心點的單層散射、多層散射光強也可以在球諧函數空間以求解線性方程組的形式快速求得。此后我們按原數據的分辨率生成光照強度體數據并補償殘差,再執行傳統的光線步進算法得到渲染結果。
我們在如圖1所示的兩個場景中分別進行對比實驗(本文所使用的數據均為基于物理仿真的流體控制算法生成),實驗結果如表1、表2所示。圖1中第一行、第二行分別為場景1、場景2中抽出三幀的成像結果。從表1、表2中我們可以看出,改進后的方法在效率和質量上均優于原先的方法。

表1 場景1對比實驗

表2 場景2對比實驗
本文將多分辨率思想應用于基于RBF的體數據向量化方法,加入了概率控制遷移策略預防了長時間不收斂的情況,遺傳變異思想防止優化過程陷入局部最優解。在得到相同質量結果的前提下明顯提高了運算效率。此方法不僅適用于補償光線步進法的預處理過程,同樣適用于體紋理的向量化等包含RBF體數據向量化的方法。
本文需要用戶指定數據分離的層數及每層數據的分辨率和使用的RBF個數,難以直接對其結果質量把控,我們未來的主要工作是如何高效地自動指定這些參數,減少嘗試過程。