一塊CPU就能運(yùn)行超逼真水流特效!胡淵鳴的算法被這樣實(shí)現(xiàn),本人看了都說好
只要【一塊CPU】,就能【實(shí)時(shí)】運(yùn)行200萬粒子的水流特效,還能適應(yīng)各種多變的地形……天哪,這效果什么時(shí)候能做到游戲里啊
郭一璞 魚羊 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號(hào) QbitAI
還沉醉在《黑神話:悟空》精細(xì)的3D計(jì)算機(jī)特效里呢?
做3D特效這件事兒,一浪更比一浪強(qiáng)。
最近,一位名叫John Lin的網(wǎng)友,就分享了自己做的3D流體特效。
注意,用GPU渲染之后,運(yùn)行下面分享的所有特效效果,都只要一塊CPU。
而且是實(shí)時(shí)的,你可以用鼠標(biāo)操縱改變水流和環(huán)境。
比如,彩虹色的流水注入不規(guī)則的泳池,整個(gè)水流的形狀、波瀾,完全符合現(xiàn)實(shí)世界的物理特征。
水滿則溢,右邊的瀑布劃出了漂亮的拋物線。
甚至還能做出這種類似跑馬燈的效果。
水揚(yáng)上天,瞬間激起了潔白的浪花,沖撞天花板的各個(gè)角落。
如果把地形改的再復(fù)雜一點(diǎn)呢?
比如,我們把地形改成蘇州園林里的獅子林這種不規(guī)則假山組成的風(fēng)格?
加上水流,頓時(shí)就有了靈動(dòng)的江南感。
視角穿行其中,就像走在溶洞里一樣。
如果水流激蕩,一樣能穿過每條石頭縫。
真想@一下《江南百景圖》的策劃,下一部游戲別做2D平面風(fēng)格了,做出這樣的特效豈不是更加狀況?
甚至,水流還可以適應(yīng)動(dòng)態(tài)的地形。
不信你看下面的例子。
水流穿過上層容器中心的洞,形成瀑布澆灌下層容器。
如果我們把兩層之間的隔板刪掉,模擬的水流依然可以適應(yīng)地形的變化,用更快的速度墜落。
簡直巧奪天工。在只用一塊CPU的情況下,有效粒子最高值達(dá)到了200萬之高。
其實(shí),上面的特效用到的工具是MLS-MPM算法,它的一作正是姚班畢業(yè)生、MIT在讀博士胡淵鳴大神,在賓夕法尼亞大學(xué)蔣陳凡夫老師的指導(dǎo)下完成。
水流的效果,讓胡淵鳴本人都覺得驚艷,稱贊作者代碼功底強(qiáng)。
而且,不少同行開發(fā)者看到之后也都贊嘆不已,impressive、awesome,各種好詞輪流夸:
他們覺得,能在單個(gè)的CPU核心上跑起來,簡直驚人。
MLS-MPM是什么
胡淵鳴團(tuán)隊(duì)發(fā)表在SIGGRAPH 2018上的一篇論文,介紹了MLS-MPM算法。
MLS-MPM,全稱是Moving Least Squares Material Point Method,移動(dòng)最小二乘材料點(diǎn)方法。
用移動(dòng)最小二乘法,將APIC(The Affine Particle-In-Cell Method)和動(dòng)量方程弱形式一致的力計(jì)算統(tǒng)一起來,實(shí)現(xiàn)了新的應(yīng)力散度離散化,使MPM的運(yùn)行速度快了兩倍,還成功模擬了MPM此前并不支持的各種新現(xiàn)象,包括材料切割、動(dòng)態(tài)開放邊界和剛性體的雙向耦合。
它的基本步驟是這樣的:
(1)從粒子到網(wǎng)格。使用APIC將質(zhì)量和動(dòng)量從粒子轉(zhuǎn)移到網(wǎng)格上。
(2)更新網(wǎng)格動(dòng)量。用半隱式歐拉法或隱式歐拉法更新網(wǎng)格動(dòng)量。
(3)從網(wǎng)格到粒子。使用APIC將網(wǎng)格中的速度和仿射/多項(xiàng)式系數(shù)傳遞給粒子。
(4)粒子變形梯度。利用速度梯度的MLS近似更新粒子變形梯度。
(5)更新粒子塑性。預(yù)測粒子變形梯度的塑性(如果有的話)。
(6)粒子平移。用新速度更新粒子位置
與傳統(tǒng)MPM唯一的區(qū)別是步驟(2)中力的表達(dá)和步驟(4)中粒子變形梯度的更新。
MLS-MPM在這兩個(gè)步驟中均比MPM更容易實(shí)現(xiàn),可以輕松實(shí)現(xiàn)性能的提升。
另外,為了解決材料不連續(xù)和剛體耦合等問題,胡淵鳴團(tuán)隊(duì)還開發(fā)了Compatible Particle-In-Cell(CPIC)算法,允許基于粒子和網(wǎng)格節(jié)點(diǎn)之間的相對位置的材料點(diǎn)不連續(xù)和無限薄的邊界。
這樣就可以把MPM和剛性體雙向耦合在一起,實(shí)現(xiàn)切割的模擬。
現(xiàn)在,借助這個(gè)算法,就可以實(shí)現(xiàn)各種和符合物理規(guī)則、看起來像真的一樣的運(yùn)動(dòng)特效了。
傳送門
如果你想具體了解MLS-MPM算法,可以看這篇論文:
A Moving Least Squares Material Point Method with Displacement Discontinuity and Two-Way Rigid Body Coupling
http://taichi.graphics/wp-content/uploads/2019/03/mls-mpm-cpic.pdf
GitHub地址在此:
https://github.com/yuanming-hu/taichi_mpm
不過,由于這個(gè)項(xiàng)目比較早期,胡淵鳴本人更推薦使用「太極」:
https://github.com/taichi-dev/taichi
試一試,說不定能做出更驚艷的作品?