喻光繼,羅偉泰,吳肖云
(1.廣西財經(jīng)學(xué)院信息與統(tǒng)計學(xué)院,南寧530003; 2.廣西自然資源職業(yè)技術(shù)學(xué)院公共基礎(chǔ)部,南寧530100)
(?通信作者電子郵箱luoweitai@126.com)
計算機(jī)技術(shù)的發(fā)展,使得虛擬現(xiàn)實技術(shù)的應(yīng)用越來越深入,而全局光照是虛擬世界真實感的重要組成[1],但由于對于大規(guī)模復(fù)雜場景的全局光照計算,計算量和資源占用難以滿足實時性要求[2],因此,需要有效的存儲結(jié)構(gòu)和計算方法來優(yōu)化全局光照在大規(guī)模場景中的計算[3]。
光線追蹤[4]和體素錐結(jié)構(gòu)[5]是常用的全局光照計算方法,其通常采用八叉樹等結(jié)構(gòu)加速存儲計算:薛俊杰等[6]采用多級小波分解及多級系數(shù)編碼,增加細(xì)節(jié)信息,實現(xiàn)多分辨率渲染;Blumensath等[7]提出稀疏體素與八叉樹索引相結(jié)合的信息存儲結(jié)構(gòu),提高了間接光照的計算效率,但存儲空間需求較大;Wang等[8]優(yōu)化了稀疏體素八叉樹,但節(jié)點編碼仍占用較多資源;K?mpe等[9]采用稀疏體素有向無環(huán)圖(Sparse Voxel Directed Acyclic Graph,SVDAG)結(jié)構(gòu)減少冗余共享節(jié)點的存儲;袁昱緯等[10]以幀間復(fù)用對SVDAG結(jié)構(gòu)進(jìn)行改進(jìn),以避開重復(fù)合并;郭向坤等[11]采用 CPU(Central Processing Unit)與GPU(Graphics Processing Unit)協(xié)同的并行掃描線優(yōu)化大規(guī)模場景體素化。
體素錐追蹤在復(fù)雜光照計算時取得較好效果[6-10],但八叉樹及改進(jìn)結(jié)構(gòu)[7]在大規(guī)模實時渲染時,體素數(shù)隨場景規(guī)模而劇增,且由于結(jié)構(gòu)不具有各向異性,遍歷查找困難耗時[12-13],為此,針對大規(guī)模復(fù)雜場景提出基于改進(jìn)體素錐濾波器追蹤的全局光照計算算法,以級聯(lián)紋理結(jié)構(gòu)優(yōu)化信息存儲,基于法線加權(quán)累積計算光照衰減,基于級聯(lián)紋理結(jié)構(gòu)改進(jìn)錐波濾器以優(yōu)化體素的動態(tài)計算查找。
本文采用級聯(lián)體素紋理結(jié)構(gòu)表達(dá)場景,代替原有的三角形表達(dá),該結(jié)構(gòu)依據(jù)人眼的距離敏感性,將場景劃分為互嵌套的距離圖元網(wǎng)格[14]。區(qū)域離人眼越近,其網(wǎng)格越小以便高分辨率地精細(xì)描述景物,網(wǎng)格以相互嵌套正方體形狀,沿視角方向延展,其三層網(wǎng)絡(luò)示意圖如圖1所示,文中取n=6。
級聯(lián)結(jié)構(gòu)中的基本紋素與體素對應(yīng),為保護(hù)結(jié)構(gòu)各向異性存儲體素的6個面信息,從而以合理的方式由近及遠(yuǎn)將場景覆蓋,體素的各向異性保證了光照計算的準(zhǔn)確性,且有利于體素間的三線性插值和硬件加速查找。
直接光照的計算及其分布通常與光線的傳輸方程相關(guān),物體p點的光線傳輸方程為:
式中:Ω為p點所處半球空間,ω0、ωi為光線出射和入射角;L0、Le、Li分別為出射、發(fā)射和入射的輻射照度;f為雙向反射函數(shù)(Bidirectional Reflection Distribution Function,BRDF),cosθi=n?ωi為入射光在p點的法線n的衰減,ωi為光線方向矢量。
直接光照計算時采用體素多三角形面片法向均值計算cosθi,某些體素會因法線反向而無法正確接收光照,為此,提出基于法線加權(quán)累積的光照衰減計算方法,即:
式中:k為三角形面片的數(shù)目,n j為各面片的法線,V為法線衰減值,ns、Ls為坐標(biāo)軸分量。
為保持光線追蹤時采樣的一致性,需建立各向異性的輻射體層級。如圖2所示為三維紋理生成貼圖的過程,在體素劃分的基礎(chǔ)上,對各坐標(biāo)軸求和并計算均值;采樣時根據(jù)光照入射角插值計算其輻射值。每次入射輻射度收集后都需各向異性過濾,本文對直接和間接光照都進(jìn)行了入射輻射度收集和各向異性過濾。
圖2 各向異性過濾與采樣Fig.2 Anisotropic filteringand sampling
間接光照需要計算半球內(nèi)的所有積分,計算量巨大,為此,提出基于級聯(lián)紋理的改進(jìn)錐濾波器追蹤算法。在光照采集時,以級聯(lián)體素的法向量均值作為起始點,定義k個錐波濾器,漫反射模擬為60o光圈值的6個錐體,而高光反射模擬為10o光圈值的單椎體。
改進(jìn)錐濾波器依次排列樣本模塊,并與級聯(lián)等級對應(yīng),如圖3(a)所示,各模塊到錐頂點p的距離l與角度β確定了當(dāng)前采樣模塊的直徑r,再結(jié)合體素寬度Ws,則可計算得到體素所處的級聯(lián)等級d:
圖3 錐濾波器與級聯(lián)紋理Fig.3 Conefilter and cascadingtexture
由d、r及角度β可自行計算體素位置,避免對整個存儲結(jié)構(gòu)的遍歷。每個錐波濾器計算采樣值后,由k=6個錐累積值作為當(dāng)前體素的光亮值。
在第m步中,錐濾波器需要動態(tài)更新輻射度cm及相應(yīng)的累積遮蔽值am,即:
式中:hc為存儲輻射度,ha為存儲遮蔽值。直接光照注入后,將各錐濾波器的結(jié)果加權(quán)乘以反射率,再加上直接光照值,即得到體素的最終光亮度。
實驗選取康奈爾靜態(tài)場景[13]和 Sponza、Sibenic 以及Cathedral[14]動態(tài)場景,從規(guī)模、速度和內(nèi)存消耗等方面對文中算法性能進(jìn)行測試,環(huán)境為:Intel Xeon E5-2643 v4 3.4 GHz,32 GB內(nèi)存,NVIDIA M4000 8 GB顯存。
為驗證級聯(lián)體素紋理結(jié)構(gòu)存儲的優(yōu)勢,以三維紋理[2]、稀疏八叉樹[8]、基于 Morton碼的稀疏八叉樹(Morton-based Sparse Voxel Octree,MSVO)結(jié)構(gòu)[5]和 SVDAG 結(jié)構(gòu)[10]作為實驗比較算法,從體素規(guī)模、運行時間及內(nèi)存消耗3個方面測試對比,實驗結(jié)果如圖4所示。
圖4 各算法的體素結(jié)構(gòu)性能比較結(jié)果Fig.4 Voxel structureperformancecomparison of different algorithms
從圖4(a)實驗結(jié)果可以看出,三維紋理結(jié)構(gòu)在各場景下的體素規(guī)模都最大,而稀疏八叉樹、MSVO、SVDAG的體素規(guī)模有明顯減少,但仍遠(yuǎn)高于文中級聯(lián)結(jié)構(gòu)。不同分辨率下的實驗結(jié)果進(jìn)一步分析可知,低分辨率時,稀疏八叉樹的體素規(guī)模與文中結(jié)構(gòu)相差不大;但隨著分辨率的增加,規(guī)模差異隨之增大,主要因為級聯(lián)紋理按層次劃分存儲,相鄰層呈倍數(shù)遞增,小規(guī)模場景的分層優(yōu)勢不明顯,但在高分辨率下僅需增加層數(shù)。
從圖4(b)結(jié)果可以發(fā)現(xiàn),稀疏八叉樹及MSVO結(jié)構(gòu)的復(fù)雜邏輯不利于快速數(shù)據(jù)遍歷,而級聯(lián)紋理的分層存儲在減小體素規(guī)模的同時,更利于數(shù)據(jù)的遍歷和查找,因而極大縮短體素化運行時間。
在內(nèi)存消耗方面,以像素透明屬性作為實驗比較統(tǒng)計量,實驗結(jié)果如圖4(c)所示,可以看出,文中結(jié)構(gòu)的6個面信息存儲仍具有明顯的內(nèi)存占用優(yōu)勢,且隨著分辨率的增加,內(nèi)存占用呈線性增加。
由于間接光照具有更大的渲染難度,為此,以間接光照的渲染效果來比較本文算法與MSVO算法[14]、稀體素錐追蹤算法[5]及光驅(qū)動體素法[11]四種算法的渲染效果,實驗結(jié)果如圖5所示。
圖5 不同算法間接光照渲染效果Fig.5 Indirect illumination renderingeffects of different algorithms
從結(jié)果可以看出,光驅(qū)動體素法采用體素分散結(jié)構(gòu)與錐追蹤融合計算間接光照,可以看出,其渲染的間接光照較柔和,但遠(yuǎn)區(qū)域細(xì)節(jié)較差,體素錐追蹤算法與文中算法的渲染效果與真實場景視覺質(zhì)量相近,對遠(yuǎn)區(qū)域細(xì)節(jié)也能夠較好地表達(dá),說明文中算法遠(yuǎn)視域大體積體素渲染,獲得與體素錐追蹤算法相似的渲染效果。
綜合整體實驗結(jié)果,所提算法在取得較好的渲染效果基礎(chǔ)上,極大地降低了體素化規(guī)模和內(nèi)存消耗,縮短了渲染運行時間,有利于大規(guī)模復(fù)雜場景全局光照的實時繪制。
計算機(jī)性能的提高使得虛擬現(xiàn)實在軍事、教育、娛樂等領(lǐng)域的應(yīng)用越來越深入,而全局光照的計算和渲染是真實感增強(qiáng)及場景分析等虛擬現(xiàn)實技術(shù)的重要組成部分。本文提出一種基于改進(jìn)體素錐濾波器追蹤的全局光照計算算法,算法通過級聯(lián)紋理結(jié)構(gòu)快速光照信息存儲、法線加權(quán)累積光照衰減計算和體素動態(tài)遍歷計算,實現(xiàn)全局光照的高效渲染計算,并避免法線反向問題。實驗結(jié)果表明,改進(jìn)算法在降低內(nèi)存占用、提高渲染速度的同時,保持與經(jīng)典稀疏體素追蹤算法相近的渲染效果。