games101-22-Animation

速度场

​ 模拟单个粒子在速度场中的运动情况(速度场指的就是一种函数,在任意时刻t和位置x,都有对应的速度取值v(x,t)。速度场是一种理想化情况,实际上只能通过对物体进行受力分析得到加速度进而得到速度。粒子在不同起点会有不同的运动轨迹,切线方向即该点的速度方向。

image-20230517230558683

​ 速度可以用路程对时间的一阶导数获得,因此求解下面方程即可获得对应时刻粒子的位置(上一次位置+位移)。这个方程只有一个变量t,因此是一阶常微分方程。

image-20230517230949140

​ 如下使用欧拉方法(前向欧拉 显示欧拉)将时间离散化进行求解,Δt称为步长。用上一时刻的数据求解下一时刻。

image-20230517231357154

​ 可以通过减小步长来减小误差(增加时间步长,误差会不断积累):

image-20230517231432970

​ 但是该方法具有不稳定性,不稳定是指无论如何减小Δt,有一些情况始终无法通过模拟得到。如下两种情况,场中的曲线是在不同位置理想的运动轨迹,切线方向是速度。细微的影响会被无限放大。

image-20230517231617880
中点法/修正欧拉

​ 首先在某一个位置根据该位置的速度用显示欧拉计算出下一个位置在a,取a和初始点的中点b的速度作为初始点的速度,用显示欧拉再计算一次下一个位置,得到点c。用二次项进行模拟,更加准确。

image-20230517234452830
自适应改变步长方法

​ 首先在某一个位置根据该位置的速度用显示欧拉计算出下一个位置在a,将Δt分成两个Δt/2,在第一个Δt/2的位置,用该位置的速度和Δt/2的时间计算出位置在b。对比a和b,若小于误差阈值则无需继续细分步长, 若大于则继续细分步长。效果更好,但是可能需要更小的步长。

image-20230518000231928

隐式方法

​ 该方法是用未来的一些量(速度、加速度)来求解这个时刻的位移。计算复杂。

image-20230518000753635
如何量化稳定性

​ 使用局部误差(每一步)和总累积误差(整体)判断稳定性。但是比起这两个绝对值,与步长的阶数的关系更值得探究。例如隐式欧拉的阶数为 1,这意味着局部截断误差O(h^2) ,全局截断误差O(h) (h 是步长,即 Δt)。对O(h) 的理解:如果将 h 减半,预期误差也会减半。对O(h^2) 的理解:如果将 h 减半,预期误差也会减1/4。阶数越高,效果越好。

Runge-Kutta Families

​ 求解 ODE 的一系列高级方法,特别擅长处理非线性。它的四阶版本是使用最广泛的版本,即 RK4。用更复杂的方法更新位置。

image-20230518004327829
刚体模拟

​ 刚体不会发生形变,运动时内部所有点按照同一种方式运动。类似于模拟大量粒子,但是要考虑更多属性。

image-20230518004753600

Position-Based / Verlet Integration

​ 不是基于物理的方法,用一些规则调整位置。没有能量守恒的性质,不基于物理计算速度快。

流体模拟

(1)假设水是由无数小的刚体球体组成

(2)假设水无法被压缩,即任意处水的密度相等

(模拟和渲染分开进行)

​ 要知道水的任意处密度发生了改变,就需要改变刚体球体的位置来修正这一部分的密度(梯度下降);需要知道任意一个点的密度关于每一个刚体小球位置的导数,也就是和每一个刚体小球的位置变化会如何影响该点密度。如果小球距离该点位置越远,影响就越小。需要加入有关能量损失的方法,使得最后的运动可以停下。

Eulerian vs. Lagrangian

模拟大规模物质:

拉格朗日质点法(依次模拟空间中每个粒子,也需要考虑相互作用)

网格法(将空间划分为不同格子,考虑不同格子的运动和密度变化)

MPM:将上述两种方法结合

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信