宗 華
(1.中國(guó)科學(xué)院上海微系統(tǒng)與信息技術(shù)研究所,上海200050;2.上??萍即髮W(xué)信息學(xué)院,上海201210;3.中國(guó)科學(xué)院大學(xué)北京100049)
為了提高渲染過(guò)程的效率與結(jié)果的真實(shí)感,幾十年來(lái)大量學(xué)者不斷探索研究,貢獻(xiàn)了大量杰出的工作。當(dāng)前最先進(jìn)的渲染方法可以對(duì)復(fù)雜的光照效果做真實(shí)感渲染[1-4],并出現(xiàn)了各種改進(jìn)的渲染方法以加速渲染過(guò)程[5-12]。
雖然表面渲染已經(jīng)可以做到實(shí)時(shí)渲染[13-16],非均勻介質(zhì)下的體渲染因其介質(zhì)內(nèi)部復(fù)雜的光照變化,即使使用最先進(jìn)的并行計(jì)算設(shè)備,實(shí)時(shí)體渲染依然是一個(gè)巨大的挑戰(zhàn)。
補(bǔ)償光線步進(jìn)法通過(guò)預(yù)處理實(shí)現(xiàn)了全局光照下包含多層散射的煙霧實(shí)時(shí)渲染,但其預(yù)處理時(shí)間隨著煙霧數(shù)據(jù)分辨率的提升急劇上升到不可接受的量級(jí)。本文在補(bǔ)償光線步進(jìn)法的基礎(chǔ)上引入多級(jí)分辨率與應(yīng)用遺傳變異的思想,保證了在預(yù)處理結(jié)果質(zhì)量近似的情況下所需時(shí)間減少50%以上,且同時(shí)得到多個(gè)分辨率下的預(yù)處理結(jié)果方便使用Level-of-Detail(LoD)技術(shù)進(jìn)行實(shí)時(shí)渲染的加速。
在補(bǔ)償光線步進(jìn)法中,假設(shè)環(huán)境光為低頻光。在這種光照條件的基礎(chǔ)上,我們可以合理地假設(shè)輻射源(source radiance)在煙霧中變化平緩,因此它的角變化可以用低階球諧函數(shù)(spherical harmonics)近似,其空間變化可以使用較少(300~1200)的徑向基函數(shù)近似。同時(shí)該方法還假設(shè)介質(zhì)為光厚介質(zhì)(optically thick),從而使用擴(kuò)散過(guò)程(diffusion process)近似多層散射。
補(bǔ)償光線步進(jìn)算法方法分為預(yù)處理和實(shí)時(shí)渲染兩部分。
煙霧的密度場(chǎng)D可被分解為一組徑向基函數(shù)(radial basis function,RBF)Bl的加權(quán)和與殘差R:
徑向基函數(shù)Bl由中心cl和半徑rl定義:
通過(guò)對(duì)密度場(chǎng)的分解,我們可以使用由徑向基函數(shù)近似的低頻密度信息計(jì)算介質(zhì)中的全局光照,然后通過(guò)補(bǔ)償高頻殘差恢復(fù)局部細(xì)節(jié)。
在煙霧渲染中,計(jì)算消耗主要集中在計(jì)算密度場(chǎng)D中的源輻射J。為了加速計(jì)算,該方法由低頻徑向基函數(shù)近似的密度場(chǎng)D?計(jì)算近似的源輻射J?。此方法只計(jì)算徑向基函數(shù)因單層散射和多層散射得到的近似源輻射J?:
介質(zhì)中任意一點(diǎn)x的近似源輻射J(x)可以通過(guò)這些中心點(diǎn)的近似源輻射求加權(quán)和得到:
在得到每個(gè)徑向基函數(shù)中心的源輻射后,可以通過(guò)光線步進(jìn)法(ray marching)得到介質(zhì)輻射率Lm(x,ωo)。Lm(x,ωo)由兩部分構(gòu)成:徑向基函數(shù)近似的密度場(chǎng)?與近似的源輻射?所得到的近似輻射率,密度場(chǎng)殘差補(bǔ)償項(xiàng):
其中表示由計(jì)算的透射比,xj標(biāo)記了N個(gè)與x之間等間距分布的點(diǎn)。補(bǔ)償項(xiàng)將密度殘差造成的吸收或增強(qiáng)光照影響補(bǔ)償?shù)焦饩€步進(jìn)過(guò)程中。通過(guò)高頻煙霧細(xì)節(jié)的補(bǔ)充,可以得到高質(zhì)量的煙霧渲染結(jié)果。
補(bǔ)償光線步進(jìn)法提出了一種基于優(yōu)化過(guò)程的密度場(chǎng)近似方法(這種優(yōu)化方法也被應(yīng)用與三維紋理的向量化上)。
對(duì)于一個(gè)給定的徑向基函數(shù)個(gè)數(shù)n,可通過(guò)解決下面的優(yōu)化問(wèn)題得到煙霧密度場(chǎng)的理想近似:
其中(i,j,m)是對(duì)三維柵格上x(chóng)ijm位置的索引。實(shí)踐中采用L-BFGS-B優(yōu)化方法。L-BFGS-B是一種基于導(dǎo)數(shù)的方法,所以在每一次迭代中,我們都需要給優(yōu)化器提供目標(biāo)函數(shù)值及對(duì)每一個(gè)變量的偏導(dǎo)。
為了防止在優(yōu)化的早期陷入局部最優(yōu)解,采用一種遷移策略:在近似過(guò)程中記錄誤差最大的位置,然后將最不顯著的徑向基函數(shù)遷移到這個(gè)位置。每當(dāng)優(yōu)化器完成固定次數(shù)迭代(實(shí)驗(yàn)中使用的次數(shù)為20)時(shí)執(zhí)行這一遷移策略。當(dāng)優(yōu)化器收斂時(shí),隨機(jī)選擇將最不顯著的徑向基函數(shù)遷移到誤差最大的位置或者任意密度非零的位置。算法直到以上兩種策略都無(wú)法降低目標(biāo)函數(shù)值時(shí)算法終止。
我們將一個(gè)徑向基函數(shù)Bl的顯著性定義為這一徑向基函數(shù)存在同不存在對(duì)目標(biāo)函數(shù)值變化的影響:
對(duì)預(yù)處理結(jié)果使用相對(duì)誤差評(píng)估:
實(shí)驗(yàn)證明,在優(yōu)化過(guò)程中采用這種遷移策略可使最后的目標(biāo)函數(shù)值下降20%~30%。
2.2.1 加入概率的遷移策略
2.1節(jié)中介紹的遷移策略可以在前期有效加速函數(shù)收斂,防止優(yōu)化陷入局部最優(yōu)解,但在函數(shù)即將收斂時(shí),頻繁的遷移可能會(huì)導(dǎo)致函數(shù)長(zhǎng)時(shí)間不收斂,當(dāng)收斂閾值設(shè)置過(guò)小時(shí)此問(wèn)題尤其明顯。
根據(jù)函數(shù)收斂的趨勢(shì)可知,在距收斂較遠(yuǎn)時(shí)通過(guò)遷移和一輪固定次數(shù)的優(yōu)化可以顯著降低目標(biāo)函數(shù)值,而即將收斂時(shí)遷移和一輪固定次數(shù)的優(yōu)化后目標(biāo)函數(shù)值往往大于遷移前的值。
由此我們?cè)O(shè)計(jì)了一個(gè)基于概率的遷移策略:設(shè)置一個(gè)變化的概率變量P,每當(dāng)固定次數(shù)的迭代完成后,按照P概率確定是否執(zhí)行遷移策略。在執(zhí)行遷移策略且結(jié)束一輪固定次數(shù)優(yōu)化后,比對(duì)遷移前的目標(biāo)函數(shù)值,若當(dāng)前值更小,則可知尚未逼近收斂,應(yīng)當(dāng)適當(dāng)擴(kuò)大P值,鼓勵(lì)更多遷移;若當(dāng)前值變大,則可知已接近收斂,則應(yīng)縮減P值,抑制遷移操作。
通過(guò)實(shí)驗(yàn)我們驗(yàn)證了概率控制遷移策略的可行性,解決了可能存在的長(zhǎng)期不收斂問(wèn)題。
2.2.2 基于多分辨率的分層優(yōu)化
多分辨率技術(shù)在計(jì)算機(jī)科學(xué)中存在廣泛應(yīng)用,如優(yōu)化中的多重網(wǎng)格技術(shù)(multi-grid method),渲染中的LoD技術(shù)等。我們將多分辨率技術(shù)引入優(yōu)化過(guò)程,使用低分辨率的密度數(shù)據(jù)優(yōu)化得到的結(jié)果為高分辨率的優(yōu)化過(guò)程提供良好的初始化,從而提高優(yōu)化效率。
首先我們將煙霧密度數(shù)據(jù)降采樣到一組從稀疏到密集的多層分辨率集合,為每層數(shù)據(jù)指定逐漸增多的RBF個(gè)數(shù)逐層優(yōu)化,并將前一層優(yōu)化結(jié)果用作后一層優(yōu)化過(guò)程的初始化,第一次優(yōu)化的初始值設(shè)置采用與2.1節(jié)中相同的隨機(jī)初始化。
由于后一層優(yōu)化過(guò)程使用的RBF個(gè)數(shù)多于前一層,不能直接使用上一層的優(yōu)化結(jié)果。在以上一層優(yōu)化結(jié)果做初始化的過(guò)程中,將本層的徑向基函數(shù)中心隨機(jī)放置在某個(gè)上層徑向基函數(shù)中心周圍(添加一個(gè)微小的擾動(dòng)),選取相似的半徑,在固定徑向基函數(shù)中心和半徑的前提下,使用類似2.1節(jié)中的優(yōu)化過(guò)程確定每個(gè)徑向基函數(shù)的權(quán)重。
圖1 RBF近似的煙霧渲染
2.2.3 加入遺傳變異的初始化
實(shí)驗(yàn)發(fā)現(xiàn),上述的方法雖然提升了預(yù)處理速度,但卻因陷入局部最優(yōu)解導(dǎo)致較大計(jì)算誤差。我們參考遺傳變異的思想,對(duì)初始化過(guò)程改進(jìn):對(duì)大部分(實(shí)驗(yàn)中使用80%)的徑向基函數(shù)做2.2.2節(jié)所述的初始化,對(duì)于剩下小部分的則做隨機(jī)初始化,以保證快速收斂的同時(shí)有足夠大的隨機(jī)性跳出局部最優(yōu)解。實(shí)驗(yàn)證明這種方法可以收獲預(yù)期的效果,解決了之前的問(wèn)題。
本文代碼主要使用CUDA語(yǔ)言實(shí)現(xiàn)于GPU端做并行計(jì)算。實(shí)驗(yàn)所用電腦配置為2.40 GHz主頻CPU,16G內(nèi)存和Nvidia Titan X顯卡。本文所使用煙霧密度數(shù)據(jù)來(lái)自物理仿真,且本文所使用的數(shù)據(jù)分辨率為128×128×128。本文代碼實(shí)現(xiàn)并非最優(yōu),但保證對(duì)比實(shí)驗(yàn)運(yùn)行于相同優(yōu)化條件。
在實(shí)時(shí)渲染過(guò)程中,我們將環(huán)境光照投影到球諧函數(shù)空間,并通過(guò)球諧函數(shù)變換高效地進(jìn)行渲染計(jì)算。其中每個(gè)RBF中心點(diǎn)的光學(xué)深度(optical depth)可以通過(guò)對(duì)單位RBF預(yù)處理所得記錄提取后旋轉(zhuǎn)、伸縮快速求得。每個(gè)RBF中心點(diǎn)的單層散射、多層散射光強(qiáng)也可以在球諧函數(shù)空間以求解線性方程組的形式快速求得。此后我們按原數(shù)據(jù)的分辨率生成光照強(qiáng)度體數(shù)據(jù)并補(bǔ)償殘差,再執(zhí)行傳統(tǒng)的光線步進(jìn)算法得到渲染結(jié)果。
我們?cè)谌鐖D1所示的兩個(gè)場(chǎng)景中分別進(jìn)行對(duì)比實(shí)驗(yàn)(本文所使用的數(shù)據(jù)均為基于物理仿真的流體控制算法生成),實(shí)驗(yàn)結(jié)果如表1、表2所示。圖1中第一行、第二行分別為場(chǎng)景1、場(chǎng)景2中抽出三幀的成像結(jié)果。從表1、表2中我們可以看出,改進(jìn)后的方法在效率和質(zhì)量上均優(yōu)于原先的方法。
表1 場(chǎng)景1對(duì)比實(shí)驗(yàn)
表2 場(chǎng)景2對(duì)比實(shí)驗(yàn)
本文將多分辨率思想應(yīng)用于基于RBF的體數(shù)據(jù)向量化方法,加入了概率控制遷移策略預(yù)防了長(zhǎng)時(shí)間不收斂的情況,遺傳變異思想防止優(yōu)化過(guò)程陷入局部最優(yōu)解。在得到相同質(zhì)量結(jié)果的前提下明顯提高了運(yùn)算效率。此方法不僅適用于補(bǔ)償光線步進(jìn)法的預(yù)處理過(guò)程,同樣適用于體紋理的向量化等包含RBF體數(shù)據(jù)向量化的方法。
本文需要用戶指定數(shù)據(jù)分離的層數(shù)及每層數(shù)據(jù)的分辨率和使用的RBF個(gè)數(shù),難以直接對(duì)其結(jié)果質(zhì)量把控,我們未來(lái)的主要工作是如何高效地自動(dòng)指定這些參數(shù),減少嘗試過(guò)程。