謝永華,李 平,寇小勇
(南京信息工程大學(xué) 計(jì)算機(jī)與軟件學(xué)院,南京 210044)
云的實(shí)時(shí)模擬是計(jì)算機(jī)圖形學(xué)領(lǐng)域的研究熱點(diǎn)和難題.近年來,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,云的建模理論及其真實(shí)感圖形生成方法的研究已成為可視化技術(shù)研究的重要方向之一,在虛擬戰(zhàn)場、圖形可視化、飛行模擬和計(jì)算機(jī)游戲中有著極其重要的應(yīng)用前景[1].由于云本身具有不規(guī)則的模糊邊界,整體具有不光滑性,以及運(yùn)動(dòng)的多變性,所有這些特征使得它們很難被計(jì)算機(jī)模擬,因此人們也不能夠用準(zhǔn)確的模型去描述它.
在計(jì)算機(jī)上進(jìn)行云模擬時(shí),真實(shí)云的自身特性和變化規(guī)律是最主要的模擬結(jié)果.云模擬過程主要包括建模和渲染兩個(gè)方面.在建模方面,為了得到逼真的效果,研究學(xué)者們提出很多種建模方法,并取得了豐富的研究成果,主要分為兩類:一種是啟發(fā)式建模,如文獻(xiàn)[2]采用隱函數(shù)定義云的密度場,以及添加過程噪聲來使結(jié)果更具有真實(shí)感;文獻(xiàn)[3]提出了一種新的云建模方法—分形粒子法,在分形粒子法中,采用了基于結(jié)構(gòu)自相似性的簡化算法,同時(shí)添加陰影效果以增強(qiáng)三維云模型;文獻(xiàn)[4]則是通過在網(wǎng)格上以低分辨率來求解動(dòng)態(tài)云的方程組獲得其速度場,再通過速度場漂移噪聲紋理的方法來增加云的表面細(xì)節(jié).這些方法利用程序化紋理或紋理化幾何表面作為云建?;?并未能直接研究云形成背后的物理模型.另一種是物理式的建模.如Seok Yoon Kang和Ki-Il Kim等人[5]提出的L-system方法來構(gòu)建多樣三維云,L-system通過系統(tǒng)遞歸的方式提供了較低的復(fù)雜度和可擴(kuò)展性,在繪制和渲染中起到更好的平衡作用.Duarte,Rui P.M.提出了一種基于SkewT/LogP圖的實(shí)時(shí)云仿真方法來克服云形狀與動(dòng)態(tài)性能問題[6].唐勇等人[7]提出,在三維網(wǎng)格中賦予云等相關(guān)物理屬性,利用N-S方程描述云的運(yùn)動(dòng),加入粘性項(xiàng)和漩渦性,能夠更真實(shí)表現(xiàn)云的湍流效果.這些方法在算法或者模擬空間上與真實(shí)云場景的形成過程存在一定的差異.
在渲染方面,研究者們探討了光線傳播過程,提出較多簡化的云渲染模型.Haoran Guo等人[8]通過以人眼為視點(diǎn),引入了兩步驟散射模型來模擬大氣中云實(shí)際的光強(qiáng);Kaijiya等人[9]利用多重正向散射計(jì)算每個(gè)粒子的入射顏色,并且利用一階散射確定觀察者的入射顏色;Dobashi和Nishita等人[10]提出了由閃電照射的云和大氣粒子引起的散射效應(yīng)來創(chuàng)建云場景,可以有效增強(qiáng)結(jié)果的真實(shí)感;Ksenia Mukhina和Alexey Bezgodov[11]采用Perez方法以及一天中的時(shí)間來計(jì)算整個(gè)天空的顏色,可獲得平滑過渡自然的天空.這些方法在繪制方面需要進(jìn)一步加速仿真速度,以及控制云粒子量來提高計(jì)算量.
針對以上問題,本文對于云形成、運(yùn)動(dòng)到消失的漸變過程這一動(dòng)態(tài)特性效果不顯著的情況下,根據(jù)粒子位置、云團(tuán)中不透明度值變換,添加云消散函數(shù)來逼真模擬云消失效果.為了在渲染上降低計(jì)算量,提出利用LOD抽稀采樣操作,降低內(nèi)存的消耗、提高繪制速度.實(shí)驗(yàn)結(jié)果體現(xiàn)了本文方法的可行性.
粒子系統(tǒng)思想是把物體作為大量不規(guī)則粒子,且隨機(jī)分布.每個(gè)粒子都有自己的屬性,有外型、空間坐標(biāo)、運(yùn)動(dòng)速度等,通過隨機(jī)函數(shù)來展示物體的運(yùn)動(dòng)情況.對于云團(tuán)中心密度濃厚,邊界稀疏的特點(diǎn),建立云團(tuán)模型,假設(shè)云團(tuán)中心坐標(biāo)為(ai,bi,ci),云團(tuán)半徑為R,云團(tuán)粒子位置分布如式(1)所示:
Cloudi.X=a+Random(i)*R*sin(φ)*cos(φ)
Cloudi.Y=b+Random(i)*R*cos(φ)
Cloudi.Z=c+Random(i)*R*sin(φ)*sin(φ)
(1)
其中:φ為云團(tuán)中心到云位置粒子矢量與云團(tuán)所在局部坐標(biāo)系中y軸的夾角,φ為與x軸的夾角,Random(i)為隨機(jī)分布函數(shù),由此來模擬不同形狀的云團(tuán).
單個(gè)粒子經(jīng)歷產(chǎn)生,發(fā)展,消亡三個(gè)階段,但是粒子在消亡過程的同時(shí)又有新的粒子產(chǎn)生,不斷進(jìn)行粒子更迭的操作,建模過程是云團(tuán)生成過程,并沒有云團(tuán)生成之后逐漸消失的過程[12].為此,本文在消亡過程中添加消散函數(shù),讓云團(tuán)消失過程貼近自然.
Nnum=Nframe+rand()*Nmax
(2)
(3)
通常情況下,粒子的生成是由隨機(jī)函數(shù)實(shí)現(xiàn)的,這些由隨機(jī)函數(shù)實(shí)現(xiàn)的每一幀粒子數(shù),如式(2)所示,Nnum是每幀中生成的粒子數(shù),Nframe是上一幀中生成的粒子數(shù),Nmax為粒子變化的最大值,最大值可以讓云團(tuán)量進(jìn)行快速增長趨勢,隨機(jī)數(shù)rand()范圍為(0,1).那么對于粒子的產(chǎn)生是否為云粒子,我們做了如下判斷:將隨機(jī)產(chǎn)生的粒子與云團(tuán)中心坐標(biāo)進(jìn)行距離比較,隨機(jī)生成的粒子Ps的坐標(biāo)設(shè)為(x,y,z),將Ps的坐標(biāo)帶入球的方程中,只要小于等于半徑則包含在球內(nèi),即為云粒子;否則,將隨機(jī)生成的粒子ps刪除,如式(3)所示.
通過云的物理組成原理可知,云團(tuán)由無數(shù)的水滴和冰晶組成.在粒子系統(tǒng)中,每個(gè)水滴和冰晶都可以被看做是粒子,所以在產(chǎn)生云粒子的同時(shí),需要對這些粒子的相關(guān)屬性進(jìn)行相應(yīng)的初始化,最后根據(jù)WRF數(shù)據(jù)來填充三維云.
本文在模擬真實(shí)感三維云消散過程,若數(shù)目較少則不能實(shí)現(xiàn)真實(shí)感,反之則會(huì)使系統(tǒng)的處理時(shí)間增多,不能滿足實(shí)時(shí)性.因此要保證足夠的云團(tuán)量,也就是粒子系統(tǒng)總數(shù)目.云團(tuán)數(shù)量表示如下:
當(dāng)時(shí)間t=0到t=tv時(shí),此時(shí)每幀的云團(tuán)量表示是式(2),那么云團(tuán)達(dá)到飽和狀態(tài)時(shí)的云團(tuán)量為Ns,如式(4)所示:
Ns=Nframe+Nmax
(4)
對于云團(tuán)成形后,它的云團(tuán)量就是一個(gè)緩慢增長的趨勢,所以每幀粒子變化值由Nmax變?yōu)镹min.當(dāng)時(shí)間t=tv+i到t=te,云團(tuán)量如式(5)所示:
Nsnum=Nframe+rand()*Nmin
(5)
其中:Nsnum是達(dá)到云團(tuán)飽和狀態(tài)下之后進(jìn)行的緩慢變換過程,Nmin為每幀粒子變化的最小值,tv是云團(tuán)達(dá)到飽和狀態(tài)的時(shí)間,te則是云團(tuán)子生成到消散的總時(shí)間.
為了提高云團(tuán)繪制速率,粒子體積的選擇則會(huì)顯得尤為重要.當(dāng)觀察點(diǎn)距離云團(tuán)中心較遠(yuǎn)時(shí),視點(diǎn)對云團(tuán)反應(yīng)不夠靈敏,此時(shí)需要體積較大的粒子,相反,則需要體積較小的粒子.
如圖1所示,橫軸為云團(tuán)自生成之后的時(shí)間變化,縱軸為云團(tuán)量變化多少.在時(shí)間為0到tv之間,是云團(tuán)生成過程;在時(shí)間tv和tv+i之間,是云團(tuán)量達(dá)到飽和狀態(tài)情況下的微小變化;在時(shí)間tv和tv+i之間,則是表現(xiàn)云團(tuán)消散的過程.
圖1 云團(tuán)量變化趨勢Fig.1 Trend of cloud number change
云團(tuán)密度分布大都是中間濃厚且不透明度值大,邊緣稀薄且不透明度值小.所以云團(tuán)消散過程是從不透明度值小的地方開始,逐漸轉(zhuǎn)向不透明度值大的地方.由于在云團(tuán)消散的同時(shí),依舊存在新舊粒子更替變化,所以云團(tuán)的消散函數(shù)如式(6)所示:
Nsnum=Nfext+rand(a)*Nmin-rand(b)*Next
(6)
其中:Nfext是上一幀消散后的粒子數(shù),rand(a)和rand(b)是同一幀產(chǎn)生的兩個(gè)不同的隨機(jī)數(shù),范圍為(0,1),Next是每一幀消失的最大粒子量.圖2依據(jù)每一幀的變化,演變云團(tuán)緩慢的具體變換過程.
圖2 云粒子消散過程Fig.2 Cloud particle dissipation process
傳統(tǒng)的光線投射算法能夠?qū)崿F(xiàn)優(yōu)質(zhì)的圖形界面,但是存儲(chǔ)數(shù)據(jù)的方式不是以物理的順序進(jìn)行,當(dāng)存儲(chǔ)的數(shù)據(jù)量很大時(shí)會(huì)導(dǎo)致內(nèi)存開銷大,因此需要對生成的云粒子進(jìn)行采樣優(yōu)化,對粒子采樣點(diǎn)選取不當(dāng)會(huì)帶來云圖的網(wǎng)格狀現(xiàn)象.
常用的采樣方式有傳統(tǒng)采樣方式和重要性采樣方式.傳統(tǒng)的均勻采樣依賴于更多數(shù)據(jù),會(huì)導(dǎo)致計(jì)算量變大,不能達(dá)到大規(guī)模實(shí)時(shí)云渲染;通過引入重要性采樣可減少仿真數(shù)據(jù),在較短時(shí)間內(nèi)能夠達(dá)到理想的仿真效果,但在選取采樣點(diǎn)時(shí)沒有體現(xiàn)細(xì)節(jié)層次感.
圖3 三種采樣點(diǎn)選取方式Fig.3 Three sampling point selection methods
為此,本文利用等間距抽稀的方法來進(jìn)行采樣點(diǎn)優(yōu)化,并對采樣好的點(diǎn)存儲(chǔ)到八叉樹中,如圖3所示.如圖3(c),在沒有被大圓圈圈住的一些點(diǎn)中,我們選取帶小圓圈的點(diǎn),也就是每隔奇數(shù)個(gè)點(diǎn)進(jìn)行選取,即抽稀間距為奇數(shù);在大圓圈里面,我們依舊選取帶有小圓圈的點(diǎn),每隔偶數(shù)個(gè)點(diǎn)進(jìn)行采樣,即抽稀間距為偶數(shù).本方法中抽稀間距值大小的設(shè)定由云團(tuán)數(shù)量來決定.
本文對采樣點(diǎn)選取的方式是,在貢獻(xiàn)量多的地方表示需要多采樣一些點(diǎn),而貢獻(xiàn)量小的地方則相反.使用本文采樣點(diǎn)方式,既可以使重要區(qū)域達(dá)到很好的渲染,也能將邊緣區(qū)域或是稀少區(qū)域看起來更平滑.
光線投射基本思路為:順著觀察點(diǎn)到采樣點(diǎn)的方向?qū)D像進(jìn)行采樣,對于出現(xiàn)在光線中的每個(gè)云粒子,將它們的顏色值與不透明度值依次進(jìn)行累加,直至光線穿越整個(gè)圖像,那么呈現(xiàn)在屏幕上的顏色值就是光線渲染的顏色,如式(7)所示:
(7)
獲得采樣點(diǎn)之后,本文采用由前向后的圖像合成對采樣點(diǎn)的像素值進(jìn)行累加.其中:Cnow表示當(dāng)前體元的顏色值,αnow表示當(dāng)前體元的不透明度值,進(jìn)入當(dāng)前體元時(shí)的顏色值為Cin,不透明度值為αin,穿過體元后的顏色值為Cout,不透明度值為αout.
在渲染三維云時(shí),本文用到了八叉樹與LOD方法結(jié)合的方式,實(shí)現(xiàn)高效繪制云圖的效果,具體流程為:
1)把連接觀察點(diǎn)和屏幕像素的矢量作為光線投射至云團(tuán)中的方向;
2)由初始位置和結(jié)束位置來計(jì)算云團(tuán)的深度;
3)利用八叉樹數(shù)據(jù)結(jié)構(gòu)對包圍盒進(jìn)行分層,并開始采樣點(diǎn)的獲取;
4)對于貢獻(xiàn)多的區(qū)域,本文以等間距抽稀為奇數(shù)的標(biāo)準(zhǔn),進(jìn)行采樣;
5)對于貢獻(xiàn)少的區(qū)域,本文以等間距抽稀為偶數(shù)的標(biāo)準(zhǔn),進(jìn)行采樣;
6)將獲取到的采樣點(diǎn)先存儲(chǔ)到八叉樹結(jié)構(gòu)中;
7)對采樣點(diǎn)的像素值和不透明度值進(jìn)行循環(huán)并累加,在累加過程中,若不透明度值大于1,則轉(zhuǎn)至步驟6,否則轉(zhuǎn)至步驟5;
8)對采樣點(diǎn)進(jìn)行判斷,不是邊界采樣點(diǎn),則轉(zhuǎn)入步驟3;否則結(jié)束本次光線的采樣,轉(zhuǎn)入步驟6;
9)將當(dāng)前累計(jì)得到的顏色值給屏幕像素,并轉(zhuǎn)入步驟1,進(jìn)行下一次光線的采樣.
本文采用的實(shí)驗(yàn)硬件平臺(tái)為CPU Pentium 2.4GHz,內(nèi)存512MB,操作系統(tǒng)是windows x7.編程語言為Visual C++和OpenGL.
圖4展示了云團(tuán)生成與消散的過程.圖4(a)是基于粒子系統(tǒng)的云團(tuán)生成情況,圖4(b)是本文的在其基礎(chǔ)上添加消失函數(shù),也就是云團(tuán)生成之后,會(huì)有一個(gè)自然漸變消失的過程.
圖4 云團(tuán)生成與消散Fig.4 Cloud formation and dissipation
由圖4(a)和圖4(b)可以看出來本文改進(jìn)的方法能夠更好的展示三維云動(dòng)態(tài)過程,能同時(shí)動(dòng)態(tài)模擬三維云的生成過程和消散過程.
在三維云的渲染方面,本文通過改進(jìn)采樣點(diǎn)選取方法,采用抽稀算法有效獲得采樣點(diǎn).對比以下實(shí)驗(yàn)結(jié)果,能夠看出本文方法模擬的云圖效果更逼真.同時(shí),為了體現(xiàn)本文抽稀算法的優(yōu)越性,表1給出均勻采樣[8]、重要性采樣[13]以及本文方法的模擬速度對比,圖5給出了幾種不同的采樣方式和本文方法的系統(tǒng)繪制幀率的比較.
表1 幾種采樣方法對比
Table 1 Comparison of several sampling methods
方法模擬時(shí)間模擬速度均勻采樣18.410.5重要性采樣13.714.2本文方法10.519.6
由表1可得到,在相同的體數(shù)據(jù)規(guī)格400*400*60的情況下,文獻(xiàn)[8]和文獻(xiàn)[9]的模擬速率相差不大,文獻(xiàn)[13]利用重要性采樣方式有所提高,本文的采樣優(yōu)化方法能夠很好的彌補(bǔ)他們的不足,加快云團(tuán)系統(tǒng)模擬的速率.從圖5折線圖看出,相對于另外三種方法,本文提出的方法能夠提高系統(tǒng)的繪制幀率,有效的模擬出實(shí)時(shí)三維云.
圖5 繪制幀率比較Fig.5 Draw a frame rate comparison
圖6 分別給出了文獻(xiàn)[8]、文獻(xiàn)[9]、文獻(xiàn)[13]以及本文的渲染效果對比圖.從實(shí)驗(yàn)結(jié)果可以看出,圖6(a)中在細(xì)節(jié)層次方面變現(xiàn)的不夠清晰;圖6(b)中云團(tuán)會(huì)出現(xiàn)部分模糊現(xiàn)象;圖6(c)由于采樣點(diǎn)不一定,在云團(tuán)邊界有網(wǎng)格狀現(xiàn)象.而本文方法由于采用等間距抽稀的方法來進(jìn)行采樣點(diǎn)優(yōu)化,所以圖6(d)的云圖邊界效果更佳平滑,模擬出來的光照效果真實(shí).
圖6 幾種方法的三維云圖對比Fig.6 Comparison of three-dimensional cloud images of several methods
圖7與圖8分別給出不同形態(tài)的三維云圖模擬效果.從實(shí)驗(yàn)結(jié)果可以看出,本文方法對不同類型的云圖均具有很好的適應(yīng)性.其中:圖7(a)和圖8(a)中在細(xì)節(jié)層次方面出現(xiàn)少量鋸齒狀;圖7(b)和圖8(b)中云團(tuán)會(huì)出現(xiàn)部分鋸齒與模糊現(xiàn)象.而本文方法由于采用等間距抽稀的方法來進(jìn)行采樣點(diǎn)優(yōu)化,所以在圖7(c)和圖8(c)中的云圖邊界效果更佳自然柔和.
本文基于粒子系統(tǒng)的技術(shù)建立云的模型,在模擬動(dòng)態(tài)云方面做出改進(jìn),反應(yīng)云的真實(shí)特性.通過添加云消失函數(shù)、引入改進(jìn)的八叉樹和LOD抽稀技術(shù),實(shí)現(xiàn)了三維云從有到無的一個(gè)動(dòng)態(tài)漸變過程,提高了三維云模擬的逼真程度.此實(shí)驗(yàn)中三維云的仿真可實(shí)現(xiàn)實(shí)時(shí)的真實(shí)感效果,實(shí)驗(yàn)結(jié)果驗(yàn)證所提方法的有效性,是對相關(guān)研究有意義的積極探索.在此之前的研究成果中,有些研究是可以提供形象逼真的渲染效果,但是速度不能達(dá)到實(shí)時(shí)交互的要求.但是,有些研究保證速度的同時(shí),又降低了渲染質(zhì)量.為此,對于怎么樣能夠很好的在真實(shí)感和實(shí)時(shí)性之間尋求折衷,還需要研究者們進(jìn)一步探討.
圖7 層云形狀對比Fig.7 Stratus cloud shape contrast
圖8 積云形狀對比Fig.8 Cumulus cloud shape contrast