(上海交通大學(xué) 軟件學(xué)院,上海 200240)
流體現(xiàn)象是在我們生活中隨處可見的物理現(xiàn)象,而流體動畫模擬在藝術(shù)與工業(yè)界也存在著廣泛的應(yīng)用,例如在影視特效制作、游戲模擬、災(zāi)難仿真[1]等應(yīng)用場景中都有著重要的應(yīng)用價值.如何逼真地模擬大規(guī)模煙霧、水流、沙流等眾多自然流體現(xiàn)象,是計算機圖形學(xué)的重要研究方向之一.但是,隨著人們對電影、游戲等視覺效果要求的提高,以及工業(yè)需求及實際應(yīng)用的不斷深化與增長,各種傳統(tǒng)的流體動畫模擬方法面臨著越來越多的挑戰(zhàn).
近些年來,隨著業(yè)界對流體動畫模擬的計算精度、模擬質(zhì)量與規(guī)模的要求越來越高,所需要的計算資源也呈爆炸式增長.眾多研究者也將所關(guān)注的焦點和難點集中在如何利用有限的計算資源,快速地模擬出高質(zhì)量、高精度、大規(guī)模的流體動畫場景上.更進(jìn)一步地,在游戲和虛擬現(xiàn)實等實時交互應(yīng)用不斷深入和推廣的需求這一情況下,眾多用戶對流體動畫特效提出了前所未有的實時性要求,這在允許降低精度和質(zhì)量要求的前提條件下,在流體動畫模擬算法的規(guī)模和速度上提出了更高的要求.而由于高質(zhì)量流體動畫模擬過程耗費了大量時間,一旦模擬效果不佳,用戶可能需要在調(diào)整參數(shù)后重新計算,而原有的計算結(jié)果通常不能再用,這樣也會浪費大量的計算資源以及可利用的數(shù)據(jù)資源.
在傳統(tǒng)的兩大主流流體模擬算法,即拉格朗日粒子法與歐拉網(wǎng)格法中,拉格朗日粒子法將流體視為大量運動的流體微團(tuán),通過描述每個微團(tuán)的具體位置、溫度等變量隨著時間的變化情況來描述流體運動.拉格朗日法的計算速度快,但存在難以保持流體的不可壓縮性和難以進(jìn)行液體表面重構(gòu)與渲染等缺點,其主要代表為Muller 等人引入到流體動畫中的SPH 方法[2].而歐拉網(wǎng)格法最早由Foster 等人[3]引入流體動畫領(lǐng)域,由Stam 提出采用半拉格朗日對流法[4],建立了無條件穩(wěn)定的經(jīng)典模擬框架,并由Fedkiw 等人[5]加以完善和發(fā)展.該類方法在空間均勻分布觀測點網(wǎng)格,通過描述每個時刻流體變量在這些觀測點上的值的變化來描述流體的運動.拉格朗日方法和歐拉方法求解的是Navier-Stokes 方程的不同形態(tài),而歐拉法相對于拉格朗日粒子法可更方便地進(jìn)行數(shù)值分析和探索,本文將側(cè)重于歐拉網(wǎng)格方法的研究和總結(jié).
相較于傳統(tǒng)的物理模擬方法,基于數(shù)據(jù)驅(qū)動的算法也在各個領(lǐng)域產(chǎn)生了巨大影響.隨著大數(shù)據(jù)技術(shù)與機器學(xué)習(xí)眾多方法的快速發(fā)展,數(shù)據(jù)驅(qū)動方法已在各個領(lǐng)域中廣泛應(yīng)用.特別是在物理建模的相關(guān)領(lǐng)域內(nèi),已經(jīng)產(chǎn)生了廣泛的使用場景,例如在三維物理模型轉(zhuǎn)化變形[6,7]應(yīng)用中、三維模型重建及表面重建[8,9]應(yīng)用中、幾何材料設(shè)計[10,11]應(yīng)用中等.而在流體動畫模擬領(lǐng)域內(nèi),基于數(shù)據(jù)驅(qū)動的眾多算法也產(chǎn)生了廣泛應(yīng)用(第2 節(jié)將詳細(xì)加以介紹).多數(shù)基于數(shù)據(jù)驅(qū)動的流體模擬算法主要的核心目標(biāo)為加速流體模擬過程,利用已有的流體數(shù)據(jù),大幅提升流體模擬速度,快速增加流體細(xì)節(jié).尤其是在深度學(xué)習(xí)技術(shù)的驅(qū)動下,流體模擬的計算效率有了極大的提高,也是將來流體模擬算法的重要研究趨勢之一.接下來,本文首先對傳統(tǒng)的流體動畫算法,特別是幾類主要的流體動畫模擬的加速算法進(jìn)行相關(guān)總結(jié)和分析,隨后,在此基礎(chǔ)上,本文重點就基于數(shù)據(jù)驅(qū)動的各類模擬算法作進(jìn)一步的討論.
基于物理的流體動畫模擬是基于Navier-Stokes 方程(下文簡稱N-S 方程)進(jìn)行求解處理的[12].由于該方程是一個描述粘性不可壓縮流體動量守恒的非線性偏微分方程,且在數(shù)學(xué)意義上還沒有精確解析解,因此目前眾多流體動畫模擬算法中采用的都是離散形式的數(shù)值解.歐拉網(wǎng)格法的模擬效果直接依賴于網(wǎng)格的精度,針對高質(zhì)量、高精度、大規(guī)模的流體動畫模擬,如何有效地加速歐拉網(wǎng)格法的模擬過程,一直是人們面臨的挑戰(zhàn).
在歐拉網(wǎng)格法的經(jīng)典框架中,一般分為對流步、外力步、投影步等步驟[4]來計算,而歐拉網(wǎng)格法的主要計算瓶頸在于投影步泊松方程的求解.
為了保證流體的不可壓縮性(incompressibility),基于物理的流體模擬計算方法大多需要計算投影步所產(chǎn)生的泊松方程,具體公式為
從而得到關(guān)于求解壓強場p的大型線性方程組:
其中,系數(shù)矩陣A為稀疏對稱正定矩陣.公式(2)為二維情況下的泊松方程(1)的離散形式,形成了一個大型稀疏線性方程組(3).但在三維情況下,所形成的線性系統(tǒng)維度與網(wǎng)格精度為平方關(guān)系,也即:如果網(wǎng)格離散精度為1024×1024×1024 求解該泊松方程(1),則流體模擬所形成的線性方程組維度為10243×10243,亦即A是大小為10243×10243的矩陣.如此巨大的線性系統(tǒng),需要非常有效的求解方法來處理.
投影步泊松方程(公式(3))的求解常用的預(yù)處理共軛梯度法(PCG)對于小規(guī)模計算收斂快且易于實現(xiàn),但在處理大規(guī)模網(wǎng)格計算時,收斂速度會變慢[13].因此,很多流體模擬算法針對投影步泊松方程的求解提出了一系列的優(yōu)化與改進(jìn)策略.例如,McAdams 等人使用了多重網(wǎng)格作為共軛梯度法的預(yù)處理過程[14],場景規(guī)模較大時加速效果比較明顯.同時,我們還可結(jié)合并行算法[14-16]進(jìn)一步提速.而GPU 技術(shù)[17]也被用于多重網(wǎng)格泊松解算器中,以提高投影步的計算效率.例如:Molemaker 等人[18]結(jié)合了IOP(iterated orthogonal projection)算法與多重網(wǎng)格法去求解投影步方程,并利用GPU 并行將效率提高了一個數(shù)量級;Jung 等人[19]提出的基于CPU-GPU 的多重網(wǎng)格泊松解算器,也較為有效地提高了泊松方程的計算效率.而陳曦等人[20]利用GPU 實現(xiàn)了流體場景的實時模擬,并且將GPU 技術(shù)應(yīng)用到帶有復(fù)雜邊界的三維實時流體模擬算法中[21].同樣,在火焰模擬中也有GPU 并行算法[22,23]的應(yīng)用.特別地,Lentine 等人[24]提出的粗網(wǎng)格投影方法大幅加速了泊松方程在整體流體模擬計算中的計算過程,但同時也降低了仿真精度.最近,Yang 等人[25]提出了快速迭代正交投影方法,其算法可在一定程度上減少迭代次數(shù),使得方程計算快速收斂到所需模擬精度.而文獻(xiàn)[26]與文獻(xiàn)[27]均基于舒爾補(Schur complement),提出了相應(yīng)的并行加速方法,較為有效地從并行層面上加速了泊松方程的求解過程(如圖1 所示).
Fig.1 Parallel solver using Schur complement—Parallel Poisson solver圖1 利用Schur Complement 進(jìn)行并行解算——并行泊松解算
但是,不論是利用多重網(wǎng)格作為共軛梯度的預(yù)計算方法[14],還是利用并行加速方法[27,28],對于求解投影步中所涉及到的泊松方程的求解,也即大型稀疏線性方程組的求解,傳統(tǒng)的方法均無法避免直接或者迭代地求解[29,30].這對于需要反復(fù)調(diào)參追求最佳流體模擬效果的動畫媒體設(shè)計師來說,所需要耗費的重復(fù)計算的時間成本是巨大的.
使用復(fù)合網(wǎng)格格式求解泊松方程是另一種常見的流體模擬加速方法.普通的流體仿真大多采用均勻網(wǎng)格或者均勻交錯網(wǎng)格[31]的方式,例如公式(2)所依據(jù)的離散網(wǎng)格即為均勻網(wǎng)格.但無論是均勻網(wǎng)格還是交錯網(wǎng)格,隨著網(wǎng)格精度的增加,其計算耗時均呈爆炸式增長,使用復(fù)合網(wǎng)格則是將更多的計算資源分配在更感興趣的區(qū)域,在保持重要細(xì)節(jié)的同時,加速計算過程.例如,Losasso 等人[32]利用八叉樹數(shù)據(jù)結(jié)構(gòu)創(chuàng)建了計算網(wǎng)格,在細(xì)節(jié)較多、較明顯的區(qū)域使用精細(xì)網(wǎng)格,而在流場較穩(wěn)定的區(qū)域使用稀疏網(wǎng)格.Feldman 等人[33]通過優(yōu)化四面體網(wǎng)格生成來減少一定的計算量,而Klingner 等人[34]則利用動態(tài)網(wǎng)格(meshes)來加速泊松方程的求解過程.Irving 等人[35]通過應(yīng)用非均勻自適應(yīng)網(wǎng)格來減少計算單元個數(shù).Chentanez 等人[36]在水體表面采用普通網(wǎng)格,內(nèi)部使用長方體高度網(wǎng)格.Yu 等人[37]結(jié)合粒子法與動態(tài)四叉樹技術(shù),在大規(guī)模地形上實現(xiàn)了視線相關(guān)的可變尺度的江河流動效果.Zhu 等人[38]采用變步長網(wǎng)格,在所關(guān)注區(qū)域設(shè)置精細(xì)步長網(wǎng)格,其他位置設(shè)置稀疏步長網(wǎng)格.Da 等人[39]則主要關(guān)注流體的表面計算(如圖2 所示).
但是,使用復(fù)合網(wǎng)格的問題在于,對于不同的流體場景魯棒性較差,而且維護(hù)不同形狀網(wǎng)格的過程比較復(fù)雜,同時,在計算精度上也存在不同程度的損失.
Fig.2 Fluid solvers using composite grid structures圖2 流體求解的復(fù)合網(wǎng)格結(jié)構(gòu)
模型縮減法(降維)也是一類加速泊松方程的常見算法.在實現(xiàn)降維的過程中,淺水方程的應(yīng)用較為常見.Wang 等人[40]用淺水場方程代替三維N-S 方程來模擬物體表面上的流動,而Thurey 等人[41]結(jié)合了高度場和SPH方法,實現(xiàn)了卷浪花的效果和淺水區(qū)域的實時模擬.而在模型縮減方法中,Treuille 等人[42]在SIGGRAPH 的論文中引入了模型縮減法,實現(xiàn)了大規(guī)模的實時流體模擬.其基本思想是:將原本的高維度速度場縮減到低維度的基函數(shù)子空間,然后在子空間上用縮減模型求解泊松方程.而Wicke 等人[43]則進(jìn)一步通過模塊化思想對場景進(jìn)行分塊計算,實現(xiàn)了場景的局部拼板式重組.文獻(xiàn)[44]中,Kim 等人利用Cubature 方法在子空間上實現(xiàn)了半拉格朗日對流,在子空間上重新模擬出原數(shù)據(jù)結(jié)果.同時,人們也為流體動畫的模型縮減方法提出了各種基函數(shù),例如Legendre 多項式[45]、三角函數(shù)[46]以及能夠保持無散性的拉普拉斯特征向量[47].Ando 等人[48]則提出一個新的基于集合降維技術(shù)來加速流體方程的計算過程.最近,針對模型縮減的數(shù)值耗散問題,Liu 等人[49]提出一種模型縮減的變分積分方法來改善模擬細(xì)節(jié)(如圖3 所示).
Fig.3 Dimensionality reduction圖3 降維計算
由于此類算法在縮減后的變量個數(shù)不依賴于空間精度,從而實現(xiàn)了大幅度的加速.但代價是大幅降低了模型的計算準(zhǔn)確度,數(shù)值耗散大,在視覺效果上有很大缺失,甚至不能重現(xiàn)原始數(shù)據(jù)的結(jié)果,且應(yīng)用場景不能變換,場景普適性仍然較差.
在流體模擬仿真的加速算法中,還有一類算法主要關(guān)注于低精度網(wǎng)格模擬結(jié)合細(xì)節(jié)合成算法,生成高精度結(jié)果.
1.4.1 形態(tài)引導(dǎo)方法
針對低精度流體模擬算法,較為典型的為流體形態(tài)引導(dǎo)(guiding)方法.這里,由于高-低精度網(wǎng)格所產(chǎn)生的流體動畫存在著巨大的差異,即使在相同的模擬參數(shù)條件下,不同的模擬精度仍然會導(dǎo)出差異巨大的模擬結(jié)果.針對這一問題,Nielson 小組提出了一系列新的算法[50-52],使用低精度動畫引導(dǎo)高精度動畫,使得高精度動畫結(jié)果與低精度動畫的整體形態(tài)保持一致,從而分別引導(dǎo)煙霧和液體的高精度模擬.Huang 等人[53]隨后也提出了利用預(yù)覽動畫的采樣特征進(jìn)行模擬引導(dǎo)的方法.Yuan 等人[54]則介紹了基于預(yù)覽動畫提取流體骨架特征的方法,利用這些流體骨架,驅(qū)動高精度動畫模擬.文獻(xiàn)[25]提出的基于信號處理的快速投影方法嘗試著在保持流體形態(tài)的前提下進(jìn)行模擬加速.Yang 等人[55]則結(jié)合路徑、邊界和形狀引導(dǎo)力同時控制煙霧的形狀和生成路徑.Pan 等人[56]提供了一種液體模擬的直觀和交互式控制方法,在液體控制上有一定的效果.Gregson 等人[57]把流體跟蹤的逆問題作為一個約束流問題來處理,探討了流體捕獲、模擬和計算近似方法之間的聯(lián)系.Pan 和Manocha[58]將流體控制問題作為PDE 約束的時空優(yōu)化問題來考慮,并且計算局部最優(yōu)控制力作為KKT 條件的穩(wěn)定點,他們還提出了基于優(yōu)化的運動規(guī)劃算法[59],用于液體控制.楊賁[60]在其博士論文中詳細(xì)闡述了形狀可控的煙霧模擬.最近,Inglis 等人[61]將圖像處理和機器學(xué)習(xí)領(lǐng)域中的原始-對偶方法引入到了流體控制當(dāng)中,主要關(guān)注了流體導(dǎo)向和邊界條件兩個主要問題.
此類引導(dǎo)方法雖然可以使高精度模擬與低精度模擬具有相似的結(jié)果,但卻丟失了高精度流體模擬的物理正確性,同時還增加了高精度模擬的開銷,圖4 所示為Huang 等人[53]提出的利用預(yù)覽動畫的采樣特征進(jìn)行模擬引導(dǎo)的方法結(jié)果,從結(jié)果圖中可以看出:在物理形狀和形態(tài)上,中、右(高精度-低精度引導(dǎo))子圖之間相差很大.
Fig.4 Shape guiding method (result from Ref.[53])圖4 形態(tài)引導(dǎo)方法(文獻(xiàn)[53]中的部分結(jié)果)
1.4.2 細(xì)節(jié)合成方法
在細(xì)節(jié)合成技術(shù)方面,過程化湍流方法很好地耦合了基于低精度流體動畫的模擬.為了加速生成高頻流體細(xì)節(jié),人們首先利用低分辨率網(wǎng)格模擬,然后通過細(xì)節(jié)合成算法,達(dá)到快速的高精度流體模擬的效果.例如:Stam等人[62]提出了基于微小尺度湍流的細(xì)節(jié)增強方法;Rasmussen 等人[63]則引入了一個二、三維流體速度場組合的框架;文獻(xiàn)[64]中,Bridson 等人將Curl 噪聲應(yīng)用在流體細(xì)節(jié)的產(chǎn)生工作中;Kim 等人[65]提出了一種基于小波湍流的流體細(xì)節(jié)生成算法,很大程度上推動了此類算法的發(fā)展;Narain 等人[66]將Kolmogorov 譜的湍流概念引入流體細(xì)節(jié)增強工作中;而在文獻(xiàn)[67]中,Pfaff 等人基于人工邊界層來合成湍流,同時,他們還進(jìn)一步提出了各向異性湍流[68];Boyd 等人[69]通過在液體表面增加擾動,使一些細(xì)節(jié)能夠更加明顯;Zhao 等人[70]試圖將變分算法集成到基本流求解器中,并產(chǎn)生湍流效果;He 等人[71]提出了一種自適應(yīng)的渦旋參數(shù)方法,隨后,他們又進(jìn)一步改進(jìn)了這一方法[72],保證了其算法的數(shù)值穩(wěn)定性;文獻(xiàn)[73]則提出了基于流引導(dǎo)紋理細(xì)節(jié)合成方法;商柳等人[74]提出了一種骨架驅(qū)動的方法以合成近岸涌浪動畫.
細(xì)節(jié)合成算法可以產(chǎn)生一些較為精細(xì)的動畫效果,如圖5 所示為細(xì)節(jié)合成算法[65]的模擬結(jié)果,其合成結(jié)果是基于低精度網(wǎng)格模擬結(jié)果之上,利用小波湍流性質(zhì)進(jìn)行了細(xì)節(jié)添加,在效果上有了很大的提升.但是此類方法的結(jié)果缺少高精度網(wǎng)格模擬的物理正確性,不適合精確性和物理性要求較高的模擬應(yīng)用.例如,圖6 所展示的是利用細(xì)節(jié)合成算法[65]所產(chǎn)生的高分辨率合成結(jié)果(如圖6(a)所示)與高分辨率結(jié)果(如圖6(b)所示).雖然細(xì)節(jié)合成結(jié)果可以添加大量細(xì)節(jié),但在總體物理形態(tài)上受限于低分辨率結(jié)果,相較于高精度差距仍然非常大.
Fig.5 Result from the detail synthesis method (wavelet turbulence)[65]圖5 細(xì)節(jié)合成算法(wavelet turbulence)[65]中的部分結(jié)果
Fig.6 Result from the detail synthesis method (wavelet turbulence)[65]圖6 細(xì)節(jié)合成算法(wavelet turbulence)[65]的結(jié)果
下面就基于數(shù)據(jù)驅(qū)動的各種算法在流體動畫模擬中的應(yīng)用進(jìn)行詳細(xì)的討論.本文將分如下3 類算法加以討論,分別為基于數(shù)據(jù)的插值法、基于數(shù)據(jù)的預(yù)計算法和基于數(shù)據(jù)的深度學(xué)習(xí)法.
在近年來流體動畫的眾多優(yōu)秀算法中,圍繞利用預(yù)先計算好的流體數(shù)據(jù)來快速生成新的結(jié)果這一思路,學(xué)術(shù)界也涌現(xiàn)出一批通過預(yù)計算數(shù)據(jù)對在線模擬過程進(jìn)行大幅加速的方法.
關(guān)鍵幀插值法就是其中一類,這類算法利用已有流體數(shù)據(jù)的方法對已有數(shù)據(jù)進(jìn)行插值生成新結(jié)果,類似于傳統(tǒng)動畫的關(guān)鍵幀插值方法.Zhang 等人[75]利用一種時空外插函數(shù)對低精度和高精度的模擬結(jié)果進(jìn)行插值,以獲得新的模擬效果.而文獻(xiàn)[76]則通過已生成的不同形態(tài)的流體表面幾何數(shù)據(jù),提出了結(jié)合時空的非剛性迭代最近點算法以尋找兩幀間的對應(yīng)關(guān)系,插值出中間幀的流體幾何.Colin 等人[77]采用加權(quán)無震蕩空間離散(WENO)方法進(jìn)行插值,可達(dá)到4 階、6 階精度.Jeschke 和Wojtan[78]則通過插值計算波前參數(shù)模擬海洋液體.Thuerey 等人[79]在近期提出的利用隱式歐拉表示結(jié)合光流法的流體插值方法避免了人工輸入等缺點,可以應(yīng)用于表面細(xì)節(jié)的體積變形及拓?fù)渥兓牧黧w場景.但這類插值方法能夠生成的新結(jié)果比較局限于原始數(shù)據(jù),結(jié)果局限于比較相似的關(guān)鍵幀(如圖7 所示).
Fig.7 Result from the key-frame interpolation method[79]圖7 關(guān)鍵幀插值算法[79]的部分結(jié)果
針對拉格朗日粒子法的加速,文獻(xiàn)[80]提出了針對游戲交互中僅有少量流體狀態(tài)被頻繁訪問的特點建立了狀態(tài)圖,采用SPH 方法預(yù)計算生成流體數(shù)據(jù),當(dāng)游戲運行時,訪問狀態(tài)圖得到最匹配的流體狀態(tài),實現(xiàn)了在手機上的預(yù)計算加速.Jeong 等人則將SPH 方法的流體模擬過程視為一個回歸問題[81](如圖8 所示),在預(yù)處理步驟中,通過歷史數(shù)據(jù)訓(xùn)練回歸森林,訓(xùn)練完成后,輸入鄰域粒子的狀態(tài),然后根據(jù)回歸森林快速得到當(dāng)前粒子下一幀的近似速度值.在算法的運行效率上,該算法相較于傳統(tǒng)PBF 法[82]其加速比達(dá)到了30 倍(CPU),相較于PCISPH法[83]更是達(dá)到了300 多倍的加速比.但該方法以犧牲模擬精度為代價,并且外插能力弱,對不同場景不具有普適性,僅局限于拉格朗日粒子法.
Fig.8 圖8
總體來看,現(xiàn)有基于數(shù)據(jù)的流體模擬方法的主要缺點有兩個:一是較大地犧牲了流體模擬精度,二是較大地局限了流體場景的普適性.究其根源:一是現(xiàn)有方法對流體數(shù)據(jù)的非線性變換關(guān)系缺乏較精確和靈活的表達(dá)方式;二是現(xiàn)有方法沒有針對流體模擬中的主要計算瓶頸進(jìn)行深入的分析,缺乏有效的快速求解方法.
近幾年來,基于深度學(xué)習(xí)的算法在各個領(lǐng)域內(nèi)都產(chǎn)生了非常廣泛的影響,特別是在圖形圖像處理領(lǐng)域內(nèi),專家學(xué)者們開發(fā)出了眾多優(yōu)秀的算法.例如,深度神經(jīng)網(wǎng)絡(luò)(deep neural network,簡稱DNN)包含的深度卷積神經(jīng)網(wǎng)絡(luò)(deep convolutional neural network,簡稱DCNN)是一種極為有效的工具[84],在人臉識別[85,86]應(yīng)用中,圖像、視頻分類[87,88]應(yīng)用中,語義分析[89,90]應(yīng)用中以及在視頻、圖像超分辨率[91,92]應(yīng)用中等都很廣泛.
而隨著機器學(xué)習(xí)算法的快速發(fā)展,眾多深度學(xué)習(xí)算法也越來越多地被應(yīng)用到流體模擬中來.首先,對于投影步計算,Yang 等人[93]提出了基于ANN 的局部速度場學(xué)習(xí)算法(如圖9 所示),嘗試著用機器學(xué)習(xí)(深度神經(jīng)網(wǎng)絡(luò),簡稱DNN)算法代替原有的泊松方程的求解.相較于傳統(tǒng)的PCG 迭代法,該算法達(dá)到了4 倍計算加速比.但是由于該算法基于塊(patch)來預(yù)測速度場,從而無法保證預(yù)測流體的不可壓縮性質(zhì).Tompson 等人[94]則利用深度卷積網(wǎng)絡(luò)技術(shù)(CNN)來解決整個流體模擬的不可壓縮問題,同時加速投影步求解速度.但其輸入維度問題(固定輸入的三維速度散度場、三維幾何場)大大增加了其內(nèi)存用量和模型參數(shù)數(shù)量以及其模型的推廣性.為了更快地求解流體投影步中所產(chǎn)生的大型稀疏線性方程組(見公式(3)),Xiao 等人[95]巧妙地構(gòu)造了一組多層分級的特征向量,用以表征全局離散歐拉網(wǎng)格,利用深度神經(jīng)網(wǎng)絡(luò),直接從稀疏矩陣A中抽取輸入特征,得到所求壓強場.這一步驟大大提升了泊松方程的求解效率,相較于傳統(tǒng)的PCG 方法,可以達(dá)到140 倍的計算加速比.而最近,Xiao等人[96]將機器學(xué)習(xí)中增量學(xué)習(xí)(incremental learning)技術(shù)引入到流體動畫模擬中,其核心思想是:利用少量的學(xué)習(xí)樣本,結(jié)合模擬場景的自身學(xué)習(xí),達(dá)到快速求解投影步壓強向量以得到目標(biāo),在一定程度上解決了神經(jīng)網(wǎng)絡(luò)模型的可推廣性問題.與此同時,Wiewel 等人[97]則提出了基于LSTM(long short-term memory,簡稱LSTM)來預(yù)測有限時間內(nèi)的壓強場的變化.在利用了神經(jīng)網(wǎng)絡(luò)自編碼降維技術(shù)的情況下,該算法相較于傳統(tǒng)的壓力求解器也可以達(dá)到兩個數(shù)量級的計算加速比.
Fig.9 Data-driven fluid projection method[93]圖9 文獻(xiàn)[93]中基于數(shù)據(jù)驅(qū)動的流體投影步求解方法
而在細(xì)節(jié)合成方面,Sato 等人[98]將機器學(xué)習(xí)算法應(yīng)用到火焰模擬中,從低分辨率流體模擬中合成高分辨率三維火焰動畫.最近,Chu 等人[99]則將CNN 應(yīng)用至煙霧的細(xì)節(jié)合成中,基于低精度網(wǎng)格模擬結(jié)果,結(jié)合訓(xùn)練得到的細(xì)節(jié)合成指示器(descriptor),合成高分辨率流體模擬結(jié)果(如圖10 所示).在運行效率上,Chu 等人[99]相較于傳統(tǒng)的小波湍流細(xì)節(jié)合成算法[65],可以在相同水平的模擬時間下,得到更高精度的合成結(jié)果(150×240×150,2.75s/frame[65];400×600×400,2.75s/frame[99]).Kim 等人[100]則提出一種新的卷積神經(jīng)網(wǎng)絡(luò)生成模型(generative model),該模型結(jié)合了如速度參數(shù)、時間參數(shù)等流體參數(shù)作為網(wǎng)絡(luò)模型輸入的一部分,可以較好地合成具有空間-時間連續(xù)性的速度場.隨后,Xie 等人[101]更是應(yīng)用基于卷積神經(jīng)網(wǎng)絡(luò)的對抗神經(jīng)網(wǎng)絡(luò)(generative adversarial networks,簡稱GAN)對流體的超分辨率(super-resolution)問題作了進(jìn)一步的研究.他們巧妙地運用GAN 的對抗訓(xùn)練特性[102,103],設(shè)計了特殊的損失函數(shù)(loss function),從而完成了基于低分辨率的細(xì)節(jié)增強的高分辨率生成任務(wù)(tempoGAN),從圖11 所示結(jié)果可以看出,tempoGAN 的細(xì)節(jié)增強能力比較優(yōu)秀.Sato 等人[104]借鑒圖像合成的風(fēng)格遷移概念,提出了基于樣本(example-based)的湍流風(fēng)格遷移算法.在考慮流體不可壓縮性的同時,用戶可以直觀地創(chuàng)建具有所需湍流運動的高分辨率流體動畫.相較于傳統(tǒng)的細(xì)節(jié)合成算法[65,67],該算法不需要進(jìn)行參數(shù)試調(diào),這也大大提高了其應(yīng)用效率.
另一方面,Prantl 等人[105]結(jié)合生成神經(jīng)網(wǎng)絡(luò)(generative neural network,簡稱GNN)光流法(optical flow)將流體的時空變形特征加以表示,并且提供了一個基于移動端(手機)的交互式移動應(yīng)用程序.而在優(yōu)化水花飛濺模擬的效果上,文獻(xiàn)[106]利用了深度學(xué)習(xí)技術(shù)(NNs),可以使液體模擬具有更多的水花細(xì)節(jié),使得模擬效果更加真實.Ma 等人[107]提出了一種基于深度強化學(xué)習(xí)的流體與剛體耦合的二維控制系統(tǒng),該控制系統(tǒng)可以很好地完成例如通過控制流體射速等來保持剛體平衡、驅(qū)動剛體按順序撞擊墻上的指定點等具有挑戰(zhàn)性的任務(wù).該方法很好地利用了卷積神經(jīng)網(wǎng)絡(luò)自編碼器(auto-encoder)進(jìn)行輸入變量的降維.
Fig.10 Result from smoke synthesis method[99] based on CNN圖10 文獻(xiàn)[99]中基于CNN 的煙霧細(xì)節(jié)合成方法的部分結(jié)果
Fig.11 圖11
雖然基于數(shù)據(jù)驅(qū)動的流體動畫模擬在近些年來發(fā)展得非常迅速,也產(chǎn)生了非常多的優(yōu)秀工作,例如本文第2.3 節(jié)介紹的各種深度學(xué)習(xí)算法在流體模擬中的應(yīng)用,但其中仍然存在很多問題沒有得到解決,還有許多方向可以作進(jìn)一步的深入研究.下面,本文就數(shù)據(jù)驅(qū)動的流體動畫模擬研究提出幾個關(guān)鍵問題,并對其未來的研究趨勢和方向加以進(jìn)一步討論.
2.4.1 數(shù)據(jù)集表達(dá)流體運動的復(fù)雜性
在基于數(shù)據(jù)驅(qū)動的流體動畫研究中,如何更好地利用少量數(shù)據(jù)集或大量數(shù)據(jù)集來有效地表征和表達(dá)出流體運動的復(fù)雜性,仍有待進(jìn)一步挖掘和研究.諸如眾多傳統(tǒng)的流體解算方法(多重網(wǎng)格法[14,19]、細(xì)節(jié)增強方法[65,67]等),都在乎如何有效地計算或者表現(xiàn)出復(fù)雜的流體現(xiàn)象.而很多數(shù)據(jù)驅(qū)動方法(如Yang 等人[93]、Xiao 等人[96,108]提出的方法)將目標(biāo)定于計算效率上,對如何更好地表現(xiàn)出流體本身的運動復(fù)雜性,仍需要更多的探索和研究.例如,如何更好地利用數(shù)據(jù)驅(qū)動算法的預(yù)計算/訓(xùn)練數(shù)據(jù)集來預(yù)測/模擬遠(yuǎn)離數(shù)據(jù)集的更為復(fù)雜的流體現(xiàn)象?如何更好地利用已有數(shù)據(jù)集,從物理層面上(物理方程)表征具有特殊物理意義的復(fù)雜流體現(xiàn)象,如渦旋、湍流、流體細(xì)絲等?
2.4.2 基于數(shù)據(jù)驅(qū)動的算法精度
如何進(jìn)一步提升基于數(shù)據(jù)驅(qū)動的模擬加速算法在精度上的表現(xiàn)?在傳統(tǒng)的流體模擬加速算法中,例如多重網(wǎng)絡(luò)加速算法[14]、基于舒爾補(Shur complement)的并行加速算法[26,27]等,都是在保證計算精度的前提下來提升算法的速度表現(xiàn)力.而多數(shù)基于數(shù)據(jù)驅(qū)動的流體模擬方法,包括利用ANN 和CNN 代替泊松方程的求解算法[93,94],都著重強調(diào)計算效率,而在算法結(jié)果的計算精度上都存在著一定的瑕疵.例如:在泊松方程的求解算法中,傳統(tǒng)的迭代法求解算法PCG[5]或者ICPCG[109]與基于舒爾補的算法[14]的解算精度都可以達(dá)到1e-8 數(shù)量級,而基于神經(jīng)網(wǎng)絡(luò)的解算算法[93,94]卻無法達(dá)到相同精度.而在文獻(xiàn)[110]中,我們看到了傳統(tǒng)的數(shù)值迭代算法(multi-grid)在機器學(xué)習(xí)中的延伸,但是該算法沒有應(yīng)用到流體模擬中.如何有效地結(jié)合類似的高精度機器學(xué)習(xí)算法來解決流體模擬的加速問題,也將是研究思路之一.
更進(jìn)一步地,深度學(xué)習(xí)方法對于流體模擬數(shù)據(jù)的描述能力尚不清晰,如何在神經(jīng)網(wǎng)絡(luò)中保持流體的無散性、如何有效地描述邊界問題等有關(guān)于算法精度的難題,都亟待著人們?nèi)ソ鉀Q.
2.4.3 基于數(shù)據(jù)驅(qū)動的算法的物理準(zhǔn)確性
如何解決高-低精度流體模擬之間的物理差異?在目前眾多的基于數(shù)據(jù)驅(qū)動的流體模擬算法中,普遍存在著模擬物理準(zhǔn)確性的問題.例如,在文獻(xiàn)[99,101]中,作者利用低精度模擬結(jié)果來實現(xiàn)高精度合成目標(biāo),在一定程度上與傳統(tǒng)的細(xì)節(jié)合成算法有異曲同工之效,但并沒有從本質(zhì)上解決這類算法的缺點——缺乏物理準(zhǔn)確性.如何解決高-低精度流體模擬之間的映射關(guān)系,也成為此類基于數(shù)據(jù)驅(qū)動的流體動畫模擬算法應(yīng)用推廣的阻礙之一.
如何利用現(xiàn)有的深度學(xué)習(xí)技術(shù)設(shè)計特別的形態(tài)差異識別模型,建立高-低精度模擬結(jié)果的非線性關(guān)系?如何克服由低精度向高精度信息傳遞時的信息不對稱性?如何將基于低精度形態(tài)矯正的模擬結(jié)果擴(kuò)展到高精度模擬場景中去?這些問題都在未來的研究中亟待解決.
2.4.4 并行優(yōu)化
并行算法設(shè)計是傳統(tǒng)的基于物理的流體模擬加速算法的研究方向之一,例如并行泊松方程求解器[14]、基于舒爾補的多GPU 并行法[26].而對于基于數(shù)據(jù)驅(qū)動的流體動畫算法,均具有優(yōu)良的并行性質(zhì).例如在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,利用多核訓(xùn)練框架[111,112]、利用多GPU 訓(xùn)練與計算[113]等.而如何有效地利用流體數(shù)據(jù)進(jìn)行并行計算?如何設(shè)計基于數(shù)據(jù)驅(qū)動的流體模擬的并行框架來解決流體計算中的問題,如大型線性方程組求解問題等,也是未來研究者可以關(guān)注的一點.
基于物理的流體動畫模擬是一個應(yīng)用非常廣泛的研究領(lǐng)域,其中,針對模擬的加速算法研究更是計算機圖形學(xué)中的一個熱門方向.在影視特效制作、游戲制作以及最近比較熱門的虛擬現(xiàn)實、混合現(xiàn)實的各種應(yīng)用中具有重大的發(fā)展前景.同時,由于大數(shù)據(jù)和機器學(xué)習(xí)技術(shù)的快速發(fā)展,特別是深度學(xué)習(xí)中深度神經(jīng)網(wǎng)絡(luò)的建模能力越來越強,也為計算機流體動畫模擬提供了一個高效和高質(zhì)量模擬的新途徑.
本文首先集中介紹了幾類主要的基于物理的動畫模擬加速算法,在此基礎(chǔ)上,分析了各種算法的優(yōu)勢和不足,希望可以為讀者在后期基于物理的流體模擬算法研究中提供一定的研究參考.同時,本文還介紹了近期較為熱門的幾類基于數(shù)據(jù)驅(qū)動的流體動畫模擬方法,特別是基于深度學(xué)習(xí)的流體模擬算法更是體現(xiàn)出了非常大的發(fā)展?jié)摿?希望本篇綜述可以在基于數(shù)據(jù)驅(qū)動的流體模擬方向上提供一定的參考并做出一定的貢獻(xiàn).