隨著3D動畫行業(yè)的發(fā)展,在虛擬現(xiàn)實(shí)、三維游戲等領(lǐng)域中,都用到了實(shí)時渲染技術(shù)。單渲染系統(tǒng)計(jì)算不了渲染過程中的巨大數(shù)據(jù)量,如果想實(shí)現(xiàn)對3D場景的實(shí)時渲染,最好采用分布式渲染系統(tǒng)。而在一般的分布式渲染系統(tǒng)中,不需要考慮對場景的優(yōu)化,因此同一場景在不同的系統(tǒng)當(dāng)中會渲染出一樣的效果。而分布式實(shí)時渲染系統(tǒng)則與之不同,要想達(dá)到好的實(shí)時渲染效果,就要采取一定技術(shù)進(jìn)行場景優(yōu)化,以降低計(jì)算量,提升渲染效率與質(zhì)量。

一、并行算法sort-first

根據(jù)在物象的轉(zhuǎn)換過程中,拆分渲染任務(wù)的位置不同,可將并行渲染系統(tǒng)分為三種。sort-first是在幾何變換之前就重新分配圖元;sort-middle算法對屏幕空間的幾何元素重新分配是在幾何變換與光柵化間進(jìn)行;sort-last則是在光柵化的最后重新對像素進(jìn)行分配。
sort-first是比較常見的一種并行算法,它首先將要輸出的圖像劃分成為多個不重疊的區(qū)域,每塊區(qū)域由它專門的渲染節(jié)點(diǎn)負(fù)責(zé)渲染,也就是要預(yù)分配每條流水線的渲染任務(wù)。在這種架構(gòu)中,每一個渲染節(jié)點(diǎn)都相當(dāng)于一條完整的渲染流水線,不需要在幾何變換和光柵化過程中傳遞幾何信息,也不用在最終進(jìn)行深度信息的合并。
首先在分布圖元時,需要計(jì)算圖元覆蓋的區(qū)域,這種計(jì)算被稱為“預(yù)變換”。然后對分配好的各圖元進(jìn)行幾何處理和光柵化操作。最后將渲染好的子圖像拼接為最終圖像。

newsview0185_1.jpg

Sort-first算法

二、場景優(yōu)化

在實(shí)時渲染過程中,對場景進(jìn)行優(yōu)化,降低場景的復(fù)雜程度,可以有效提高渲染效率。本文選擇的是Level of Detail (LOD)細(xì)節(jié)層次模型。
LOD算法主要是根據(jù)三維場景中的物體的清晰度不同,生成多個具有不同層次細(xì)節(jié)的版本,從而實(shí)現(xiàn)對清晰度分層管理的目的。在實(shí)時渲染的進(jìn)程中,依據(jù)試點(diǎn)不同,選取合適的LOD模型,可以在不損傷細(xì)節(jié)的前提下,降低場景復(fù)雜程度,提高渲染速度,并加快場景的顯示速率。
為降低場景的復(fù)雜程度,首先利用八叉樹算法對三維場景進(jìn)行分析與管理。接著針對不同物體,以及不同需求,選擇合適的LOD模型,例如剔除法,即找到場景中觀察者無論如何都看不到的圖元,并將其剔除,以加快渲染速度。另一種方法是根據(jù)觀察者與場景中物體的距離進(jìn)行選擇,距離遠(yuǎn)的可以采用比較粗糙的細(xì)節(jié)層次。還可以依據(jù)物體的運(yùn)動速度選出適應(yīng)的模型,運(yùn)動較快的物體,在屏幕上顯示的細(xì)節(jié)比較模糊,可以使用較粗糙的細(xì)節(jié)層次表現(xiàn)出來。

三、實(shí)時光線追蹤

在計(jì)算機(jī)圖形學(xué)領(lǐng)域里,光線追蹤是十分經(jīng)典的算法。光線跟蹤的過程就是通過對現(xiàn)實(shí)世界當(dāng)中的成像原理進(jìn)行模擬,從而對每像素著色的過程。在光線追蹤過程中,主要考慮光線傳遞的方法、中止位置以及光線所得的著色值等問題。當(dāng)光照射到物體表面時,會產(chǎn)生光的反射、折射、吸收及透射等等現(xiàn)象,要想處理所有狀況,就要選出合適的光照模型。我們可以選用簡單光照模型,即Phong光照模型來簡化問題。該光照模型可以依據(jù)物體的材質(zhì),在場景及物體交匯的交點(diǎn)處計(jì)算出鏡面反射(specular)值和漫反射(diffuse)值,從而確定著色值。
傳統(tǒng)的光線跟蹤方案只能通過串行的方式解決光線產(chǎn)生、光線和場景的碰撞檢測等問題。由于光線追蹤的過程當(dāng)中,不需要考慮像素間的依賴問題,因此可以利用這一特性,設(shè)計(jì)一種并行的光線追蹤方案,其中初始參數(shù)包含觀察方向、視角等,并利用這些參數(shù)生成初始光線。

newsview0185_2.jpg

并行的光線追蹤算法結(jié)構(gòu)

并行光線跟蹤的實(shí)現(xiàn)主要由以下幾個部分組成:
1) 針對光線的產(chǎn)生問題,對每個光線都生成相對獨(dú)立的基本參數(shù)。
2) 針對光線與場景碰撞檢測問題,因?yàn)樵诠饩著色的過程中,像素之間沒有依賴關(guān)系,所以對每一條光線可以進(jìn)行并行地著色化。
實(shí)現(xiàn)以上算法后,可以針對不同的需要對細(xì)節(jié)進(jìn)行再度優(yōu)化,從而提升算法執(zhí)行的效率。例如:在創(chuàng)建KD-Tree的時候,可以先使用均勻分割的方式,直到三角形數(shù)目達(dá)到規(guī)定數(shù)目后再利用最優(yōu)面的分割方式,通過這種方案可以有效地提高創(chuàng)建KD-Tree的效率。我們還可以把場景當(dāng)中的一些原始幾何數(shù)據(jù)、KD-Tree等信息進(jìn)行分類,并存儲于不同的紋理之中。通過這種方案不僅可以利用數(shù)據(jù)的打包存放減少對同種數(shù)據(jù)資源的重復(fù)訪問,還可以利用紋理提供的虛擬緩存,從而降低了數(shù)據(jù)訪問的延遲,提升了訪問效率。
使用這種光線追蹤方案對場景進(jìn)行渲染,渲染結(jié)果如下圖所示。

newsview0185_3.jpg

人物模型渲染結(jié)果

newsview0185_4.jpg

場景渲染結(jié)果

通過對渲染結(jié)果分析可知,使用這種實(shí)時光線追蹤算法,可以有效地提高渲染的質(zhì)量,使場景更富真實(shí)感,從而達(dá)到更好的實(shí)時渲染效果。
利用這些技術(shù),可以有效降低渲染時長,加快圖像顯示速率,達(dá)到更好的實(shí)時渲染效果。