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