本文为《GAMES201:高级物理引擎实战指南2020》的学习笔记,文中图片及公式主要来自于课程视频及课件。GAMES201:高级物理引擎实战指南2020_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com
本人非相关专业,很多地方都只是自己的理解,如有错误,请各位大佬多多指正。
一、拉格朗日视角与欧拉视角
对于基于物理的动画里的各种介质的模拟,可以从两种视角来观察介质,一个是拉格朗日视角,另一个是欧拉视角。
拉格朗日视角一般将介质视为粒子(或微小网格)的集合,粒子会随着介质一起移动,通过计算每个粒子的运动状态和受力情况来表现介质的变化。
欧拉视角则通常将介质占有的空间切分为一个个小网格,对每个小格子计算格子内介质的状态、输入输出情况,以及对其他的格子的影响。
上图中,左边为拉格朗日视角,右边为欧拉视角。这两种视角各有其优缺点,适用于不同的情形。
二、弹簧质点系统
弹簧质点系统是一种简单但非常有用的模拟方法,可用于模拟布料、头发等弹性物体。常用公式有:
即弹簧的弹力大小与弹簧的形变程度成正比,方向与形变方向相反
三、时间积分
由于计算机计算的离散化的,也不可能使用无限小的间隔时间
常用的积分方面有三种:
(1)前向欧拉方法(显式时间积分)
(2)半隐式欧拉方法(仍是显式)
(3)后向欧拉方法(隐式时间积分)
前两种方法很好理解,
一个标准的弹簧振子系统,其震荡周期
对于隐式积分方法
这里
为何这里是使用粒子质量
这是因为
消去
对
我们得到了形如
直接求逆可解,即
因此,隐式时间积分在一个时间间隔
综合前向欧拉方法和后向欧拉方法,在公式中加入参数,即:
(1)当
(2)当
(3)当
四、SPH:光滑粒子动力学
SPH方法将流体看作大量粒子的集合,使用粒子的运动来模拟流体的流动,根据某点周围粒子的数量来计算流体在该点的压强、流速、密度等属性,同时又使用这些信息来更新粒子的运动情况。
场的计算方法为:
公式中,
即根据周围粒子携带的信息来计算流体在某点压强、密度等属性。
WCSPH(Weakly Compressible SPH)方法为较常用的方法,核心公式为:
当流体在四周压强的作用下被压缩,密度增大,同时流体也会产生反作用力。因此,某个截面的压强可由所在位置流体的密度直接计算得出。
计算场的梯度的公式为:
其中,
此公式和之前公式中的
综上所述,在每次迭代中,计算步骤为:
(1)对于每个粒子
即:
:
(2)对于每个粒子
即:
(3)使用压强梯度
即:
不同方法所使用的
SPH:约0.4
MPM:约0.3~1
FLIP fluid:1~5+