摘 要:在大規模虛擬戰場仿真和復雜環境仿真中,煙霧作為其中的重要組成部分,其模擬具有重要的意義。針對煙霧模擬中難以達到真實性和實時性平衡的問題,引入層次細節技術,減少了模擬中所需要的粒子數目,在滿足視覺效果的前提下提高了實時性。引入改進的物理模型與粒子系統相結合,增強煙霧的細節,生成真實感較強的煙霧。此外,還利用煙氣抬升高度的閾值控制法來判斷粒子的生命情況,使煙霧的模擬更加真實。實驗證明,本系統利用有限的粒子數生成了滿足視覺真實性和視景系統實時性要求的煙霧場景。
關鍵詞: 煙霧模擬; 粒子系統; 層次細節; 閾值控制
中圖分類號:TP391.9
文獻標志碼:A
文章編號:1001-3695(2010)02-0754-03
doi:10.3969/j.issn.1001-3695.2010.02.098
Simulation of smoke based on number of particle created function
TANG Yong, LI Xiao-yan, LV Meng-ya, GAO Ying-hui
(School Information Science Engineering, Yanshan University, Qinhuangdao Hebei066004, China)
Abstract:In simulation of large-scale virtual battlefield, smoke as an important part, its simulation is of great significance.It was difficult to balance the reality and the real-time in smoke simulation,proposed the level of detail, reducing the numbers of particle in simulation and improving the real-time. At the same time satisfied visual effect.Introduced combining physical model with particle system, added more detail of smoke and generated realistic smoke. Furthermore, imposed the method of threshold controll to judge if the particle should die, which made the simulation more realistic. Experiment testify that the system uses limited numbers of particle producing realistic and real-time smoke scene.
Key words:simulation of smoke; particle system; level of detail; threshold controll
0 引言
自然景物的建模和渲染是近幾十年來計算機圖形學研究的一個重要領域,而作為自然景物中最為常見的煙霧的模擬也越來越具有挑戰性。它在虛擬戰場仿真、復雜環境仿真、火災安全評估、電影特效、互動游戲等行業具有重要應用,吸引了國內外很多學者對其進行研究。
從20世紀80年代至今,人們一直在不斷地尋求新的方法來模擬煙霧。最初采用元胞自動機方法、擴散過程方法、粒子系統方法等。近兩年來,煙霧的模擬仍然是研究的焦點,許多新思想層出不窮,2008年,Zhou Kun等人[1]提出一種行進中光線補償的實時煙霧模擬算法,對動態低頻環境光照下的煙霧進行渲染;Schechter等人[2]提出改進的子網格湍流煙霧動畫,介紹了一種模擬煙霧動畫的簡單湍流模型,獲得更加逼真的高質量煙霧;Kim等人[3]提出小波湍流的流體模擬方法,采用小波模式加入網格不能分辨的高分辨率細節,使模擬更加真實。2009年,Yang Qing[4]提出基于N-S(navier-stokes)方程的三維煙霧實時模擬。用N-S方程組來描述煙霧的運動可以較為精確地模擬出真實的煙霧效果。但是求解N-S方程計算量很大又比較耗時,以致不能很好地滿足實時性的要求。在巨大而復雜的虛擬戰場環境仿真中,煙霧作為其中很小的但又不可或缺的一部分,必須占用很少的資源生成逼真實時的效果,而基于粒子的方法可以充分體現模糊物體的動態性和隨機性并滿足虛擬戰場的需要?;诹W拥姆椒ㄌ岢霰容^早,在1983年Reeves[5]就提出了粒子系統方法,用大量獨立的粒子來模擬煙、云、火等具有隨機不規則形狀的自然景物并取得了很大成功。1999年,童若鋒等人[6]提出利用粒子系統和濃度場相結合的方法來模擬煙霧的運動與擴散。2003年,Adrien等人[7]提出了一個基于關鍵幀技術的煙動態控制算法;2008年,王盛邦等人[8]將局部力場與動態力場相結合,采用與紋理結合的方法模擬了煙霧的漩渦、煙霧與障礙物碰撞等場景,達到了實時性要求。同年,Zhuo Neng-wen等人[9]提出基于粒子系統和流體動力學的煙霧模擬新方法,為了加速粒子與場景物體的碰撞檢測,提出構建二維空間分割樹作為場景物體的預處理。該方法提高了模擬的實時性。
模擬的真實性和實時性平衡一直是追求的目標。模擬在粒子系統中粒子數量的多少是影響粒子系統算法實時性和真實性的重要因素。粒子數較少會導致嚴重失真;粒子數較多又會在很大程度上影響繪制的速度,使得在真實性和實時性之間很難達到平衡。因此,如何高效率地使用有限的粒子來渲染畫面是該算法研究的出發點。在粒子系統基礎上,采用層次細節技術,引入粒子數生成函數,并提出了利用煙氣抬升高度的閾值控制法來判斷粒子的生命情況和模擬煙霧,力求滿足視覺效果和實時顯示的需要。
1 粒子數生成函數的提出
根據模擬對象不同,粒子的生成區域也不同。定義煙霧的生成區域為平行于世界坐標系xoz平面、圓心為(Ox,Oy,Oz)、半徑為r的圓。確定粒子的生成區域后,還需要確定每一幀應該產生的粒子數目,它直接影響被模擬對象的密度,進而影響模擬的逼真度和系統的實時性,是粒子系統最重要的參數之一。粒子數量過小不能滿足真實感要求,粒子數量過大則增加了系統的處理時間,使粒子系統的實時性下降,從而不能滿足實時性要求。粒子數量、效果圖的質量及程序實時性之間的關系大致如圖1所示。所以粒子數量的定義成為了整個模擬中非常關鍵的問題。
圖1中虛線框的區域是比較理想的范圍,在這個范圍所取的值基本上可以達到效果的真實性和繪制的實時性的平衡。
傳統粒子系統中,粒子的產生由隨機函數控制。其主要有平均新粒子數衡量法和物體面積衡量法兩種方法。這兩種方法忽略了粒子數的多少對模擬的重要影響,這樣有時會導致粒子數量的浪費。系統中需要的粒子數量與產生煙的規模和視點距離的遠近相關,當煙霧規模一定,視點較遠時,由于人眼分辨率較低,則可以使用較少的粒子產生滿足視覺要求的煙霧;反之,視點較近時,則需要較多的粒子數產生詳細的細節。基于此提出一個由要繪制煙霧的規模和煙霧離視點的距離共同決定的函數f(r,d)來確定產生粒子的數量。其中r為產生粒子區域半徑,d為煙霧與視點的距離,用產生粒子數目N= f(r,d)來描述不同規模的滿足視覺效果的煙霧。這樣可以適當減少粒子數量,降低了計算機處理的時間,從而提高了系統的繪制效率。
簡化率與距離可以呈不同的關系[10]。用正比例函數描述粒子數的變化與視點距離之間的關系時,如果比例系數比較大,變化率隨著視點距離的增大會呈線性急劇變化,使粒子數跳躍感太強;如果比例系數較小,視點距離較遠時仍然保持較為復雜的狀態,達不到簡化粒子數目所需要的效果。所以,隨著距離的增加,物體的模糊程度不應該是線性變化的。模型在視點距離較近時產生粒子的數目逐漸增多且變化率較大,在視點距離較遠時產生粒子數逐漸減少且變化率較小。為了滿足上面說的實際情況,保證真實感,取如下非線性關系:
K=1-ep/a(1)
其中:K是變化率,p=-d/d0;a是一個經驗常數,取300為宜。
先不考慮產生粒子區域半徑的影響,設N0是視點距離為d0=1時的產生粒子數目,N為視點距離為d時的粒子數目,變化率還可定義為
K=(N0-N)/N0×100﹪(2)
其中:K是與視點相關的,視點包含很多因素,一般只考慮最直觀的因素,即距離。設視點坐標為(eyex,eyey,eyez),粒子源坐標為(Ox,Oy,Oz)。視點距離表示為
d=(eyex-Ox)2+(eyey-Oy)2+(eyez-Oz)2
由式(1)(2)可知:N=N0×ep/a。假定煙的規模和粒子產生區域半徑的平方成正比。則生成粒子數目N可以表示為
N=f(r,d)=N0×ep/a×(r/r0)2(3)
粒子生成后就應該不斷更新它們的屬性,為了模擬出更加真實的煙霧,采用粒子系統與煙霧運動的物理模型相結合的方法來模擬煙霧。
2 煙霧運動的簡化物理模型
基于流體力學的煙霧運動分析利用網格求解氣體運動的Navie-Stokes方程可以模擬出比較真實的煙霧,但是計算成本比較高,很難達到實時性的要求。虛擬戰場中模擬的煙霧要求實時地得到視覺上真實的煙霧效果,不過分要求物理學上的完全正確性,因此,算法舍棄那些難解的物理方程,將復雜的運動物理模型進行簡化,然后根據簡化的物理方程更新粒子屬性。
2.1 粒子所受合外力
首先結合阿基米德浮力定律和外界風力場對煙霧的影響分析煙霧受力情況,然后通過理想氣體狀態方程建立一個可描述煙霧運動的基礎方程:
F=Fa-G+Fw=(pa-ps)gVs+Fw(4)
pV=MμRT(5)
F=gVs(MaVa-MsVs)=gVspR(μaTa-μsTs+Fw)(6)
其中,煙霧在上升過程中由于溫度的擴散發生溫度衰減,加入牛頓冷卻過程避免由于溫度擴散造成的煙氣快速上升,使煙霧模擬更加真實。加入牛頓冷卻過程后煙霧的溫度變為
Ts=(Ts(0)-Ta)e-r/τ+Ta(7)
τ=cpMs/αA(8)
風力場和煙霧之間的摩擦力可表示為
Fw=c(vw-vs)(9)
結合式(6)~(9)可得到煙霧粒子所受外力最終表達式:
F(t)=gpVsR(μaTa-μs(Ts(0)-Ta)e-t/τ+Ta)+c(vw-vs)(10)
其中:F、Fa、Fw為合外力、空氣浮力和風力;pa、ps為空氣和煙霧密度;Ta、Ts為空氣和煙霧溫度;vw、vs為風和煙霧速度,c為摩擦系數;Vs為煙霧體積。
2.2 煙霧粒子屬性的更新
粒子系統運行后,粒子的速度隨外力的改變不斷變化,導致粒子的位置也不斷發生變化。一般來說,在一個給定時間t,粒子的新位置由它的速度v(t)、加速度a(t)、時間增量Δt控制。粒子的狀態變化可用Euler方法計算:
a(t)=F(t) / Ms
v(t+Δt)= v(t)+a(t)Δt
P(t+Δt)= P(t)+v(t)Δt
其中:v(t)、a(t)、P(t)分別是粒子在t時刻的速度、加速度和位置;v(t+Δt)、P(t+Δt)分別是粒子在t+Δt時刻的速度和位置;Δt為時間增量。
3 判斷粒子消亡的新方法
傳統的粒子系統是在粒子誕生時被賦予固定的生命期。隨著時間的推移,生命值逐漸減少,最后通過檢查粒子的生命值是否為0,決定是否將粒子從系統中刪除,即當其年齡達到生命期或是移動到視圖區域以外時,粒子就會死亡。死亡過程采用逐漸淡化融合的技術實現。其實自然界中的煙氣被抬升到一定高度就逐漸消失了,為了模擬出更加真實的煙霧,提出一種閾值控制法來判斷粒子的生命是否終結,根據煙氣被抬升的高度來決定粒子的存亡。對于煙霧來說,產生的煙氣被抬升,有兩方面的原因:a)煙源出口的煙氣具有一定的初始動量;b)由于煙溫高于周圍氣溫而產生一定的浮力。此外,平均風速、風速垂直切變及大氣穩定度等對煙氣抬升均有影響。由于影響煙氣抬升的因素多而復雜,至今還沒有一個通用的計算公式,現在所有的經驗公式或半經驗公式,都有一定適用條件或局限性。采用霍蘭德(Holland)公式來求煙氣抬升高度:
ΔH=(vsD/u){1.5+2.7[(Ts-Ta)/Ts]D}
其中:vs表示煙氣出口流速;D表示煙源出口內徑;u表示煙囪出口處的平均風速;Ts表示煙源出口處的煙氣溫度;Ta表示環境大氣溫度。把煙氣抬升高度ΔH作為閾值,粒子的位置與ΔH作比較,如果粒子位置坐標大于ΔH高度的坐標值,也就是說粒子超出抬升高度范圍,就認為粒子生命到了盡頭而終結。
4 煙霧粒子的繪制
本文采用多邊形加上紋理貼圖的方法來進行煙霧的繪制。在粒子繪制時,采用什么形狀粒子將會影響系統的實時性。為盡可能減少系統所繪制多邊形的數量,將粒子簡化為矩形面片,然后采用OpenGL的紋理融合技術,將煙霧的二維紋理圖片映射到矩形面片上,融合以后繪制在視口中就是動態的煙霧場景。模型中采用的煙霧紋理圖片均是32 ×32的24位BMP圖片,圖片背景是黑色背景、白色紋理,如圖2所示。
將煙霧的圖片映射到表示粒子的矩形面片(圖3)后采用OpenGL紋理融合技術生成煙霧場景。首先求出矩形面片表示的四個頂點坐標后,設置當前紋理坐標 glTexCoord {1234} {sifd} [v] (TYPEcoords),然后調用gl2Vertex3f(( GLfloat )x,(GLfloat)y,( GLfloat)z),即可將煙霧的紋理映射到矩形面片上融合成煙霧場景。
5 實驗與分析
煙霧模擬算法在普通PC機(CPU:AMD XP2400+,內存:512 MB)上進行實驗。在粒子系統的基礎上,基于VC++ 6.0和OpenGL平臺對算法進行了模擬。根據煙霧的位置與視點距離及煙霧粒子的產生區域半徑來決定產生粒子的數量,然后依據簡化的物理方程進行運動更新,并且采用煙氣抬升高度來判斷粒子的消亡,使其在不影響視覺真實感的情況下,采用相對較少的粒子達到實時性與真實性的平衡。模擬時,可以通過程序交互來控制系統中的視點距離。圖4(a)~(c)為粒子產生區域半徑一定時,視點距離分別為5、15、25時煙霧的模擬情況(d為煙霧與視點距離,N為產生粒子數)??梢钥闯觯S著視點距離的增大,場景中所產生的煙霧逐漸變小,而沒有影響視覺效果。實驗表明,所生成的動態煙霧不但形態逼真、具有真實的視覺效果,而且運用少量的粒子達到了實時的要求。
采用粒子數生成函數(the number of particle created function,PCF)的方法,在不影響視覺真實感的情況下,用相對較少的粒子達到實時性與真實性的平衡。表1是粒子數生成函數PCF方法與傳統方法的比較。
從表1可以看出,本文粒子數生成函數PCF方法與傳統的方法相比所需粒子數大大減少了,模擬速度得到很大提高,并且本文PCF方法達到了實時性的要求,幀率不低于29。
6 結束語
本文提出了根據煙霧與視點距離及產生粒子區域半徑關系的數學模型來決定生成煙霧粒子的數目,根據簡化的運動物理模型進行粒子屬性的更新,并且提出一種利用煙氣抬升高度的閾值控制法判斷粒子的生命是否終結,在不影響視覺真實感的情況下減少了模擬時所需要的粒子數目,提高了繪制效率,達到了真實性和實時性的平衡,研究成果已成功應用于國家“863”項目中。
參考文獻:
[1] ZHOU Kun, REN Zhong,LIN S,et al. Real-time smoke rendering using compensated ray marching[J]. ACM Trans on Graphics, 2008, 27(3):12.
[2]SCHECHTER H, BRIDSON R. Evolving sub-grid turbulence for smoke animation[C]//Proc of ACM SIGGRAPH/Eurographics Symposium on Computer Animation. 2008:1-7.
[3]KIM T, THREY N, JAMES D,et al. Wavelet turbulence for fluid simulation[J]. ACM Trans on Graphics, 2008, 27(3):50-51,56.
[4]YANG Qing. Real-time simulation of 3D smoke based on navier-stokes equation[J]. WSEAS Trans on Computers, 2009, 8(1): 103-112.
[5]REEVES W.Particle systems:a technique for modeling a class of fuzzy objects[C]//Proc of SIGGRAPH. Detroit, Michigan:[s.n.], 1983: 359-376.
[6]童若鋒,陳凌鈞,汪國昭,等. 煙霧的快速模擬[J]. 軟件學報,1999,10(6):647-651.
[7]ADRIEN T, ANTOINE M, ZORAN P,et al. Keyframe control of smoke simulations[J].ACM Trans on Graphics, 2003, 22(3): 716-723.
[8]王盛邦,紀慶革. 基于粒子系統的實時煙霧仿真[J]. 中山大學學報,2008,47(2):9-13.
[9]ZHUO Neng-wen, RAO Yun-bo. Real time dense smoke simulation based on particle system[C]//Proc of International Symposium on Intelligent Information Technology Application Workshop. Shanghai:[s.n.], 2008: 809-813.
[10]左福強,陳青林. 虛擬場景目標定位和LOD建模技術研究[D]. 南京:南京理工大學,2002.