呂夢雅,孫旭東,甄志華,唐 勇,*,郭慧玲,3
(1. 燕山大學 信息科學與工程學院,河北 秦皇島066004; 2. 河北省計算機虛擬技術與系統(tǒng)集成重點實驗室,河北 秦皇島066004; 3. 河北環(huán)境工程學院 信息工程系,河北 秦皇島066102)
流體仿真一直是計算機圖形學領域研究的熱點之一,煙霧作為流體的一種重要表現(xiàn)形式,具有多變性以及易受外界環(huán)境影響等特點,因此對于煙霧的真實感模擬非常困難,而關于煙霧融合的實時繪制則更具挑戰(zhàn)性。
近年來,國內外的研究者陸續(xù)投身到對煙霧的模擬當中,他們利用粒子系統(tǒng)、元胞自動機、擴散過程模型、光照模型等方法進行煙霧的實時性繪制。2005年,F(xiàn)eldman等人[1]改進了物理網格,使用不規(guī)則四面體網格搭建煙霧模型,在很大程度上提高了仿真效果的真實性,同時,該方法可以減少計算量,仿真結果也比較穩(wěn)定。2007年,秦培煜等人[2]提出了一種基于物理模型的煙霧的實時數值模擬方法,利用破開算子法分別對外力項、對流項和投影項進行求解,保證了模擬的實時性,但是丟失了流體表面的部分細節(jié)。2010年,Lentine等人[3]通過粗化歐拉流體網格求解壓力項,降低了求解泊松方程所需的時間,同時仍可保持流體模擬的細節(jié),但該算法在精細網格上不能保證實時性。2010年,Kang等人[4]提出了一種將距離函數和體積分數結合起來混合多流體模擬的方法,使混溶流體之間可以平滑過渡,但是忽視了不同流體間的相互作用力。2012年,呂夢雅等人[5]提出了一種基于流體力學方程的煙霧模擬方法,實現(xiàn)了煙霧與風場的交互,但是對于煙霧在風場中的描述不準確。2013年,Ando等人[6]使用離散化與空間自適應流體隱式粒子相結合的方法來有效地模擬具有極端空間適應性的液體,極大地加快了大規(guī)模流體的模擬。2014年,任博等人[7]提出了一種基于光滑的多流混合粒子流體動力學方法,使得流體融合模擬的效果較為逼真,但是對于大量的粒子模擬,實時性能將會降低。2016年,唐勇等人[8]提出了一種基于歐拉模型的多煙霧自由融合實時仿真算法,能夠快速逼真地表現(xiàn)煙霧自由融合的過程,但煙霧融合的邊界之間過渡不平滑,缺乏細膩感。2018年,Sato等人[9]提出了一種通過利用不可壓縮感知的現(xiàn)有速度場來合成湍流運動的方法,可以直觀地創(chuàng)建具有湍流運動的高分辨率流體動畫,但是該方法的模擬形態(tài)空間較為單一。2019年,Ganter等人[10]提出了一種直接體繪制方法,使用BVH構建應用聚類算法以降低葉節(jié)點復雜性,對于圖像的渲染有了顯著改善。2019年,Kim等人[11]提出了一種基于感知的神經風格傳輸算法,能夠很好地將煙霧特征從自然圖像傳輸到煙霧模擬,實現(xiàn)單相流體的一般內容感知操作,但是對于多相流體的混合操作,不能生成準確的煙霧形態(tài)。
因此,本文提出一種改進的多煙霧融合實時繪制算法,解決多煙霧融合時邊界過渡不自然的問題,并且通過刻畫小尺度可變風場,實現(xiàn)可變風場中多煙霧的融合。
使用基于物理的方法來模擬煙霧運動,為了準確描述可變風場中多煙霧融合的過程,通過刻畫小尺度可變風場,并將描述風力的時變函數引入到N-S方程的外力項中,從而實現(xiàn)可變風場中多煙霧的融合。
在流體力學中,N-S方程是描述不可壓縮流體的最為全面的方程。本文對N-S方程進行簡化,采用其不可壓縮非粘性形式的方程(即歐拉方程)來模擬煙霧運動的物理模型,其公式為
?·u=0
,
(1)
,
(2)
式(1)為煙霧運動質量守恒方程,式(2)為動量守恒方程,u為速度場,p為壓強,ρ為流體密度,?為微分算子,“·”是矢量點積,f為外力項。
簡化后的N-S方程包含外力項、對流項、壓力項。首先計算外力項對煙霧建模的影響,然后分別計算對流項與壓力項。外力項包括熱浮力以及風力,當流體受到外力作用時,速度場也會動態(tài)改變,因此,在每一時間步的開始,計算外力項對速度場的影響:
ut1(x)=ut(x)+(Δt)f,
(3)
t為當前時刻,t1為經過外力項計算后的下一時刻,根據當前時刻的速度場對下一時刻的速度場實時更新。其中外力由熱浮力和風力組成,即
f=fbuoy+fwind,
(4)
其中,fbuoy為熱浮力,fwind為風力。熱浮力的計算需考慮浮力、煙霧重力等一些因素的影響,由文獻[1]得出熱浮力計算式為
fbuoy=-αρz+β(T-Tamb)z,
(5)
其中,α、β都為常數,ρ為煙霧密度,z為垂直向上的分量,T為煙霧濃度,Tamb為環(huán)境溫度。
對流項可使流體通過對流,在傳輸過程中實現(xiàn)相鄰區(qū)域間的能量傳輸,對流項的公式為
(6)
其中,λ為取值范圍在0到1之間的常系數,針對不同的區(qū)域,λ的取值不同,經過外力項計算,得到速度場u1。
計算流體壓力項時,通過壓力梯度來修正速度散度,從而使散度為0。壓力泊松方程的半離散形式表示公式為
(7)
其中,t2為經過對流項計算后的時刻,通過修正散度進而計算該時刻的壓力梯度,最后完成一個時間步長的計算。
為了解決多煙霧融合速率低的問題,通過引入小尺度可變風場,并將描述風力的時變函數加入到N-S方程的外力項中,從而實現(xiàn)可變風場中多煙霧的融合。求得可變風場的隨機過程,并將其代入到式(4)中的fwind項中,從而根據fwind項進一步計算得到外力項。本文使用一種基于譜分解的非平穩(wěn)過程風場仿真算法,利用非負矩陣分解的方法,充分利用了快速傅立葉變換的優(yōu)點。另外,在進行譜分解后,利用快速傅立葉變換技術提高了風場仿真的效率。其功率密度譜矩陣為
(8)
其中,s(ω,t)為Hermitian矩陣,其非對角線元素為ω的復函數,如下式所示:
(9)
s(ω,t)使用Cholesky方法可分解為H(ω,t)與HT*(ω,t)的乘積,HT*(ω,t)為H(ω,t)的共軛轉置矩陣。由此可得出當前時刻模擬風場的隨機過程:
(10)
通過上式,即可求解基于當前時刻的隨機風速,從而計算式(4)中的fwind項,進而求得每一時間步的速度場,通過調整不同時刻的速度場,改變煙霧的流速,使得煙霧融合的速率得以改善。
為改善不同煙霧融合時的邊界過渡不自然的問題,對傳統(tǒng)的體繪制算法進行改進,引入錯切變形法對煙霧融合進行繪制,其主要思想是把三維離散數據場的直接投影分解為三維數據場的錯切變換和二維圖像的變形。該方法是利用空間數據結構加快空區(qū)域的跳躍速度,減少相鄰顏色間空區(qū)域的間隔,保證相鄰顏色之間的平滑過渡,并且利用垂直投影的方法來加速對流體的繪制。
傳統(tǒng)的體繪制算法一般分為兩類。其中一類以足跡表法為例,按照對象空間排序,此方法利用空間數據結構加快了空區(qū)域的跳躍速度,進而提升了繪制有效區(qū)域的效率。另外一類以光線投射法為例,按圖像空間排序,圖像空間中的每個像素沿法線方向通過三維體積發(fā)射光,然后沿光線的路徑進行采樣,通過合成各采樣點的顏色值,即可得到最終的圖像。
本文對光線投射法進行改進,同時結合了足跡表法的優(yōu)點進行煙霧融合的繪制,在很大程度上可以改善煙霧融合邊界過渡不平滑的問題。錯切變形法結合了足跡表法與光線投射法的優(yōu)點,既可以利用空間數據結構加快空區(qū)域的跳躍速度,又可以利用提前終止光的方法來加速對流體的繪制,同時采用基于剪切扭曲因子分解的方法進行煙霧渲染,將體數據轉換為剪切的對象空間,對每個切邊進行平移與重采樣。將重新采樣的切片按從前到后的順序組合到一起,然后對中間圖像進行扭曲,將中間圖像轉換為圖像空間,第二個重采樣步驟生成正確的最終圖像,如圖1所示。
圖1 錯切變形算法Fig.1 The method of shearing deformation
不同煙霧渲染不同的顏色及其不透明度的計算式為
Ci=C0i(α′+Fi),
(11)
α′=f(d,|?d|),
(12)
其中,Ci表示第i種煙霧最終渲染的顏色,C0i代表第i種煙霧的初始顏色,F(xiàn)i表示第i種顏色煙霧的貢獻度,α′及其函數f代表不透明度及其標量場和梯度大小的函數,d為濃度場,|?d|為d的梯度函數,濃度場的平流帶動煙霧的顏色變化,濃度的取值為0~1,濃度為0時表示無煙,不需要繪制;濃度為1時表示此時煙霧濃度達到峰值,繪制顏色最深。使用α′及其函數來快速劃分煙霧區(qū)域中的透明、半透明、不透明區(qū)域。由此可得出最終煙霧混合的計算式:
(13)
采取以上策略,實現(xiàn)不同顏色煙霧的融合狀態(tài)。
為了豐富多煙霧融合時的形態(tài)空間,引入包圍盒技術實現(xiàn)多煙霧融合區(qū)域的網格劃分,增加多煙霧融合空間的表現(xiàn)形態(tài),有效地減少網格模型對形態(tài)空間的限制。由于AABB包圍盒的碰撞檢測算法簡單實用,所以采用其進行形態(tài)空間的劃分。AABB包圍盒的每一平面都與坐標平面平行,其表達式為
D={(x,y,z)|xmin≤x≤xmax,
ymin≤y≤ymax,zmin≤z≤zmax},
(14)
其中,x、y、z為煙霧的坐標,xmin、xmax、ymin、ymax、zmin、zmax分別為包圍盒在x、y、z軸的最小與最大坐標。
檢測煙霧粒子某個點是否屬于AABB包圍盒范圍:
boolean contains(float[]p){
return
(p[0]>=xmin[0])&&(p[0]<=xmax[0])&&
(p[1]>=ymin[1])&&(p[1]<=ymax[1])&&
(p[2]>=zmin[2])&&(p[2]<=zmax[2])
}
檢測值返回一個布爾類型,若是煙霧粒子屬于包圍盒范圍,則對該區(qū)域煙霧粒子進行物理建模,通過修改包圍盒的不同形狀,從而展現(xiàn)不同形狀空間的煙霧形態(tài)。
本文實驗的硬件:處理器為Intel Core i7 4790 3.60GHz,內存為4G,顯卡為AMD Radeon R7 250,軟件環(huán)境為Windows 10操作系統(tǒng),unity 5.6.1,Visual Studio 2017。
圖2分別展示了文獻[9]與本文方法的效果圖,圖2(a)為文獻[9]采用基于感知的神經風格傳輸算法,可以實現(xiàn)單相流體的精確模擬,但是針對多相流體的融合模擬,可以觀察到不同相的煙霧在融合過程中會出現(xiàn)明顯的分隔,圖2(b)為本文的方法,針對不同相的煙霧,應用錯切變形繪制算法,著重處理煙霧融合的邊緣部分,可以使不同相的煙霧融合更加平滑。
圖2 雙股煙霧融合效果Fig.2 Effect of double smoke fusion
圖3引入可變風場,有效提升局部煙霧的流速,加快煙霧融合的速率。圖3(a)為未加入風場的效果圖,圖3(b)為加入可變風場后的效果圖。當未加入風場時,三股煙霧呈自然蔓延的趨勢,對比加入小尺度可變風場后,在相同的時間下,加入風場后三股煙霧的流速顯著提升,從而很大程度上提高了煙霧的融合速率。
圖3 加入風場與未加風場煙霧融合效果對比圖Fig.3 Comparison of smoke fusion effect in a field with or without wind
圖4為文獻[12]與本文方法煙霧融合的細節(jié)對比,可以看到文獻[12]中煙霧融合的邊界過渡不平滑,因此本文對其改進。其中圖4(a)為文獻[12]的模擬,圖4(b)為本文的煙霧融合繪制方法,針對文獻[12]煙霧融合的邊界過渡不平滑的問題,采用錯切變形繪制算法進行煙霧的繪制,著重處理煙霧融合邊緣的過渡,減少相鄰顏色間空區(qū)域的間隔,可以得到很好的效果,并且用本文方法可使實驗的幀率提升1倍。
圖4 七彩煙霧融合的對比圖Fig.4 Contrast pictures of colorful smoke fusion
圖5是本文方法模擬不同條件下的七彩煙霧融合效果圖,圖5(a)是未添加風場的效果圖,圖5(b)是在圖5(a)的基礎上添加了可變風場,且風速系數為2的效果圖,其中風力加快了煙霧的流速,提升了融合速率。
圖6為文獻[7]、文獻[8]與本文方法對比,圖6(a)為文獻[7]通過布朗擴散來模擬流體的混合,但是模擬大量粒子的混合,將不能保證實時性。圖6(b)是文獻[8]中通過歐拉方法模擬煙霧融合,可以看到煙霧融合邊界的過渡不夠平滑。圖6(c)為本文使用錯切變形法來進行煙霧融合的繪制,著重處理煙霧融合邊緣的過渡,減少相鄰顏色間空區(qū)域的間隔,同時對于大量粒子的模擬,使不同煙霧融合處更平滑,過渡更自然的同時仍可保證較高的幀率。
圖5 加入風場與未加風場對比Fig.5 Comparison of wind field with and without wind field
圖6 流體、煙霧融合的細節(jié)對比Fig.6 Comparison of the details of fluid and smoke fusion
圖7為添加了鏡面以及不同數量煙霧的融合效果,在相同時間下,隨著煙霧數量增多,相鄰煙霧之間平滑地融合,且煙霧的融合速率并沒有降低。
圖8應用AABB包圍盒技術,使得煙霧模擬的空間展示不再單調。本文模擬了多種空間的煙霧融合,其中圖8(a)的模擬空間為立方體,圖8(b)的模擬空間為空心球體,圖8(c)的模擬空間為外八角方管內圓管環(huán)狀體。通過引入AABB包圍盒技術,實現(xiàn)多煙霧融合區(qū)域的網格劃分,增加多煙霧融合空間的表現(xiàn)形態(tài)。
圖7 不同條件下的煙霧融合效果Fig.7 Smoke fusion effect under different conditions
圖8 不同空間下的煙霧融合效果Fig.8 Smoke fusion effect in different spaces
為檢測改進的煙霧融合效率,表1為部分實驗的幀率,從表1可知,使用相同網格或粒子數的情況下,本文方法在實時性上更具有優(yōu)勢。
表1 場景幀率統(tǒng)計表Tab.1 Scene frame rate statistics
本文改進了可變風場中多煙霧融合實時繪制算法。通過加入的小尺度可變風場與改進的錯切變形繪制算法,不僅使得煙霧融合的速率得到了提升,還改善了煙霧融合的效果,使得多煙霧融合時更加平滑自然。另外本文引入了AABB包圍盒技術,增加了多煙霧融合時空間的表現(xiàn)形狀。在加入風場與未加風場的對比試驗中幀率增長了42%,在七彩煙霧融合場景中,本文方法使得七股煙霧之間的融合更加自然。從所設計的與前人相關研究成果的對比實驗可以看出,可變風場中多煙霧融合的繪制速度得到了提升,融合邊界更加自然,煙霧表現(xiàn)空間形態(tài)得到了豐富。