基于体素的全局光照技术
基于預(yù)計(jì)算的實(shí)時(shí)渲染方法,這些方法的核心是使用低階的球諧(或小波)函數(shù)來表述某個(gè)低頻的方向分布函數(shù),例如環(huán)境貼圖和大面積光源,由于這些方向分布函數(shù)可以使用少量的球諧函數(shù)系數(shù)來近似,這使得實(shí)時(shí)的間接光照計(jì)算被大大加速。然而這些方法的限制也非常明顯,他們只能處理場(chǎng)景的靜態(tài)部分,并且它們只能處理方向分布函數(shù)的低頻部分。
下面我們介紹兩種能夠處理動(dòng)態(tài)場(chǎng)景的實(shí)時(shí)渲染方法,即本章基于體素的全局光照算法和下一章基于距離場(chǎng)的全局光照算法。
全局光照的計(jì)算量非常大,這主要有兩個(gè)原因:首先,它需要計(jì)算3D場(chǎng)景當(dāng)中任意兩個(gè)點(diǎn)之間的可見性,這種可見性判斷對(duì)于基于光柵化的實(shí)時(shí)渲染流程更加復(fù)雜,光柵化擅長(zhǎng)于每次處理一個(gè)視圖,它通常并不能直接計(jì)算出任意兩點(diǎn)之間的可見性,因此這就是為什么光柵化通常只計(jì)算直接光照,而更復(fù)雜的間接光照(即全局光照)留給其他一些近似方法(比如預(yù)計(jì)算的方法);其次,表面上每個(gè)點(diǎn)的光照計(jì)算涉及對(duì)表面法線方向上半空間范圍內(nèi)所有方向的積分計(jì)算,這個(gè)積分計(jì)算已經(jīng)被證明是非常復(fù)雜,以至于目前還不能用于實(shí)時(shí)計(jì)算。
在本書前面介紹的大部分光照技術(shù)中,我們都使用三角形等曲面作為基元(primitives)來表述物體的表面,這種表述的細(xì)節(jié)層次(level of details)被存儲(chǔ)在紋理當(dāng)中,在進(jìn)行著色的時(shí)候,我們需要首先找到光線與之相交的物體,然后選擇該物體表面對(duì)應(yīng)細(xì)節(jié)層次的多級(jí)紋理進(jìn)行著色計(jì)算。[Crassian et al. 2009]說明,使用體積數(shù)據(jù)作為幾何基元來表述物體表面,這種數(shù)據(jù)結(jié)構(gòu)能夠更高效地計(jì)算著色需要的細(xì)節(jié)層次。隨后[Crassian et al. 2011]提出了體積圓錐體追蹤(voxel cone tracing)的概念,在這種方法中,場(chǎng)景中的網(wǎng)格數(shù)據(jù)被近似為一個(gè)階層式的體素八叉樹結(jié)構(gòu),這個(gè)八叉樹結(jié)構(gòu)可以同時(shí)用于加速可見性和光照的計(jì)算,通過對(duì)該體積結(jié)構(gòu)執(zhí)行類似多級(jí)紋理的預(yù)過濾,圍繞多個(gè)方向的光照積分計(jì)算被大大加速。
基于體素的全局光照技術(shù)是一種非常優(yōu)雅的光照技術(shù),自從被提出之后,它已經(jīng)被大量的游戲引擎采用,例如它最先被集成進(jìn)了虛幻引擎,此外,該技術(shù)也已經(jīng)被集成進(jìn)了CryEngine3中。
11.1 圓錐體內(nèi)的光線追蹤
在開始正式介紹基于體素的全局光照技術(shù)之前,我們需要了解一個(gè)該技術(shù)基于的一個(gè)核心概念,即圓錐體追蹤(cone tracing)。
實(shí)際上,圓錐體追蹤早至1984年已經(jīng)被提出,如今它被廣泛用于一些基于體積基元結(jié)構(gòu)的場(chǎng)景表述中,例如本章介紹的基于體素的全局光照技術(shù)和下一章介紹的基于距離場(chǎng)的全局光照技術(shù)。由于圓錐體追蹤是這兩種全局光照技術(shù)的核心,本節(jié)就先來了解圓錐體追蹤的該概念。
11.1.1 光線追蹤的問題
圓錐體追蹤是由光線追蹤演變而來的,在光線追蹤中,一條光線從攝像機(jī)發(fā)出,穿過虛擬屏幕上某個(gè)像素的中心進(jìn)入到場(chǎng)景當(dāng)中,如圖所示,一旦該光線離開這個(gè)像素,它與該像素的任何聯(lián)系都因此而消失,因此光線僅僅被定義為由一個(gè)起點(diǎn)和一個(gè)方向組成的一條直線。這種簡(jiǎn)單的定義使得光線與任意物體的相交計(jì)算變得非常直觀,然而它也有缺點(diǎn)。
上述關(guān)于光線的定義的主要問題在于,每個(gè)像素對(duì)應(yīng)相關(guān)的所有光線沒有保留足夠的信息去執(zhí)行反走樣(anti-aliasing),每條光線僅僅允許我們?cè)谝粋€(gè)像素的面積范圍內(nèi)采樣得到一個(gè)位置,但是它不知道關(guān)于這個(gè)采樣點(diǎn)周圍相鄰的任意位置的信息,例如這些位置是否可見,在多大面積內(nèi)采樣是足夠等。
在標(biāo)準(zhǔn)的光線追蹤中,其唯一能夠?qū)崿F(xiàn)反走樣的方法是使用更高的分辨率進(jìn)行采樣,例如[Whitted, 1979a]提出了適應(yīng)性采樣。但是這種超采樣技術(shù)存在一些問題,首先是那些方差較大的像素對(duì)應(yīng)的光線數(shù)量會(huì)急劇地增長(zhǎng);其次,一些較小的細(xì)節(jié)可能被這些樣本所忽略。
一種能夠應(yīng)對(duì)上述采樣問題的方法是修改上述關(guān)于“光線”的定義為一個(gè)“圓錐體”。如圖11.1(b)所示,此時(shí)一個(gè)“像素”表述的是屏幕上的一個(gè)“面積”而不是一個(gè)“點(diǎn)”,這種擴(kuò)展的“光線”(即圓錐)與物體的相交計(jì)算不僅能夠決定該光線與某物體的相交測(cè)試是否發(fā)生,并且還能決定該“光線”的多少部分與該物體相交。這種部分覆蓋信息足夠針對(duì)面積執(zhí)行簡(jiǎn)單的反走樣,同時(shí),一個(gè)像素內(nèi)的任意細(xì)節(jié)都不會(huì)被忽略。
總結(jié)
以上是生活随笔為你收集整理的基于体素的全局光照技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT5.12安装图文教程与安装成功后环境
- 下一篇: DMTF Redfish 概念介绍