一块CPU就能运行超逼真水流特效!胡渊鸣的算法被这样实现,本人看了都说好

只要【一块CPU】,就能【实时】运行200万粒子的水流特效,还能适应各种多变的地形……天哪,这效果什么时候能做到游戏里啊

郭一璞 鱼羊 发自 凹非寺
量子位 报道 | 公众号 QbitAI

还沉醉在《黑神话:悟空》精细的3D计算机特效里呢?

做3D特效这件事儿,一浪更比一浪强。

最近,一位名叫John Lin的网友,就分享了自己做的3D流体特效。

注意,用GPU渲染之后,运行下面分享的所有特效效果,都只要一块CPU

而且是实时的,你可以用鼠标操纵改变水流和环境。

比如,彩虹色的流水注入不规则的泳池,整个水流的形状、波澜,完全符合现实世界的物理特征。

水满则溢,右边的瀑布划出了漂亮的抛物线。

甚至还能做出这种类似跑马灯的效果。

水扬上天,瞬间激起了洁白的浪花,冲撞天花板的各个角落。

如果把地形改的再复杂一点呢?

比如,我们把地形改成苏州园林里的狮子林这种不规则假山组成的风格?

加上水流,顿时就有了灵动的江南感。

视角穿行其中,就像走在溶洞里一样。

如果水流激荡,一样能穿过每条石头缝。

真想@一下《江南百景图》的策划,下一部游戏别做2D平面风格了,做出这样的特效岂不是更加状况?

甚至,水流还可以适应动态的地形。

不信你看下面的例子。

水流穿过上层容器中心的洞,形成瀑布浇灌下层容器。

如果我们把两层之间的隔板删掉,模拟的水流依然可以适应地形的变化,用更快的速度坠落。

简直巧夺天工。在只用一块CPU的情况下,有效粒子最高值达到了200万之高。

其实,上面的特效用到的工具是MLS-MPM算法,它的一作正是姚班毕业生、MIT在读博士胡渊鸣大神,在宾夕法尼亚大学蒋陈凡夫老师的指导下完成。

水流的效果,让胡渊鸣本人都觉得惊艳,称赞作者代码功底强。

而且,不少同行开发者看到之后也都赞叹不已,impressive、awesome,各种好词轮流夸:

他们觉得,能在单个的CPU核心上跑起来,简直惊人。

MLS-MPM是什么

胡渊鸣团队发表在SIGGRAPH 2018上的一篇论文,介绍了MLS-MPM算法。

MLS-MPM,全称是Moving Least Squares Material Point Method,移动最小二乘材料点方法。

用移动最小二乘法,将APIC(The Affine Particle-In-Cell Method)和动量方程弱形式一致的力计算统一起来,实现了新的应力散度离散化,使MPM的运行速度快了两倍,还成功模拟了MPM此前并不支持的各种新现象,包括材料切割、动态开放边界和刚性体的双向耦合。

它的基本步骤是这样的:

(1)从粒子到网格。使用APIC将质量和动量从粒子转移到网格上。

(2)更新网格动量。用半隐式欧拉法或隐式欧拉法更新网格动量。

(3)从网格到粒子。使用APIC将网格中的速度和仿射/多项式系数传递给粒子。

(4)粒子变形梯度。利用速度梯度的MLS近似更新粒子变形梯度。

(5)更新粒子塑性。预测粒子变形梯度的塑性(如果有的话)。

(6)粒子平移。用新速度更新粒子位置

与传统MPM唯一的区别是步骤(2)中力的表达和步骤(4)中粒子变形梯度的更新。

MLS-MPM在这两个步骤中均比MPM更容易实现,可以轻松实现性能的提升。

另外,为了解决材料不连续和刚体耦合等问题,胡渊鸣团队还开发了Compatible Particle-In-Cell(CPIC)算法,允许基于粒子和网格节点之间的相对位置的材料点不连续和无限薄的边界。

这样就可以把MPM和刚性体双向耦合在一起,实现切割的模拟。

现在,借助这个算法,就可以实现各种和符合物理规则、看起来像真的一样的运动特效了。

传送门

如果你想具体了解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

不过,由于这个项目比较早期,胡渊鸣本人更推荐使用「太极」:
https://github.com/taichi-dev/taichi

试一试,说不定能做出更惊艳的作品?

版权所有,未经授权不得以任何形式转载及使用,违者必究。