唐 勇,劉培藝,張 鵬,李 穎
1(燕山大學 信息科學與工程學院,河北 秦皇島 066004)
2(河北省計算機虛擬技術(shù)與系統(tǒng)集成重點實驗室,河北 秦皇島 066004)
E-mail:tangyong@ysu.edu.cn
自然景觀的模擬一直是計算機圖形學領(lǐng)域里一個非常重要的研究方向,降雨是日常生活中常見現(xiàn)象之一,雨場景在游戲特效、動漫制作及仿真駕駛等眾多領(lǐng)域具有廣泛應用.通過玻璃窗顯示雨場景以及對玻璃窗上的水滴運動進行模擬,對于逼真展示雨環(huán)境起著重要作用.
近年來,國內(nèi)外的學者對水滴的實時模擬做了很多工作,從水滴的建模到水滴與物體的交互等方面都進行了十分細致的研究.但在玻璃窗上水滴的運動效果模擬上,由于缺乏物理規(guī)律的考量,水滴在玻璃表面的運動行為難以靈活體現(xiàn)水滴的受力變化,缺失了一定的真實性.
2002年,Jonsson和Hast使用凹凸貼圖來模擬結(jié)構(gòu)化表面上的液滴流動,通過凹凸貼圖的法線矢量捕獲微結(jié)構(gòu)化表面的幾何形狀[1],但是不能呈現(xiàn)物理上水滴的真實流動過程.2003年,Sato等人采用圖形硬件模擬水滴,通過將水滴渲染為多邊形半球來創(chuàng)建水滴紋理,同時應用景深效果增強液滴的視覺質(zhì)量,清楚地顯示了不自然的個別半球[2],但由于使用卷積濾波器的方法計算深度場,速度較慢,無法獲得更準確的水滴運動效果.2005年,Wang等人提出一種基于物理的方法,該方法設(shè)定流體表面和固體交叉處的接觸角,通過虛擬表面修改水平集距離場,準確地計算接觸角,模擬水滴的各種形變[3],但由于使用稀疏網(wǎng)格,難以兼顧計算速度和水滴的運動模擬.2007年,Stuppacher和Supan基于高度圖創(chuàng)建紋理,然后將高度圖轉(zhuǎn)換為法線貼圖,使用基于菲涅耳模型的照明渲染水滴運動[4],但該方法無法正確處理快速流動的水滴和水流.2008年,Takenaka等人利用點精靈函數(shù)繪制紋理圖像,有效地渲染了水滴的外觀[5],但由于未對水流進行控制,導致水滴運動過程不自然.2010年,Thürey等人使用多尺度分析方法處理流體表面的不同張力問題,詳細地模擬了水滴表面[6],但張力的計算和渲染消耗較大,難以達到實時的要求.2012年,Zhang等人采用隱式平均曲率流算子模擬表面張力效應,構(gòu)造液滴形狀[7],但由于復雜的曲面操作,必須及時更新網(wǎng)狀連接以處理拓撲更改,計算復雜,使得水滴模擬的效率大幅下降.2013年,Chen等人結(jié)合粒子系統(tǒng)和高度圖計算玻璃板上水滴的形狀和運動[8],但由于沒有充分考慮水滴的物理性質(zhì),使得水滴的運動不夠真實.2015年,肖苗苗等人提出一種模擬虛擬人眼淚的方法,在預處理時將三維中的流淌仿真映射到二維空間,仿真時考慮到了相關(guān)作用力[9],但該方法基于一個連續(xù)的曲面,不能準確模擬水滴受力后的運動行為.2017年,Jeschke和Wojtan引入了一個基于波包理論的水波模擬算法,能夠穩(wěn)定地模擬水面上的雨滴波[10],但在雨場景的模擬上,僅考慮了水面的雨效果,其它并未做更多的探索和嘗試.2018年,Jeschke等提出了一種基于線性波理論的水波離散化方法,實現(xiàn)了水面雨滴波的動畫效果[11],但其同樣缺少對雨滴運動行為的模擬,在雨場景的模擬效果上有所欠缺.
綜上,據(jù)我們所知,目前對雨場景的模擬,更多側(cè)重于只模擬簡單的水流行為,而忽略了水滴在玻璃表面的形狀和運動會受到各種因素的影響,給水滴及其運動行為的真實性模擬提出了挑戰(zhàn).為解決上述問題,本文采用由隨機數(shù)確定的多個半球構(gòu)建具有不規(guī)則形狀的靜態(tài)水滴;考慮重力、風力、表面張力、水滴對物體表面的吸附力、空氣阻力等對水滴速度的影響;基于水滴受力模型和網(wǎng)格對水滴的親和度,引入風力因子和彎曲因子凸顯自然風和玻璃表面雜質(zhì)給水滴運動帶來的影響,展現(xiàn)了更加逼真的水滴運動細節(jié)效果.
在垂直的玻璃表面上,由于受到重力的影響,靜態(tài)水滴的形狀不是一個精確的球形.為了對水滴進行真實建模,采用離散環(huán)境中的粒子系統(tǒng).將玻璃表面劃分為N*N個小的四邊形網(wǎng)格,使用一個或多個半球模擬靜水滴的形狀.如圖1為單個網(wǎng)格內(nèi)水滴的橫截面圖,通過使用多個半球,我們可以模擬不同形狀的靜態(tài)水滴.
圖1 構(gòu)建靜態(tài)水滴
qi,j+1=qi,j+di,jui,j
(1)
水滴的移動取決于使水滴向下彎曲的各種因素,玻璃窗上水滴粒子的運動由作用在水滴上的外力決定,設(shè)G與Fw為重力和風力,Ff為摩擦力,Fadh表示水滴對玻璃表面的吸附力,Ften為表面張力.
FN為水滴受到的壓力,計算為:
FN=Ften+Fadh
(2)
此時可得到水滴受到的滑動摩擦力大小為:
|Ff|=μ|FN|
(3)
Fsum(t)=Ff+G+Fw
(4)
則可得水滴此時的加速度a(t)為:
a(t)=Fsum/m
(5)
一個流動水滴的速度值計算并不依賴于水滴的質(zhì)量,但在現(xiàn)實世界中會受到空氣阻力的影響,為了獲得更真實的速度值模擬,引入空氣阻力控制因子ζ.速度值v可由(6)式進行計算:
v=(1-ζ)(v0+a(t))
(6)
其中v0是水滴落在玻璃窗上時的速度.
水滴流動的路徑大部分由作用在水滴上的合外力決定,玻璃窗上真實水流的運動軌跡是蜿蜒的,而不是直接向下運行,其曲折路徑是由于玻璃表面上的雜質(zhì)造成的.為了使水滴運動模擬更加真實,綜合考慮水滴受力和相鄰網(wǎng)格對水的親和度共同確定水滴的運動方向.
圖2 水滴移動方向
計算考慮上述兩個因素的每個方向的運動概率,其結(jié)果表示水滴按給定方向向網(wǎng)格移動的概率.每個區(qū)域的概率與面積成正比,最終通過八個方向的面積和隨機數(shù),從所有方向中選擇一個作為水滴運動的方向.
3.2.1 計算基于水滴受力運動的概率
玻璃表面上水滴受力運動遵循牛頓運動定律時,網(wǎng)格中水滴的路徑可以用牛頓運動方程表示:
(7)
其中x(t)是水滴在t時刻的位置,求解方程(7),就可以找到位置p,p為水滴穿過網(wǎng)格邊界時的位置,Vp為水滴到達p點時的速度.
(8)
其中Dk(k=1,…,8)是基于水滴受力運動的概率,dk為指向相鄰網(wǎng)格中心的向量,|dk×Vp|表示兩個向量dk和Vp叉乘的強度.
3.2.2 計算基于親和度的概率
為了模擬由于雜質(zhì),小劃痕等導致的玻璃表面的不均勻特性,預先為每個網(wǎng)格點分配對水的親和度,以便呈現(xiàn)出水流曲折的效果.
(9)
3.2.3 計算運動方向
首先,通過求得的兩個概率Dk和Ak計算相鄰八個區(qū)域的面積.由于水滴的速度越大,主矢量Vp移動的概率就越高,考慮到這種影響,基于水滴受力運動的概率由主矢量的長度加權(quán)有:
(10)
其中Rk(k=1,…,8)是相鄰八個區(qū)域的面積,γ1為風力因子,控制水滴運動軌跡受風力的影響程度,同時添加人工參數(shù)δ進行校正.γ2為彎曲因子,控制水流的彎曲程度.
然后,找到滿足以下條件的索引p(p=1,…,8):
(11)
實驗在windows 10操作系統(tǒng),Unity3D 平臺下進行,硬件環(huán)境為:Intel(R)Core(TM)i7-6700 CPU @3.40GHz,32GB,顯卡為NVIDIA GeForce GTX 960.通過充分的實驗對比,驗證本文方法的真實性與實時性.
圖3分別展示了受空氣阻力控制因子和受彎曲因子影響的水滴的運動軌跡.圖3(a)-圖3(c)為空氣阻力控制因子的值逐漸增大的模擬結(jié)果,水滴受到的空氣阻力越大,運動的速度就越小,在玻璃窗上的運動軌跡越短.由于考慮了空氣阻力導致的數(shù)值耗散,使得水滴的運動效果更加自然,畫面更為逼真.圖3(d)-圖3(f)為三種不同彎曲因子值的模擬結(jié)果.彎曲因子的值越大,水滴運動軌跡呈現(xiàn)更多的彎曲變化.
圖3 不同參數(shù)下水滴運動效果對比圖
圖4展示了受風力因子影響的水滴的運動軌跡.圖4(a)-圖4(d)為四種不同風力因子值的模擬結(jié)果.風力因子的值越大,水滴運動受風力影響越大,偏移角度越大,其中值的正負僅代表方向,正值為向右的橫向風,負值為向左的橫向風.
圖4 不同風力因子下水滴運動效果對比圖
圖5中,圖5(a)為本文建立的水滴運動效果圖,圖5(b)為真實雨環(huán)境下的水滴運動軌跡.與真實效果相比,本文方法可以清晰的展現(xiàn)水滴運動特性.
圖5 真實水滴運動效果對比圖
圖6(a)和圖6(b)分別展示了文獻[8]和使用本文方法模擬玻璃窗上水滴運動的效果.文獻[8]只計算了水滴的重力和摩擦力,而本文在此基礎(chǔ)上還考慮到了水滴在運動過程中所受的空氣阻力和風力作用,與文獻[8]相比能更好地還原水滴運動的真實物理特性.
圖6 水滴運動模擬與對比
圖7分別展示了文獻[10],文獻[11]和本文對水面雨環(huán)境的模擬效果.文獻[10]和文獻[11]都只模擬了水面上的雨滴波,而本文在雨滴波的基礎(chǔ)上,增加對玻璃窗上水滴粒子運動的模擬,效果更為豐富,使得雨環(huán)境更加真實和自然.
圖7 水面雨環(huán)境模擬與對比
表1列舉了不同實驗場景的渲染幀速率,實驗結(jié)果表明本文方法的實時性,有效地進行水滴運動模擬.
表1 不同實驗場景的執(zhí)行結(jié)果
Table 1 Execution results of different experimental scenarios
場景粒子數(shù)空氣阻力系數(shù)風力因子數(shù)彎曲因子值幀速(FPS)5(a)10k0.200.300.5085.20文獻[8]0.5k---526.326(b)10k0.711.000.2083.207(c)10k0.18-0.300.4084.70
針對水滴在玻璃窗上運動效果真實感較差的問題,本文提出一種水滴運動控制的實時模擬方法.通過使用多個半球進行靜態(tài)水滴建模,成功地解決了水滴形狀單一的問題;在水滴的速度計算過程中,以水滴真實受力模型為基礎(chǔ),引入空氣阻力控制因子,改善了水滴在玻璃表面上運動長度不可控的現(xiàn)狀,增強了水滴運動模擬的真實性;提出綜合考慮水滴受力運動和相鄰網(wǎng)格對水的親和度共同計算水滴運動方向,避免了與實際情況不符的水滴運動行為,同時結(jié)合自定義的風力因子和彎曲因子,凸顯出自然風和玻璃表面雜質(zhì)對水滴運動方向的影響,獲得更加真實可控的水滴運動效果.
在未來工作中,將繼續(xù)對玻璃窗上水滴的運動控制進行研究,包括玻璃窗表面粗糙度對水滴尾部褪色的影響,玻璃窗平移或旋轉(zhuǎn)對水滴運動行為的影響等,完善水滴運動細節(jié),進一步在流固界面動力學模擬方面做有益探索.