原创关注前沿科技量子位郭一璞鱼羊发自凹非寺量子位报道公众号 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
试一试,说不定能做出更惊艳的作品?