魏碧云,孔樣紅,李 暉
武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,湖北 武漢 430205
虛擬現(xiàn)實(shí)技術(shù)[1]是利用計(jì)算機(jī)的圖形功能模擬世界上的各種真實(shí)物體、自然場景及光照產(chǎn)生的各種特效,甚至可以將想象中的世界真實(shí)地模擬出來,給人們的視覺帶來不一樣的沖擊效果。近年來隨著計(jì)算機(jī)圖形學(xué)技術(shù)的發(fā)展,對自然景物的模擬逐漸成為一個(gè)研究熱點(diǎn),如對火焰、噴泉、云霧、閃電、雪花、浪花等自然景物[2]的模擬。這些模擬在軍事科技、影視設(shè)計(jì)、航空航天等領(lǐng)域中發(fā)揮了重要作用。
由于自然景物擁有豐富的紋理和不規(guī)則的幾何外形,以及自然因素對它的影響,如風(fēng)力、氣流等,因此其運(yùn)動(dòng)軌跡是不能確定的。傳統(tǒng)數(shù)學(xué)工具無法對該類物體外在表現(xiàn)形式進(jìn)行正確地描述,所以自然景物的模擬相對困難。因此,如何利用虛擬現(xiàn)實(shí)技術(shù)使這些景物在計(jì)算機(jī)屏幕上呈現(xiàn)更加真實(shí)的效果,成為許多研究者不斷努力奮斗的課題。無規(guī)則模糊物體模擬技術(shù),在學(xué)者們多年的探索和研究下,取得了一定程度的成就,而在多種模擬方法中,粒子系統(tǒng)又具有明顯的優(yōu)勢。
粒子系統(tǒng)的起源,可追溯到 1983 年,Reeves[3]提出的粒子系統(tǒng)的概念。系統(tǒng)中每個(gè)粒子都有屬于自身的一組屬性,例如粒子的位置、形狀、加速度、顏色、生命周期、衰減速度等。這些屬性隨著時(shí)間不斷地進(jìn)行更新,從而使整體的外觀變化以及運(yùn)動(dòng)狀態(tài),相對于傳統(tǒng)的模擬方法更具有真實(shí)感。該系統(tǒng)尤其突出的一個(gè)優(yōu)點(diǎn),就是利用簡單的圖元去模擬一些很復(fù)雜的物體,同時(shí)又不失模擬物體的真實(shí)性和實(shí)時(shí)性。這是單純的使用傳統(tǒng)方法和數(shù)學(xué)工具所無法比擬的,因此,粒子系統(tǒng)逐漸成為國內(nèi)外眾多學(xué)者的研究重點(diǎn)。本文將結(jié)合粒子系統(tǒng)和 OpenGL[4-6],同時(shí)引入風(fēng)場,對火焰模擬進(jìn)行改進(jìn)和創(chuàng)新。
基于傳統(tǒng)的粒子系統(tǒng)的火焰模擬圖形已經(jīng)不能滿足如今社會(huì)計(jì)算機(jī)圖形領(lǐng)域的需求,且其真實(shí)性和實(shí)時(shí)性都不能在日常應(yīng)用中充分體現(xiàn),因此需要進(jìn)一步的改進(jìn)。本文主要探討如何增強(qiáng)火焰的真實(shí)性和實(shí)時(shí)性,改進(jìn)方法如下:
1)在傳統(tǒng)的粒子系統(tǒng)火焰模擬中引入重力和空氣浮力,實(shí)現(xiàn)火焰的動(dòng)態(tài)效果,體現(xiàn)火焰實(shí)時(shí)性特性;
2)在傳統(tǒng)的粒子系統(tǒng)火焰模擬中增加三維場景,展現(xiàn)火焰的真實(shí)性。
改進(jìn)的火焰模擬流程如圖1所示。
圖1 火焰模擬流程圖Fig.1 Flowchart of flame simulation
重力在動(dòng)態(tài)火焰模擬中起到了重要的作用。采用Gyarmathy模型[7],通過人工引入的重力場模擬重力的作用。該模型的優(yōu)點(diǎn)在于:插值操作可在自由粒子間和連續(xù)介質(zhì)兩種極端情況下進(jìn)行,其表達(dá)式為:
從式(1)中可以看出,溫度對粒子的受力有很大的影響,這里采取介于T0和T∞之間的溫度:
粒子在發(fā)射和碰撞過程中會(huì)產(chǎn)生瞬間的內(nèi)部熱量,方程表示如下:
其中,P=ρ(r,t)為顆粒的輻射傳熱,ρ表示顆粒密度,c表示熱容,k表示熱導(dǎo)。
1.2.1 全域風(fēng)場 全域風(fēng)場的風(fēng)源可設(shè)為無限大,其模型可隨時(shí)間的變化而隨機(jī)變化,風(fēng)源與火焰之間的距離對風(fēng)速變化沒有影響。全域風(fēng)場模型中任何時(shí)刻的風(fēng)速都可表示為平均風(fēng)速和一個(gè)隨機(jī)數(shù)之和,該隨機(jī)數(shù)是由Perlin噪音函數(shù)產(chǎn)生的隨機(jī)數(shù),其表達(dá)式為:
vp(t)是一個(gè)采用Perlin噪音函數(shù)產(chǎn)生的隨機(jī)數(shù),其表達(dá)式為:
αPerlinNoise(t)是一個(gè)以時(shí)間t為變量的Per?lin噪音函數(shù)。通過改變 v0(t),w,β,α這些常量就可以產(chǎn)生不同的風(fēng)速。
1.2.2 火焰模擬中的Perlin噪音 Perlin噪音[8]是一個(gè)隨機(jī)數(shù)生成器,在火焰模擬中,Perlin函數(shù)用一個(gè)整數(shù)作為參數(shù),并返回一個(gè)基于參數(shù)的隨機(jī)數(shù)。同樣的參數(shù)傳遞兩次,對于普通的隨機(jī)函數(shù)來說,兩次傳遞相同的參數(shù)可能會(huì)產(chǎn)生不同的結(jié)果,而Perlin函數(shù)不同,它會(huì)產(chǎn)生相同的隨機(jī)數(shù)。如圖2所示,在X軸上,對每一個(gè)值賦予[0,1]的隨機(jī)噪聲值。通過每個(gè)離散的噪聲值進(jìn)行平滑插值操作后,可得到一個(gè)平滑的連續(xù)函數(shù)。
圖2 插值對噪聲值的影響(a)離散噪聲值;(b)平滑插值后的噪聲值Fig.2 Effect of interpolation on noise values(a)Discrete noise values;(b)Smoothing noise values
將火焰模擬中不同頻率和振幅的平滑函數(shù)疊加在一起,按式(7)可構(gòu)造出若干新的噪聲函數(shù)Noisei(x):
構(gòu)造模擬火焰的Perlin噪聲函數(shù)方法如下:
1)構(gòu)造一個(gè)1個(gè)單位長度的噪聲生成器,(float)rand()/RAND_MAX;
2)對任一點(diǎn)(x,z),假設(shè)其落在4個(gè)相鄰噪聲控 制點(diǎn) (x0,z0)、(x0,z1)、(x1,z0) 和 (x1,z1) 所圍 城的區(qū)域內(nèi)。計(jì)算每個(gè)控制點(diǎn)到點(diǎn)(x,z)的向量與該控制點(diǎn)梯度的點(diǎn)積,得到它們對點(diǎn)(x,z)處噪聲的影響值。
1.2.3 計(jì)算風(fēng)力 風(fēng)場模型[9]確定后,為了模擬出火焰搖曳的效果,必須計(jì)算出作用在火焰上的風(fēng)力,作用在火焰上的風(fēng)力由拖曳力和升浮力組成,其表達(dá)式為:
其中,CL(α),CD(α)分別是攻角為 α 時(shí)的升浮力和拖曳力系數(shù),ρa(bǔ)為空氣密度,其值為2.37×10-3g/m3,v是建立的風(fēng)場模型得到的風(fēng)速,S表示迎風(fēng)面積。它們在垂直方向上的作用力為:
粒子系統(tǒng)控制機(jī)將火焰粒子從發(fā)射孔不斷發(fā)射出來進(jìn)行動(dòng)態(tài)模擬,每個(gè)火焰粒子在生成時(shí)都有自己的初始化屬性。隨著時(shí)間的推移,火焰粒子必然經(jīng)過“生成”、“運(yùn)動(dòng)”和“消亡”三個(gè)階段[10]?;鹧媪W酉到y(tǒng)的實(shí)現(xiàn)過程如下:
1)產(chǎn)生一定數(shù)量的新結(jié)構(gòu)化粒子加入系統(tǒng);
2)賦予每一個(gè)新的結(jié)構(gòu)化粒子一定的初始屬性;
3)對整個(gè)系統(tǒng)進(jìn)行更新,刪除隨著衰減速率生命周期為0的粒子;
4)根據(jù)粒子的運(yùn)動(dòng)規(guī)律對結(jié)構(gòu)化粒子進(jìn)行變換及改變屬性;
5)繪制并顯示由已有生命的結(jié)構(gòu)化粒子組成的圖形。
其流程如圖3所示。
圖3 粒子系統(tǒng)流程圖Fig.3 Flowchart of particle system
在大規(guī)模的三維場景仿真中,目前的技術(shù)不能直接模擬每一個(gè)火焰粒子的運(yùn)動(dòng)過程,所以紋理映射技術(shù)[11]被引入到三維場景中,給三維場景添加真實(shí)感。在現(xiàn)實(shí)生活中,這些大大小小均比較接近于真實(shí)事物的貼圖都是基于物體紋理識別得到的。
紋理貼圖技術(shù)直接關(guān)系到三維場景的真實(shí)效果,是體現(xiàn)真實(shí)感場景的重要步驟。
紋理貼圖包括一維紋理、二維紋理、三維紋理三種體現(xiàn)形式,它們的紋理是根據(jù)其變量的定義不同而劃分。其中二維紋理貼圖是最常用的方法,之后將二維紋理映射到三維場景的表面,這樣就獲得了具有紋理貼圖的三維場景,增加了其真實(shí)感。假設(shè)二維紋理函數(shù)定義在(s,r)平面上,一般認(rèn)為二維紋理函數(shù)的定義域是單位方正的,表現(xiàn)形式如下:
采用球面紋理映射[12],具體參數(shù)方程如下:對于球面上的任意一點(diǎn)(x,y,z),求解參數(shù)
(s,r),表達(dá)式如下:
在OpenGL中紋理映射的流程如圖4所示。
圖4 紋理映射流程圖Fig.4 Flowchart of texture mapping
通過前幾節(jié)的描述,粒子系統(tǒng)基本上達(dá)到了預(yù)期的效果,可以較為逼真地模擬火焰效果,并添加一些簡單的三維模擬場景。在該場景中,可實(shí)現(xiàn)漫游效果。此外,還增加了按鍵功能,使火焰呈現(xiàn)出不同的變化,如增加風(fēng)向,調(diào)整重力加速度的數(shù)值;插入不同的位圖轉(zhuǎn)換成不同的紋理,改變顏色分量(R,G,B)的數(shù)值,使得火焰呈現(xiàn)不同的形態(tài)。最終生成的火焰如圖5所示。圖5中的火焰場景,紋理貼圖使火焰擁有立體效果,在X軸上添加的重力加速度使火焰體現(xiàn)出搖曳的效果。
圖5 三維場景中的火焰Fig.5 Flame in 3D scene
圖6 不同溫度下各參數(shù)的變化Fig.6 Changes of parameters at different temperatures
同時(shí),為了使所觀察到的圖像具有3D立體效果,利用 glEnable()和 glDisable()繪制場景圖,并啟用三維紋理GL_TEXTURE_3D作為參數(shù)設(shè)置3D背景圖,對普通的模擬火焰進(jìn)行紋理渲染,如圖7所示。
圖7 添加紋理渲染的模擬火焰(a)紋理渲染之前;(b)紋理渲染之后Fig.7 Simulated flame by adding texture rendering(a)before texture rendering;(b)after texture rendering
對溫度為0℃(即無溫度參數(shù)的引入)和330℃兩個(gè)不同溫度值時(shí)的火焰形態(tài)進(jìn)行分析,同時(shí)引入紋理渲染增加可觀度,如圖8所示。
圖8 不同溫度對火焰的影響(a)0℃;(b)330℃Fig.8 Effects of different temperatures on flame(a)0 ℃;(b)330 ℃
3.2.2 風(fēng)力對火焰的影響 當(dāng)火焰粒子所示風(fēng)力產(chǎn)生了α=2的振動(dòng)頻率時(shí),可以將 Fy在α=2處對α進(jìn)行一階泰勒展開式[13]:
其中,F(xiàn)y(0)是不隨時(shí)間變化的,在動(dòng)態(tài)相應(yīng)分析中可以忽略不計(jì),Δ(α2)表示高階項(xiàng),也可以忽略,則:
由式(9)可得:
將式子(15)帶入式子(14)中,可得到最終空氣動(dòng)力表達(dá)式[14]:
Fy在α=2處的風(fēng)速和風(fēng)力變化如圖9所示。
圖9 火焰粒子的風(fēng)速和力變化(a)火焰粒子的風(fēng)速變化;(b)火焰粒子的受力變化Fig.9 Change of wind speed and power of flame particles(a)Change of wind speed of flame particles;(b)Change of wind speed of flame particles
由圖9(a)和圖9(b)可得結(jié)論:Perlin噪聲函數(shù)利用噪聲生成器(float)rand()/RAND_MAX引入的參數(shù)增加了實(shí)驗(yàn)隨機(jī)性和自然模擬性,因此,由vp(t)=αPerlinNoise(t)知隨著時(shí)間t的增加,風(fēng)速不斷增大,而從式(8)中可得出拖曳力 Fd和升浮力Fl也不斷增大。圖9(b)反映了升浮力增加的速率遠(yuǎn)高于拖曳力增加的速率。因此,渲染時(shí)間t不能過長,否則將會(huì)使火焰動(dòng)態(tài)效果失真。由此可知,火焰在模擬過程中,總是呈上升狀態(tài),焰身在拖曳力Fd和升浮力Fl的共同作用下向某一方向偏移,這一現(xiàn)象真實(shí)模擬出風(fēng)對火焰的影響。
圖10為無風(fēng)力作用和時(shí)間t=4 s時(shí)的風(fēng)力作用的對比圖,風(fēng)場的引入使火焰在場景中產(chǎn)生一定的偏移,風(fēng)速、拖曳力以及升浮力隨渲染時(shí)間的推移而改變。因此,入眼的火焰擺動(dòng)頻率和方向都將有所不同,如圖10所示。
圖10 風(fēng)場對模擬火焰的影響:(a)無風(fēng)場;(b)有風(fēng)場Fig.10 Effect of wind field on simulated flame(a)Without wind field;(b)With wind field
以上主要對傳統(tǒng)的粒子系統(tǒng)繪制火焰進(jìn)行了改進(jìn),并解決了粒子系統(tǒng)實(shí)時(shí)性和逼真性的問題。同時(shí),在了解模擬景物的自然特性及其相關(guān)自然因素后,利用簡單的幾何圖元對整個(gè)系統(tǒng)進(jìn)行了數(shù)學(xué)建模,對每個(gè)粒子進(jìn)行了紋理貼圖及渲染處理。在解決系統(tǒng)實(shí)時(shí)性等問題方面,選擇了四角面片[15]繪制粒子的方法與動(dòng)態(tài)生成視點(diǎn)替用特效技術(shù),這樣不僅可降低系統(tǒng)計(jì)算量,還可提高實(shí)時(shí)性。通過引入風(fēng)力和重力場模型,進(jìn)一步增強(qiáng)動(dòng)態(tài)火焰的逼真性。重力場可動(dòng)態(tài)展現(xiàn)火焰粒子消亡的規(guī)律;風(fēng)力場則可模擬出火焰粒子的運(yùn)動(dòng)情況。這不僅使火焰粒子的運(yùn)動(dòng)更加靈活,也更體現(xiàn)火焰的真實(shí)效果。
[1] 蘇美玲,馮正勇.虛擬現(xiàn)實(shí)技術(shù)[J].數(shù)字技術(shù)與應(yīng)用,2015(5):83-84.
[2] 郝學(xué)娟.基于粒子系統(tǒng)的煙霧模擬[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2014(15):19-23.
[3] REEVES W T. Particle systems-a technique for modeling a class of fuzzy objects[J].Computer Graphics,1983,17(3):359-376
[4] 張曉,劉培玉.OpenGL技術(shù)在虛擬顯示三維重建中的應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(18):4875-4876.
[5] 葉帥,游有鵬,邢永彥.基于OpenGL的三維模型交互控制研究[J].機(jī)械設(shè)計(jì)與制造工程,2015(1):15-18.
[6] 董鴻鵬,姜本清,方偉.基于OpenGL的三維模型渲染技術(shù)研究[J].艦船電子工程,2015(10):114-116.
[7] STAM J.Stochastic dynamics:simulating the effects of turbulence on flexible structures [J]. Computer Graphics Forum,2010,16(3):159-164.
[8] 項(xiàng)予,許森.基于Perlin噪聲的動(dòng)態(tài)水面實(shí)時(shí)渲染[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34(11):3966-3970.
[9] 趙鵬飛.基于IFS的樹木搖曳的動(dòng)態(tài)模擬方法研究[D].咸陽:西北農(nóng)林科技大學(xué),2013.
[10] ZHANG J L,QIU J Y ,GUO H W,et al.Simulation of particle flow in a bell-less type charging system of a blast furnace using the discrete element method[J].Particuology,2014,16(5):167-177.
[11] ZHANG W,ZHANG C H,ZHANG Y.On application of texture mapping technology in simulation [J].Advanced Materials Research,2014,989/990/991/992/993/994:1981-1984.
[12] TAKAHASHI T,F(xiàn)UJII H,KUNIMATSU A,et al.Realistic animation of fluid with splash and foam[J].Computer Graphics Forum,2010,22(3):391-400.
[13] 陳思潭.基于基波模型的風(fēng)場驅(qū)動(dòng)海面場景仿真研究[D].武漢:華中科技大學(xué),2013.
[14] SELLE A,RASMUSSEN N,F(xiàn)EDKIW R.A vortex particle method for smoke,water and explosions[J].Acm Transactions on Graphics,2005,24(3):910-914.
[15] 王雙雙,許化強(qiáng),白成杰.基于數(shù)學(xué)物理方法和紋理作用的火焰模擬[J].計(jì)算機(jī)與數(shù)字工程,2016(2):197-199.