唐 勇,張 穎,陶建新,郭慧玲,3,張 思
1(燕山大學 信息科學與工程學院,河北 秦皇島 066004)
2(河北省計算機虛擬技術與系統(tǒng)集成重點實驗室,河北 秦皇島 066004)
3(河北省環(huán)境工程學院信息工程系,河北 秦皇島 066102)
由于隨機性、細節(jié)復雜等特性,流體中的火焰一直是計算機圖形學領域最具挑戰(zhàn)性的課題之一,火焰與障礙物的交互實現(xiàn)更為復雜.另外,在虛實融合場景中建立真實的火焰模擬也是一個挑戰(zhàn).因此在虛實融合場景中完成火焰交互運動的實時仿真困難重重.
火焰模擬,從Stam與Fedkiw等[1]人開始,人們在提升流體模擬的真實感與實時性方面上做了大量研究.2013年,Fedkiw等[2]提出一種網格結構實現(xiàn)火焰等流體的動態(tài)追蹤,展現(xiàn)了火焰燃燒過程的細節(jié),提高了實時性,但只能用精細網格追蹤一個目標對象.2013年戴青等[3]提出一種基于GPU的流體動力系統(tǒng),使用GPU模擬和渲染煙霧,提升了計算能力,但實時性仍不強.2013年吳曉月等[4]人提出一種投影方法,減少計算時間卻產生與傳統(tǒng)投影方法類似的視覺效果,但在流固界面上會造成一些交互缺陷,影響煙霧效果.2013年唐勇等[5]實現(xiàn)了N-S方程和體渲染結合的火焰實時模擬,完成加入障礙物和風力的火焰真實模擬,但在交互細節(jié)上還是有所欠缺.2016年,清華大學的Yan等[6]人擴展了現(xiàn)有多相流體SPH框架,展示了一種新的方法來模擬流固耦合,該框架實施簡單且能夠模擬多個固體和流體交互、溶解效果等現(xiàn)象,但對純彈性材料效果不理想.
另外,利用人的手勢動作來操作設備的用戶界面近年來逐漸引起人們關注.2015年喬體洲等[7]人實現(xiàn)在無標記的情況下不對稱的跟蹤人手及其所有關節(jié)的位置和姿態(tài),將基于Kinect的手勢控制應用在虛實融合場景中煙源交互實時模擬仿真中.2016年Ing-Jr Ding等[8]人提出一種自適應隱馬爾可夫模型的手勢識別方法,利用Kinect獲取用戶的手勢信號,驅動機器人來模擬人的控制命令.
綜上可知,當前的火焰模擬,主要針對火焰細節(jié)上的模擬有很大的進步,但在虛實融合場景中進行火焰交互的研究略為匱乏.鑒于此,提出一種在虛實融合場景中與虛擬火焰交互運動的實時仿真方法.
火焰模型的建立分為基于粒子系統(tǒng)和基于N-S方程的歐拉網格模型兩種.基于粒子系統(tǒng)建立的火焰,雖然在邊緣細節(jié)上豐富自然,真實感更強,但龐大數量的粒子,在處理上耗費大量時間,在交互性控制上也非常困難.而基于N-S方程的火焰模型,通過控制火焰每個網格的單獨屬性,達到控制火焰和火焰交互的效果,優(yōu)勢更明顯,所以本次實驗選擇基于N-S方程建立的火焰物理模型:
(1)
(2)
公式(1)和公式(2)分別是質量守恒連續(xù)方程、動量守恒方程.其中,u為速度,ρ為流體密度,v是動量粘性系數,p為壓強,fbouy表示熱浮力,熱浮力為:
fbouy=-αρX+β(Tfire-Tenv)X+εl(N×ω)
(3)
(4)
(5)
公式(1)中f=fd+fwind,fd是擾動力,fwind是風力.
為了表現(xiàn)出火焰燃燒中的跳動,在求解fd的過程中,引入Perlin噪聲函數生成隨機數R=μPerlinNoise(t),R作為設置的恒定力的作用參數,進而產生一個隨機大小的作用力,對火焰造成隨機擾動,從而創(chuàng)造隨機風場.
建立火焰物理模型過程中,由柏林噪聲函數創(chuàng)造的隨機風場,實現(xiàn)火焰因氣流波動而跳動的逼真效果,增強了虛擬火焰的真實感.
實現(xiàn)虛實融合場景中與火焰的交互,將虛擬和現(xiàn)實的數據相融合,適配最佳控制系數,保證手勢指令的魯棒性,確保交互的真實與實時.
Kinect是3D體感攝影機,具備即時動態(tài)捕捉,影像辨識等功能,它能夠不使用任何控制器,僅依靠相機就可捕捉三維空間中人的運動,因此本文采用Kinect來獲取手勢動作完成與火焰的交互.Kinect借助SDK采集各項數據進行計算處理,并利用紅外攝像頭獲取現(xiàn)實原始視頻.我們在真實場景中定義標記火焰位置,將真實場景和虛擬火焰進行虛實注冊,然后將注冊信息進行虛實疊加,融合虛擬和現(xiàn)實場景中的物體,將融合的視頻顯示到顯示器上,在顯示器上呈現(xiàn)出真實情景與虛擬火焰融為一體的場景,在場景中可通過手勢對火焰達到操控的效果.
為了能夠準確識別場景中人的手勢指令,在手勢定義上,本文以分類準確和高效率為前提,手勢特征保證特征易于提取、區(qū)分度高,穩(wěn)定且動作互不干擾,提升手勢交互時的魯棒性.由上,定義如表1所示的手勢指令集及其算法.其中L和R分別是左手和右手的簡稱.↑、↓、←和→分別表示手掌垂直向上、向下、水平向左和向右運動.
表1 手勢指令集定義表Table 1 Difinition of gesture instruction set
為確保手勢指令的魯棒性,在手勢的交互中引入控制系數,減少時間異步,并且保證移動距離成正比.
3.2.1 減少時間異步的靈敏度系數α
手勢控制物體與火焰交互過程中,獲取手掌三維坐標值Rhand=(X,Y,Z),則假設在Δt內手在坐標軸上的偏移量為ΔM(其中M分別為X,Y,Z),在坐標軸上設置移動閾值為ΔMmove,設定手勢幅度大于一個移動閾值,則調用手勢算法,即ΔM>ΔMmove時,調用手勢指令算法,火焰發(fā)生交互效果.
為實現(xiàn)在場景中人與火焰的實時準確交互,在調用指令算法中適配最佳靈敏度系數α(α>0),提高手勢識別的靈敏度.通過手的三維坐標值的增長值來計算在坐標上速度的增長因子Ux,Uy,Uz,計算如公式(6)所示.
(6)
假設原始坐標為Sorig=(X1,Y1,Z1),經過Ux,Uy,Uz的轉化,可得物體的最終坐標為Sfina=(X2,Y2,Z2):
M2=M1+Um×(t2-t1)
(7)
其中,M分別為X,Y,Z.
3.2.2 火焰偏移量的控制系數Φ
為實現(xiàn)火焰隨手勢擺動的真實效果,在指令算法中引入控制系數Φ,利用手勢揮動距離控制風力大小,將風力添加到火焰上.當:
(8)
時,手揮動偏移量大,風力越大.其中|ΔX|是手移動距離.
假設網格中風速恒定,根據大氣動力學計算空間中x點t時刻的風力得:
(9)
其中ρair是空氣的密度,v(t)為t時刻的風速.考慮到阻力,引入風力衰減因子,假設空氣阻力fresi為定值,則:
fresiΔt=mv(t′)-mv(t)
(10)
其中Δt=t′-t,m是質量.由于Δt特別小,忽略不計,則認為Δt內風速不變,那相對于t時刻的相對位移ΔS為:
ΔS=v(t)Δt
(11)
由公式(10)和公式(11)整理可得:
(12)
整理以上方程,獲得任意時刻的風力為:
(13)
引入風力衰減因子后,真實地反映了風場的變化.
在手勢定義算法中引入α和Φ后,提升了手勢識別的靈敏度和準確度,提高了手勢識別率,確保手勢指令的魯棒性.實現(xiàn)手揮動,識別手勢指令并判斷風力大小的交互效果.
火焰與障礙物之間的交互是基于流體與障礙物之間的單向耦合作用,為在交互界面上的細節(jié)更加真實自然,深入兩者的作用機理,建立他們之間的耦合方程模型.
圖1 流體與球體碰撞的矢量圖Fig.1 Vector of flame and fluid's collision
如圖1所示,1904年德國人普朗特提出邊界層理論:邊界層的流體用N-S方程表示,流體與障礙物接觸并有相對運動時,邊界層會因阻力使流體速度減小,產生邊界脫離現(xiàn)象.流體的流動速度減為0時,流體反向流動,在障礙物的表面某處分離,產生大量的旋渦.
基于此理論,建立如下火焰與障礙物之間的耦合模型.
將4.1節(jié)的理論分析應用到火焰與障礙物之間的單向耦合作用力分析上,即可得:
在交互邊界上,障礙物受到k個網格壓力的矢量和為:
(14)
則由邊界單元網格壓力所產生的加速度abound為:
abound=M-1τp
(15)
式中M是移動障礙物的質量;另外,考慮到移動障礙物本身的加速度,邊界處總加速度aout為:
(16)
(17)
耦合前后火焰保持不可壓縮性,故下一時刻速度散度為0:
(18)
對公式(18)進行變形,得到:
(19)
將火焰與移動障礙物的運動結合起來,得耦合線性方程:
(20)
其中D代表散度;在邊界上b=usolid,A=abound.
通過對流固之間耦合作用力分析,建立其流固耦合方程,保證火焰與障礙球交互面上的細節(jié)更加真實自然流暢.
在Windows平臺下建立基于Kinect的虛實融合場景,結合Unity3d建立了虛擬火焰模型,進行了與火焰的交互實驗與對比,驗證在虛實融合場景中與火焰交互的真實感和實時性.硬件環(huán)境:Intel(R)Core(TM)i7-4790 CPU @3.60GHz,8GRAM,顯卡為 ATI Radeon R7250(2G).
圖2是用本文方法模擬出的酒精燈火焰和真實酒精燈火焰的效果圖對比.圖2(a)和圖2(b)分別展示了利用本文建立的火焰物理模型對酒精燈火焰的模擬和真實酒精燈火焰.與圖2(b)相比,圖2(a)中的火焰有真實火焰由于氣流產生的跳動和不規(guī)則形狀火焰邊緣的特征與細節(jié).
圖2 酒精燈火焰的模擬及對比Fig.2 Simulation and comparison of alcohol flame
如圖3所示,圖3(a),圖3(b)分別是本文火焰與文獻[4]
圖3 火焰與障礙球的交互效果圖Fig.3 Interaction between flame and sphere
煙霧和障礙物的交互效果.圖3(a)障礙球上方有因火焰遇到障礙物耦合交互產生的旋渦,在火焰與障礙球之間交互界面上的交互細節(jié)真實自然;而圖3(b)的煙霧遇到障礙球,無旋渦,交互細節(jié)也很粗糙.另外,圖3(b)中煙霧的模擬和渲染是在GPU上進行的,實現(xiàn)了實時性,而本文的交互不僅在幀率上能夠達到120幀左右,實時性強,且在交互細節(jié)上真實自然.
圖4是Kinect識別手勢指令與火焰交互的效果圖,其中ΔX的正負表示手擺動方向.圖4(a)-圖4(d)分別展示了無指令,L←,歸位,L→的交互效果.分析可知,火焰擺動的方向與手勢指令的方向一致.且由圖4(e)-圖4(h)可知,火焰擺動與手勢指令不僅方向一致且與揮動距離成正比.
圖4 手勢控制火焰擺動Fig.4 Flame of gestures controling
圖5是移動球與火焰或煙霧交互的效果圖.其中圖5(a)-圖5(d)是本文識別手勢指令控制小球與火焰流體的交互效果,圖5(e)-圖5(h)是文獻[5]中煙霧與移動小球的交互效果.文獻[5]中提升了煙霧細節(jié),但在煙霧與小球交互界面上細節(jié)不清晰,本文中小球跟隨手勢指令擺動,且兩者的交互細節(jié)豐富自然.
圖5 手勢控制小球與火焰交互及其對比圖Fig.5 Interaction and comparison of gestures controlling sphere and flame
表2是對手勢識別實驗的數據分析.由表可知,同樣100次實驗,單手手勢控制火焰的交互運動的識別率相對于雙手手勢控制的實驗要高,平均識別率可達到98%.而雙手手勢控制火焰的實驗,識別率為90%-92%.究其原因,實驗過程中人對火焰進行控制時,Kinect識別雙手指令的不準確性,對實驗造成了干擾,導致雙手手勢的識別率有所降低;另外,根據Kinect的深度攝像,人與Kinect之間的距離也是有影響的.多項實驗表明,手勢識別算法能夠滿足虛實融合場景中人與虛擬火焰交互的實時真實模擬的要求.
表2 每個手勢的數據分析Table 2 Analysis of every gesture
本文通過分析對比粒子系統(tǒng)與歐拉網格的火焰模型,選擇了交互性較強的歐拉網格火焰模型.針對火焰控制問題,利用Kinect將真實場景與虛擬火焰進行深度交互,實現(xiàn)了人對虛擬火焰的交互控制,達到逼真的人機交互效果.求解N-S方程過程,引入柏林噪聲函數創(chuàng)造了隨機風場,建立了真實跳動的火焰模型;在虛實融合場景中,定義手勢指令集及映射算法,并在算法中引入靈敏度系數和控制系數,保證手勢指令的魯棒性,同時提升了手勢識別率和準確性;確定火焰與障礙物之間耦合關系,建立之間的耦合模型,實現(xiàn)了交互細節(jié)上的更加逼真的效果.通過多個實驗效果圖的分析和對比可知,本文在虛實融合場景中實現(xiàn)的各種交互效果真實自然流暢.但Kinect本身最大幀率是30fps左右,在虛實融合場景中的幀率還不是很高;另外,Kinect不能識別較為復雜的動作,故不能準確實現(xiàn)復雜的交互動作.提高復雜手勢的識別和準確率將會是我們下一步的工作.