大家都知道,視覺特效在現代的影視制作中出現十分頻繁。
而諸如洪水、煙霧、爆炸等特效計算的背后,實際上是用計算機程序在求解已有百年歷史的“納維-斯托克斯方程”
這個方程,對于做流體動力學的讀者一定不陌生,數十年來科學家們為了計算機翼升力,已將其研究了百千萬遍。
然而基于影視制作的特別需求,影視科技工作者們對這個方程的求解提出了新的需求。
我們需要能夠處理更大的時間步長以及不損失精度細節!!這兩者本來是魚與熊掌不可兼得,這就等于是在說:
于是伴隨著特效應用的發展,十數年來,計算機圖形學的科技工作者為了戰勝這個問題不斷地添磚加瓦,這里面比如就有大家耳熟能詳的科研學府:斯坦福的科學家就曾經提出過使用渦旋力來增加流體的細節。


他們的論文研究的算法,甚至直接和工業光魔合作,使用在當年星球大戰特效鏡頭的制作上

還有很多科研機構也是不斷地在算法上推陳出新,甚至像迪士尼這樣家里有礦的影視工作室還親自上陣,不斷地革新著美利堅的影視制作技術,帶動起了好萊塢產、研結合的影視工具生態。

而不管是由工業光魔發表的用來補充煙火高精度細節的算法:


還是來源于迪士尼研究院-ETH Zurich的小波湍流論文:


都是不斷在嘗試攻克一個令人頭疼的問題:如何在使用高效穩定的流體特效仿真算法前提下,盡可能地保證流體運動的細節,這最終落在了對于N-S方程中的對流部分的求解上。
在圖形學特別是影視特效制作軟件中,為了追求大時間步長的穩定性,對流方程的求解多采用半拉格朗日方法或其變種。這類方法雖然高效穩定,但有它最大的問題:數值粘性。
所謂數值粘性,顧名思義,就是物理系統中本不存在的粘性,是被人類設計的數值算法在求解方程的過程中帶入系統的,與真實的物理事實相左。我們先領略一下“數值粘性” 會帶來的問題:
比如我要沿著紅線所示的速度和方向“對流”白色的方塊
傳統的對流算法由于數值粘性會使物質模糊掉
我們的算法盡大可能地避免了數值粘性, 保留了清晰地邊界
流體的運動更為復雜,計算機算法保持清晰(守恒)的能力,就顯得尤為重要。
這是一個由傳統算法計算得到的煙霧動畫,由于數值粘性的存在,煙霧的形態被過度地模糊了。
為了對抗這種過度平滑,科技工作者們提出了混合的粒子-網格方法,然而這類方法存在著計算速度慢,計算結果差強人意的缺陷:往往由于粒子的非連續性,流體的湍流運動會在粒子間拉出空隙,最終在視覺上產生噪聲:
我們提出的算法既能最大可能地保持流體的湍流細節,又能維持流體場的連續性,有效地解決特效解算中這一老大難問題。
把三個方法的結果并排放在一起對比如下:
過度平滑的傳統方法
計算耗時,且噪聲過強的粒子方法
計算高效,即不失細節又平滑連續的我們的方法
為了以極高的清晰度來對流流體中的物質場我們給出了以下觀察:
傳統的對流算法直接作用于流體空間中的“物理量”,數值粘性于是會累加在“物理量”上,并最終造成“物理量”的模糊。
如果能構造出一個映射,使得流體場中的每一個空間點在任何時候都能知道自己初始時刻的位置并去初始時刻訪問物理量的信息我們就能夠避免在對流的過程中累加“數值粘性”。
這個哲學像極了愛情:一切若只如初見,是多么的美好。
這個方法從求解的根本思路上跳出了傳統對流方程求解方式:
以往的方法對流“物理量”
我們的方法對流“空間”本身。
為此,我們定義了一個映射,這個映射的目的是將空間中的點映射回它初始時刻的位置
因為流體運動而變化的空間映射的可視化
這個初始位置,滿足如下的數學關系。稱之為后向映射。
在這個基礎上,我們就有機會將原本的對流方程拆為空間的對流和物理量的重構兩個部分

為了便于重構物理量時對于積分項的計算,我們提出了整個算法中最至關重要的部分:前向映射。并給出了前向映射的演化方程:
有了前向映射。積分的過程變為了演化累加的過程(大大減少了計算量)
好了,小編保證,不會再有數學公式了!
我們將我們發明的這樣層級前-后向映射來求解對流方程的形式稱之為“n層級雙向跡徑映射對流求解法”(Bi-Directional Characteristic Mapping of Convective Quantaties of Level n BiMocq)。
雖然不打算在這里展開討論,這樣的做法使得在保持流體物理量守恒的同時還保證計算極為高效以及并行友好,大大地區別于混合的粒子-網格算法。我們粗暴實現的GPU代碼可以對比相應的CPU的并發式代碼加速50倍
那么,BiMocq好處都有啥?
我們首先是對比了一個數學上有比較確定的答案的問題,“泰勒渦旋”:兩個初始狀態如下的渦旋,在無粘的環境中,能量守恒的數值積分應該可以將其分開。
對此,我們實現并且對比了幾乎所有主流使用的,先前發表于SIGGRAPH論文的算法,并驗證了我們的算法在能量守恒上的優越性。
對比所有的SemiLagrangian類對流算法,bimocqn 勝
Bimocqn特寫
以及難以用Eulerian方法解算的leapfrogging vortex:
更進一步地,用一個簡單的三維煙霧的例子來說明一下能量和質量守恒的好處:
該例子中,左邊的是目前特效計算中常用的算法右邊的是我們的新算法。由于數值粘性。
以往的算法無法保證煙霧運動時的清晰形狀導致了其在之后的效果計算中損失了煙霧的。
湍流細節,那些更能體現煙霧真實感的卷曲細節。
大自然是最好的藝術家,我們想做的,僅僅是用程序在計算機中再現它的美。為此,我們用我們的數值算法在計算機中再現了如下場景,渦環相撞實驗。
兩個相對運動的渦環的實拍視頻,在碰撞后會不斷往直徑方向擴大并最終由于任何微小的擾動在邊緣處射出花瓣狀的小渦
這樣的現象以往的數值算法存在數值粘性就根本不可能重現出來
我們的算法成功地在計算機中再現了這個現象應該也是該領域第一次用高效的純歐拉網格算法完整地再現了這個過程
不知道有沒有細心的朋友注意到過這樣一種自然現象
這種現象被稱為開爾文-亥姆霍茲-瑞利-泰勒不穩定性(Kelvin–Helmholtz-Rayleigh-Taylor instability),這種現象通常由于兩種不同密度的流體在交界面處由于擾動而產生的不穩定現象。
同樣,我們使用我們的算法對這個現象進行了近似的模擬。我們可以看到由于密度本身的對流會對整個流場產生影響,對比以往的數值算法,在同等分辨率下由于我們的算法對密度對流有著更準確的估計,因此我們也能更準確地模擬這種不穩定性帶來的渦結構。
作為展示這個算法在更通用的特效環境中的使用我們也增加了使用我們提出的新算法生成的爆炸、以及汽車漂移特效的案例
作者:
@ziyin@張心欣@高明@蔣陳凡夫@陳寶權
代碼Github地址:
https://link.zhihu.com/?target=https%3A//github.com/ziyinq/Bimocq
原文鏈接:
https://zhuanlan.zhihu.com/p/72916159
文章來源:知乎專欄
IEEE Spectrum
《科技縱覽》
官方微信公眾平臺
往期推薦