柏靖云
(四川大學計算機學院,成都 610065)
隨著計算機技術(shù)的快速發(fā)展和圖形硬件的更新?lián)Q代,計算機圖形學正以令人驚嘆的速度發(fā)展著,作為圖形學中的一個重要組成部分,自然景觀的模擬也廣泛應(yīng)用到了各個領(lǐng)域,而這其中,對于云的繪制也受到了越來越多的關(guān)注?,F(xiàn)今在影視特效、多媒體廣告、游戲場景等多個領(lǐng)域都需要對云進行模擬。繪制出真實自然的云場景,可以很大程度上提高畫面質(zhì)量,帶給人強烈的真實感。然而云有著極不規(guī)則的形狀和不規(guī)律的變化,云內(nèi)部的光照過程也十分復雜,要完整地將這些表現(xiàn)出來非常困難,而且需要很大的開銷。如何用較高的效率繪制出具有較強真實感的積云場景,一直是相關(guān)研究學者們非常關(guān)注的問題之一。
云的繪制可大致分為建模和渲染兩個部分,建模部分需要構(gòu)造出云的形狀密度模型,渲染部分則根據(jù)云的密度,采用特定的光照算法計算出云的顏色,并最終將云在屏幕上顯示出來。本文采用兩種方法分別對云進行繪制,方法一將云視為是由多個球形云粒子堆積而成的,通過繪制粒子來對云進行建模,同時采用預計算的方式,將云粒子的多重散射光照結(jié)果存入查找表中(look-up table),在實時渲染時直接到相應(yīng)的紋理中采樣,即可獲得光照數(shù)據(jù),省去了光照計算過程。方法二通過噪聲紋理來獲取云的密度,再對噪聲值進行一系列的分布、高度處理后,最終得到云的密度場,即云的模型。使用以比爾定律為基礎(chǔ)的光照方程計算云的顏色,最后采用ray marching的方式對云進行繪制。
圖1
當光在云中傳播時,云粒子會對光產(chǎn)生散射作用。如圖1所示,對于云粒子中任意一點P,在視點C所看到的P點的最終光照是經(jīng)過了QP與P0P兩段衰減的。假設(shè)最初的太陽光光照總量為L,經(jīng)過一次散射后的光照為L',L與L'的關(guān)系如公式(1)所示:
e-τ(Q,P)和e-τ(P0,P)分別為 QP 之間與 P0P 之間的散射衰減系數(shù)。公式(1)描述了太陽光在云粒子中發(fā)生單散射的過程,而實際上,光在粒子內(nèi)部會經(jīng)歷很多次散射,到達P點的光也不只有初始太陽光L,還有粒子中其他點散射到P點的光,因此,為了更加真實地模擬云的光照效果,需要構(gòu)建多重散射的光照模型。
圖2
在多重散射中,P點的光照由P點周圍各個方向上經(jīng)過散射后最終到達P點的光組成。如圖2所示,P點在方向的入射光為,將θ從 0 取到 2π時的所有L(P)相加,即為 P點的入射光總量,如公式(2)所示。將入射光乘以P0P之間的散射系數(shù),再對P0P1間所有點的光照結(jié)果進行積分,就可以得到視點位置為C、視線方向為時的光照顏色,如公式(3)所示。
在計算過程中,本文采用對單散射結(jié)果進行迭代的方法來得到多重散射數(shù)據(jù)。先使用單散射方式得到一階散射結(jié)果L(1)(P,),然后根據(jù)L(1)(P,)可計算出J(2)(P),再依據(jù)公式(3)可得到L(2)(C,),而此時得到的二階散射結(jié)果可用于計算下一次的散射L(2)(P,),依此類推,在經(jīng)過n次迭代之后,就可以得到n階散射結(jié)果L(n)(C,),再將n階結(jié)果相加,即為最終的多重散射光照,如公式(4)、(5)、(6)所示:
在本文所采用的算法中,多重散射結(jié)果為18階散射數(shù)據(jù)之和,如果讓18次迭代過程全部在渲染中進行,則會嚴重影響程序的效率,完全無法達到實時的效果。因此本文使用預計算的方法來避免這一問題,在渲染云粒子之前先計算光照,然后將計算結(jié)果存入查找表中,查找表為一張三維紋理,渲染時,根據(jù)粒子的位置和視線方向等參數(shù)可直接從查找表中讀取光照數(shù)據(jù)。
本文實現(xiàn)的第一種方法是通過構(gòu)造成千上萬的云粒子,根據(jù)相應(yīng)的算法使其堆積成云團的形狀,再將粒子繪制出來。如圖3所示,以視點為中心,構(gòu)造xz平面的二維網(wǎng)格,每一層網(wǎng)格的大小都是上一層網(wǎng)格的二倍。將密度紋理平鋪在網(wǎng)格上,達到一定密度值的網(wǎng)格視為有效網(wǎng)格,通過視錐體確定哪些網(wǎng)格在視線范圍內(nèi),得到二維的有效可視網(wǎng)格。
圖3
得到二維網(wǎng)格后,將其縱向延伸成三維網(wǎng)格,三維網(wǎng)格中每個體素的密度由其原本對應(yīng)的平面網(wǎng)格進行一定的噪聲擾動得到,同時令體素密度隨著層數(shù)的上升而遞減,以此可獲得下寬上窄的積云形狀。在三維網(wǎng)格結(jié)構(gòu)中,每一個有效可視的體素均含有一個云粒子,粒子的大小、密度、中心位置等屬性由網(wǎng)格的相應(yīng)屬性計算得到。生成粒子后,將粒子根據(jù)與視點的距離排序,按照由遠及近的順序進行渲染。
此種方法在渲染時使用到了渲染管線中的幾何著色器,由頂點著色器將粒子位置傳送給幾何著色器,幾何著色器以此為中心,根據(jù)粒子大?。窗霃剑┥梢粋€正方體粒子包圍盒。幾何著色器發(fā)射八個頂點傳送給片元著色器,片元著色器判斷視線與包圍盒的交點,如相交,則到光照查找表中獲取多重散射系數(shù),將粒子繪制到屏幕上。
本文實現(xiàn)的第二種方法是以柏林(Perlin)噪聲和沃利(Worley)噪聲為基礎(chǔ)的。構(gòu)建云的密度場需要兩張三維紋理,這兩張三維紋理中共包含了八張噪聲紋理信息。紋理一的分辨率為128×128×128,如圖4所示,其r通道為柏林噪聲,gba三個通道為三張頻率依次升高的沃利噪聲。紋理二的分辨率為32×32×32,如圖5所示,RGBA四個通道分別為四張頻率依次升高的沃利噪聲。紋理一用于得到云的基本形狀,紋理二用于給紋理一得到的結(jié)果添加細節(jié)。得到云密度后,再通過分布紋理對其進行細化,添加高度控制函數(shù)和動態(tài)變化函數(shù),使云層分布隨著海拔升高而減少,同時產(chǎn)生隨著一定風向飄動的動態(tài)效果。
圖4
圖5
此方法的光照計算以beer定律為基礎(chǔ),如公式(7)所示,比爾定律描述了光在不均勻介質(zhì)中傳播時的衰減過程,光照隨著云的密度的增加成指數(shù)遞減。
通過比爾定律可以計算出光的衰減,但光在云中傳播時不止發(fā)生衰減,還會在云的內(nèi)部產(chǎn)生復雜的散射,如果只計算衰減部分,那么我們將無法得到云表面的不規(guī)則的波浪狀的細節(jié),因此除比爾定律外,還需要添加內(nèi)散射函數(shù)來描述光的散射過程,如公式(8)所示:
當光在諸如積云這類由細小微粒組成的介質(zhì)中傳播時,被散射到貼近光線傳播方向部分的光線要多于被散射到背離光線傳播方向的光線,如圖6所示,這是光在云中所發(fā)生的前向散射。1941年,Heyey和Greenstein提出了H-G相位函數(shù)來對這一特性進行描述,如公式(9)所示,本文采用了這一方法,g的取值為0.2,θ為光纖與視線的夾角。
圖6
本文采用ray marching的方法進行繪制。求出每一條視線與云層的交點,設(shè)定相應(yīng)的步長,在兩個交點之間選取采樣點,得到每個采樣點的世界坐標,從噪聲紋理和分布紋理中查找出相應(yīng)數(shù)據(jù),經(jīng)過上述一系列操作,得到該點的密度值,再將密度值代入到光照模型中,即可計算得出該點的光照顏色,最后將視線上每個采樣點的顏色進行混合,就是該片元的最終渲染結(jié)果。
圖7
如圖7所示,圖a為三維網(wǎng)格球形粒子建模方法的結(jié)果,圖b為基于噪聲紋理采樣方法的結(jié)果。球形粒子建模方法的結(jié)果可看出云的層次結(jié)構(gòu)更為明顯,云由多層粒子堆積而成,且距頂端越近粒子越少,云也就越窄。噪聲紋理采樣的結(jié)果層次感不如球形粒子建模,但是更好地模擬出了云的細碎且不規(guī)則的邊界,在這一點上更具有真實感。
圖8為當視點處于云層之上時,俯視角度下的結(jié)果。這里可以看出球形粒子建模方法的劣勢,俯視時效果接近于平面,這與現(xiàn)實中的云的效果是差別很大的,而噪聲采樣的結(jié)果要更加貼近真實,俯視時此種方法在云的表面細節(jié)上所具有的優(yōu)勢更加明顯。
圖8
圖9
圖9為視點處于云中時,即穿云時的結(jié)果。球形粒子建??梢郧逦闯龇植荚谝朁c兩層的云,而噪聲紋理采樣的結(jié)果則更能給人以深處云層之中的感覺。
通過以上對比可看出,當視點位于云層下方時,球形粒子建模方法得到的效果更好,這種情況下一般視點距離云較遠,因此對邊界細節(jié)的要求不高,云整體的分布和層次感更為重要。而當視點處于云層中間或云層之上時,則時噪聲紋理采樣的結(jié)果更加具有真實感,此時視點離云比較近,因此需要模擬出云的邊界細節(jié)。在實際應(yīng)用中,應(yīng)根據(jù)應(yīng)用的情況選擇更為適合的方法。
本文實現(xiàn)了兩種動態(tài)積云繪制算法,并對其效果進行了比較。球形粒子建模結(jié)合預計算光照渲染的算法得到的積云更具與層次感,整體形狀更接近現(xiàn)實中的云;噪聲紋理采樣結(jié)合beer定律光照模型得到的積云擁有更加豐富真實外觀細節(jié),適用于當視點離云層很近的穿云或俯視效果。
本文所實現(xiàn)的兩種方法在最終渲染時的混合上都還有可提升的空間,粒子建模方法中最中前后粒子的混合與噪聲采樣方法中各采樣點顏色的混合,目前都是采用比較基礎(chǔ)簡單的混合方法,還可以對混合方式進行改進以便獲得更為逼真的效果。
參考文獻:
[1]Ament M,Sadlo F,Weiskopf D.Ambient Volume Scattering[J].IEEE Trans.Vis.Compute.Graph,2013.
[2]Bruneton E,Neyret M.Precomputd Atmospheric Scattering[J].Compute.Graph,2008.
[3]K Perlin.An Image Synthesizer[C].New York:Proceedings of the 12th Annual Conference on Computer Graphics and Interactive Techniques,1985.
[4]LosaSSO F,Hoppe H.Terrain Rendering Using Nested Regular Grids[J].ACM trans.Graph,2004.