第7章 物质点法在动画特效中的应用
7.1 物质点法简介
近些年,高质量的动画与电影中(尤其是好莱坞)开始使用一种被称为物质点法(Material Point Method[1],MPM)的新的物理模拟技术。这种技术特别适合用来描述有大的形状变化和大的拓扑结构变化的物理过程,并且可以用统一的算法来求解不同材料的物理运动。MPM可以模拟的材料非常广泛,包括水[2]、雪[3]、沙子[4]、石油、泥浆[5]、金属[6]、头发、布料等。
物理特效将人们在生活中感觉到的风的吹动、树叶的摇摆,以及物体爆炸时所产生的碎片飞溅等物理过程表现到游戏、影片或其他作品中。采用物理特效可以给人们带来更真实的游戏感受,使影片看起来更加真实和震撼,让人们有身临其境的感觉。
对于物理特效的模拟,MPM采用质点来离散材料所在的区域,用背景网格计算空间导数和求解动量方程,避免了网格畸变和对流项处理。它兼具拉格朗日算法和欧拉算法的优势,非常适合模拟涉及材料特大变形和断裂破碎的问题。其中,粒子指的是空间中不再继续分割的一小块物质,包括雪粒子、沙子粒子、石油粒子、水粒子等,更广泛地,一小段头发、一小块布料,也统称为粒子。粒子的属性包括粒子的速度、动量、质量等信息。粒子的位置信息包括粒子在模拟空间的3D坐标、所在的格子,以及所在的格子块等。
对于游戏制作来说,如大量的美术资源留存在特定的游戏引擎中,导出到其他平台是很复杂、易错且耗时的事情,因此用于游戏制作的物理模拟技术最好能兼容游戏引擎。
本章设计了一整套基于新GPU架构[7]的物理模拟框架,如图7.1所示,并将其命名为Physion(取自Physics和Vision)。Physion提供了快速、高质量、多材料的物理模拟技术,除能和传统的影视特效软件(如Houdini)结合外,还可以与当前常用的游戏引擎(如Unreal Engine,虚幻引擎)无缝融合。Physion使得游戏创作者可以在游戏引擎中直接制作物理特效。
图7.1 Physion框架
具体来说,Physion工作流程可以分为以下10个步骤。
(1)计算时间步长、准备模拟数据(通过代码、游戏引擎)。
(2)建立稀疏的网格数据结构,并计算粒子和网格的映射关系。
(3)将粒子的速度、质量等插值存储到格子上。
(4)对每个粒子,根据其材料特性,使用不同的物理模型计算应力,并将其插值到格子上。
(5)更新格子上记录的速度。
(6)对不同的边界条件,在格子上计算碰撞后的速度。
(7)将格子上的速度插值回粒子以更新粒子速度及其形变梯度。
(8)更新粒子的塑性状态。
(9)更新粒子位置,进入下一个时间步的模拟。
(10)若该步为某帧的最后一个时间步,则将位置数据保存下来或传到引擎中显示出来。
其中,MPM属于第(1)~(9)步。在第(1)步中,对不同的材料,可以预估其振动速度,以此来自动计算时间步长。另外,本章提供了一套用户交互界面和相应的数据结构,用户可以直接在游戏引擎中准备模拟所需的数据。在第(2)步中,利用空间哈希来建立一个稀疏的网格存储结构,进而在其上对粒子进行排序,并提出了一个方案来尽量减小重建粒子和网格映射关系的频率。在第(3)、(4)和(7)步中,将传统的固定长度的规约操作修改为自适应长度的规约操作,以此解决相邻CUDA线程写冲突的问题,可以大幅提高计算效率。在第(4)和(8)步中,统一了不同材料所需的数据结构,这样整套方案可以同时处理水、石油、泥浆、砂砾、雪等。最后,Physion提供了一套可以在游戏引擎中实时预览、存储的技术。