11 Animation (Cont.)¶
11.1 Simple particle Simulation¶
首先研究单个粒子的运动然后泛化到大多数粒子。我们现认为粒子的运动由速度场 (velocity vector field) 决定,这个速度场就是一个位置和时间的函数 \(v(x,t)\)

计算粒子的位置(随时间变化)需要解一个一阶常微分方程
Note
一阶的原因:只存在一阶导数
常微分:不存在对其他变量的微分或者倒数
11.1.1 欧拉方法¶
可以使用欧拉方法对给定初始位置和速度场的点求解经过时间t后所处的位置。
特点 欧拉方法是一种简单的迭代方法,经常被使用、不准确、大多数都不稳定。
欧拉方法的误差:使用数值计算的方法积分,误差会累计。并且 \(\Delta t\) 越大,得到的结果也相差越大。
欧拉方法的不稳定性:如下图,粒子的轨迹始终不能沿着圆形或指定的轨迹,因为间隔并不能取到无限小。

综上所述,通过数值积分求解会导致的两个问题是 Errors 和 Instability。
每一步的errors会累计,随着模拟的进行,accuracy会下降,但是可以增大步长来环节这个问题,所以误差errors在图形应用中不是关键问题。
instability会导致diverge(不管怎么模拟都可能和正确的结果相差较远),缺乏稳定性是仿真中的基本问题,不容忽视
11.1.2 克服不确定性的方法¶
那么我们应当如何克服不稳定性呢?
Midpoint Method 中点法¶
先计算到达 (a),然后得到 (a) 处的导数,接着利用该导数更新下一个位置得到 (c)

补充上加速度的式子,我们可以得到
这个式子跟泰勒展开就比较像了
Adaptive Step Size¶
使用步长 \(T\) 计算一个欧拉步骤来获得 \(X_T\),然后相应地计算经过两次步长为 \(T/2\) 的欧拉步骤,获得 \(X_{T/2}\),计算两点的差距 \(||X_T-X_{T/2}||\) ,如果它比我们设定的阈值要大,那么我就继续减少步长,直到两者差距比阈值小,最后确定最后的步长。
Implicit Euler Method¶
也被称作后向方法,使用下一时间的导数来计算当前步骤
$$ \begin{aligned} x^{t+\Delta t}=x^t+\Delta t\dot{x}^{t+\Delta t}\ \dot{x}^{t+\Delta t}=\dot{x}^t+\Delta t\ddot{x}^{t+\Delta t}\
$$
求解非线性的 \(x^{t+\Delta t}\) 和 \(\dot{x}^{t+\Delta t}\) 较为困难,可以认为在这个时刻位置知道且已知下一个时刻的加速度,使用求根公式来求解。也可以使用优化方法来解出来。
定义与量化"stability"的方法
We use the local truncation error (every step) / total accumulated error (overall) 使用局部误差(每一步)或者说是总体误差来衡量,注意到随着步长的减小误差会下降,所以我们需要研究的是二者的阶。
隐式欧拉方法的阶数为1,意味着局部误差为 \(O(h^2)\) 且总体误差为 \(O(h)\) ,其中 \(h\) 为步长。\(O(h)\) 的理解为如果将 \(h\) 减半,那么预期误差也会减半。
Runge - Kutta Families¶
Runge-Kutta方法是一系列用于求解 ODE 的高级方法。特别擅长处理非线性问题,其中四阶的方法(RK4)是使用最为广泛的。
Position - Based / Verlet Integration¶
这是一种不基于物理的方法,通过调整物体的位置使物体满足某种性质。
主要思想
- After modified Euler forward-step, constrain positions of particles to prevent divergent, unstable behavior 在修改欧拉前步(forward-step)之后,约束粒子的位置以防止divergent、不稳定的现象。
- Use constrained positions to calculate velocity 使用约束位置计算速度。
- Both of these ideas will dissipate energy, stabilize 这两种思想都会耗散能量,使其具有稳定性。
特点 快速又简单,但是不是基于物理模拟的,不满足能量守恒。
11.2 Rigid Body Simulation¶
刚体模拟与模拟单个粒子相似,只需额外考虑一些属性,如下所示
11.3 Fluid Simulation¶
将水是由很多小的刚体球组成的,同时假设水是不可压缩的
So, as long as the density changes somewhere, it should be “corrected” via changing the positions of particles. 这句话的意思是每个地方的密度都要往一开始的密度分布来修正
我们可以求得每个点对于另一个点的密度的梯度,接下来运用梯度下降的方法来更新粒子

Eulerian vs. Lagrangian¶
Lagrangian 质点法:摄影师全程跟踪同一只鸟。把每个点都正确模拟

Eulerian 网格法:摄影师是静止的,只能拍摄经过一帧的所有鸟(比如在时间“t”)。把空间分成很多网格,关注每个网格中随着时间是怎么变化的

Material Point Method (MPM)¶
MPM是一种混合的(Hybrid),结合Eulerian和Lagrangian的方法。
- Lagrangian:认为粒子带有材质属性。
- Eulerian:使用网格来做数值积分。
- lnteraction:粒子将属性传递给网格,网格执行更新,然后插值回粒子。