包雪怡
摘要:在3D水下場景渲染中融入流場的模擬可視化是增強現(xiàn)實領(lǐng)域近年來研究工作的重點之一。水下流場模擬可視化框架,包括流場模擬和可視化渲染繪制兩部分。流場模擬基于N-S方程,溫度為唯一的輸入?yún)?shù)。為了更準(zhǔn)確描述水體溫差、密度不均勻?qū)е碌膶α鳜F(xiàn)象,浮力作為流上下浮動的外力項;同時,通過波浪擾動項描述流和水面波動的一致性。可視化渲染繪制部分,采用基于紋理的直接體渲染(Direct Volume Rendering, DVR)和一維的轉(zhuǎn)移函數(shù)(transfer-function)描述流場特征,展現(xiàn)時變流場數(shù)據(jù)(溫度,速度,壓強等)??蚣芡ㄟ^GPU引擎對上述算法進(jìn)行加速,結(jié)合上帝之光實時模擬可視化時變流場的擾動效果,滿足場景實時交互可視化渲染繪制需求。
關(guān)鍵詞:水下場景;流場模擬;體渲染;可視化;增強現(xiàn)實
中圖分類號:TP319.41? ? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)19-0223-03
穿過水面的光線會與水中粒子發(fā)生碰撞形成上帝之光和焦散等奇妙的光學(xué)現(xiàn)象。同時溫度、密度和壓強等的變化會引起水體內(nèi)對流和擴散等現(xiàn)象。隱藏在這些現(xiàn)象下的本質(zhì)就是流體動力學(xué)。流模擬需要昂貴的計算開銷,而且渲染繪制流體不能依賴傳統(tǒng)的基于光柵化渲染平臺實現(xiàn),因此實時流動態(tài)模擬可視化渲染繪制仍然是一個具有挑戰(zhàn)性的課題。
本文構(gòu)建水下流場模擬可視化框架,實現(xiàn)水下場景中流擾動過程的模擬和可視化渲染繪制。模擬陽光穿透水面和水流發(fā)生相互作用時產(chǎn)生的復(fù)雜的光學(xué)現(xiàn)象,結(jié)合體渲染和后處理體積光生成算法增強流特征。
文章從下面幾部分介紹相關(guān)工作:流場模擬可視化框架,包括流場模擬N-S方程求解、基于紋理的直接體渲染,實驗結(jié)果分析、未來的改進(jìn)方向等。
1 研究背景
流場模擬技術(shù)可歸納為兩個范疇:基于粒子的拉格朗日方法和基于網(wǎng)格的歐拉方法。本文流場模擬采用基于網(wǎng)格的歐拉方法。
Stam [1]是第一位采用網(wǎng)格歐拉方法模擬流現(xiàn)象的研究者。歐拉流場模擬方法遵循克林形式(Chorin-style),采用操作符分割方法和對流-投影方法來對流施加不可壓縮的條件限制。傳統(tǒng)的對流-投影框架采用半拉格朗日對流方法,該方法可提供無條件的穩(wěn)定性。近十年來許多基于該框架的方法被提出用以處理不同的流場模擬問題。Kang et al. [2] 引進(jìn)了一個GFM(GhostFluidMethod)方法模擬多種狀態(tài)的不可壓縮流體,該方法被Hong and Kim[3]采用對流體的表面變化進(jìn)行追蹤,采用半拉格朗日對流和粒子集(PLS)擴展了該方法。Kang et al.[4]擴展了GFM,模擬可融合和不可融合的流之間的相互作用。基于網(wǎng)格的流場模擬方法也被用來模擬高粘度的流現(xiàn)象。Carlson et al.[5]在MAC(Mark And Cell)框架上采用一個隱式的粘度方程來模擬高粘度的流和融化效果。Goktekin et al[6]采用黏性和塑性系數(shù)模擬粘彈性的流現(xiàn)象。最近,Larionov et al[7]在一個壓力-粘度求解器中采用基于網(wǎng)格的離散化方法來模擬高粘度的牛頓流體。
為兼顧性能和渲染質(zhì)量,本文采用基于屏空間的體渲染方法來渲染時變3D流體數(shù)據(jù)。
2 流場模擬可視化框架
本文框架包含大量的紋理渲染技術(shù),由可編程著色器實現(xiàn),N-S方程求解的流體動力學(xué)運算采用CUDA加速。為渲染一個真實的水下場景以增強流體渲染的視覺沖擊力,框架還包括水面的建模和渲染、水下焦散和上帝之光的模擬??蚣芙Y(jié)構(gòu)如圖1所示:
2.1流體動力學(xué)方程求解
本文采用基于網(wǎng)格的流場模擬方法對N-S方程進(jìn)行求解。為了展現(xiàn)水下流和水面一致的波動,在N-S方程中加入波浪擾動和浮力兩個外力項。波浪擾動項描述風(fēng)對水體的推動而形成的加速度,浮力項模擬水體中溫差引起的對流現(xiàn)象??蚣軐崿F(xiàn)的流場模擬被限制在一個3D的立方體區(qū)域內(nèi)。假設(shè)流的體積在水中的特定深度保持不變,水中流的運動可以由不可壓縮流體的N-S方程來描述:
2.2直接體渲染
流體數(shù)據(jù)集(速度和溫度)存儲在3D數(shù)組中,數(shù)據(jù)集的每一幀采用公式(1)得到的速度場進(jìn)行更新,采用DVR技術(shù)可視化渲染時變流體數(shù)據(jù)。公式(14)計算沿視線方向累積光強和模糊度,其中[Ci]是樣本點顏色,[Aj]是模糊度,用來模擬光線到達(dá)樣本點j的衰減狀況:
3 結(jié)論
水下流場模擬可視化框架采用OpenGL和GLSL實現(xiàn)??蚣軐︿秩竞C婧退鹿庹詹捎玫姆ň€貼圖方式實現(xiàn)參數(shù)化控制。計算量最大的部分是流體動力學(xué)方程的求解。其中FFT法線貼圖的計算在Cuda上進(jìn)行。在一張64╳64的2D網(wǎng)格上生成FFT波浪,在一張64╳64╳[64]的網(wǎng)格上模擬流和采用DVR可視化流特征。為了兼顧效果和性能,在低分辨率的網(wǎng)格上生成波浪高度場,采用高分辨率的法線貼圖渲染水面。當(dāng)法線貼圖的分辨率增加后,海面會呈現(xiàn)更多高頻的波浪,水下也可以看到更多波動的細(xì)膩光束,如圖8所示。為了求解流體動力學(xué)方程,本文采用30次雅各比迭代來求解擴散項,采用50次迭代進(jìn)行投影操作。根據(jù)實驗結(jié)果,在計算擴散項時,采用20次以上的迭代可以得到比較小的誤差。在本文的模擬中,[?x]=[?y=?z]=1/64=0.0156,dt = 0.1,粘度系數(shù)[γ]=0.001。
參考文獻(xiàn):
[1] Stam J. Stable Fluids[C].Siggraph,1999,99:121-128.
[2] Kang M, Fedkiw R P, Liu X D. A boundary condition capturing method for multiphase incompressible flow[J]. Journal of Scientific Computing,2000,15(3):323-360.
[3] Hong J M, Kim C H. Discontinuous fluids[C].ACM Transactions on Graphics (TOG).ACM,2005,24(3):915-920.
[4] Kang N, Park J, Noh J, et al. A hybrid approach to multiple fluid simulation using volume fractions[C].Computer Graphics Forum.Wiley/Blackwell(10.1111),2010,29(2):685-694.
[5] Carlson M, Mucha P J, Van Horn III R B, et al. Melting and flowing[C].Proceedings of the 2002 ACM SIGGRAPH/Eurographics symposium on Computer animation.ACM,2002:167-174.
[6] Goktekin T G, Bargteil A W, O'Brien J F. A method for animating viscoelastic fluids[C].ACM Transactions on Graphics (TOG).ACM,2004,23(3):463-468.
[7] Larionov E, Batty C, Bridson R. Variational stokes: a unified pressure-viscosity solver for accurate viscous liquids[J].ACM Transactions on Graphics (TOG),2017,36(4):101.
[8] Mitchell J. Light shafts: Rendering shadows in participating media[C].Game Developers Conference,2004.
【通聯(lián)編輯:朱寶貴】