GAMES101 学习22——动画与模拟(欧拉方法、刚体模拟、流体模拟)

举报
lutianfei 发表于 2022/05/16 21:06:26 2022/05/16
【摘要】 今天课程的内容主要讨论了如何对一些模拟进行求解,以及对应的方法:Single Particle SimulationRigid body simulationFluid simulation 一、Single Particle Simulation这种方法是通过研究模拟单个粒子在速度场中的运动情况(速度场指的就是一种函数,在任意时刻t和位置x,都有对应的速度取值v(x,t):而速度v(x,t...

今天课程的内容主要讨论了如何对一些模拟进行求解,以及对应的方法:

  • Single Particle Simulation
  • Rigid body simulation
  • Fluid simulation

一、Single Particle Simulation

这种方法是通过研究模拟单个粒子速度场中的运动情况(速度场指的就是一种函数,在任意时刻t和位置x,都有对应的速度取值v(x,t):
image.png

而速度v(x,t) 通常可以用位移函数的一阶导数 x ˙ \dot{x} 进行表示,其常微分方程形式为: d x d t = x ˙ = v ( x , t ) \frac{d x}{d t}=\dot{x}=v(x, t)
ODE:常微分方程。
image.png

所以我们可以求解这个常微分方程以得到对应时刻的粒子位置:
image.png

1.1 Euler’s Method

这种方法是通过时间间隔Δt 来求解位置的,对于初始时间 t和时间间隔Δt,我们可以求解出对应变化的位移 x t + Δ t \boldsymbol{x}^{t+\Delta t} 和速度 x ˙ t + Δ t \dot{\boldsymbol{x}}^{t+\Delta t}

image.png

由于 Euler’s Method 依赖于Δt 的取值,所以它的结果往往是存在误差和不稳定的:

误差是指当Δt 取值越小,得到的 x t + Δ t \boldsymbol{x}^{t+\Delta t} 越精确:
image.png

不稳定是指无论如何减小Δt,有一些情况始终无法通过模拟得到:
image.png

image.png

1.2 Instability and improvements

下面就有一些方法用来提高稳定性:
image.png

1.2.1 Midpoint Method

这种方法的步骤如下:

  1. 按 Euler’s Method 计算步长得到 a
  2. 计算 a 点与初始点的中点的速度(位移的导数)
  3. 按步骤 2 的速度更新初始点位置

image.png

这种方法为什么比 Euler’s Method 更稳定呢?因为它等于是用二次项进行模拟,更加准确:
image.png

1.2.2 Adaptive Step Size

这种方法的步骤如下:

  1. 按 Euler’s Method 计算步长得到位移 x T \mathbf{x}_{\mathrm{T}}
  2. 计算 x T \mathbf{x}_{\mathrm{T}} 点与初始点的中点的速度,并用这个速度更新得到 X T / 2 \mathbf{X}_{\mathrm{T} / 2}
  3. x T \mathbf{x}_{\mathrm{T}} X T / 2 \mathbf{X}_{\mathrm{T} / 2} 距离是否过远,如果较远的话就表示Δt 较大,需要对其进行缩小;

image.png

1.2.3 Implicit Euler Method

该方法是用未来的一些量(速度、加速度)来求解这个时刻的位移,比如说假设下一个Δt 的加速度 x ¨ t + Δ t \ddot{\boldsymbol{x}}^{t+\Delta t} 和当前时刻的位移 x t \boldsymbol{x}^{t} 已知,那么就可以求解出下个Δt 的速度和加速度(两个方程两个未知数肯定可以求解):
image.png

如何定义方法是否稳定?这里引入了来进行描述:

假设 Implicit Euler 的阶为1,它的局部误差和全局误差分别为 O ( h 2 ) \mathrm{O}\left(\mathrm{h}^{2}\right) 和O(h),这里 h 指的是步长即Δt。
O(h) 表示当 h 减小一倍时,对应的误差也会减少一倍。

1.2.4 Runge-Kutta Families

Runge-Kutta Families 是用来求解常微分方程(ODEs)的一类方法,它能更好的模拟非线性的运动:

image.png

1.2.5 Position-Based / Verlet Integration

这种方法指的是通过一些规则使得粒子在走下一步时,下一步的位置会得到一定的限制,防止粒子发散,与预期不符(它不是基于物理的方法):

image.png

二、 Rigid body simulation

刚体模拟(Rigid body simulation)不会发生形变,即刚体的内部都会以一种方式(趋势)进行运动,所以也可以把刚体模拟看成是粒子的扩充进行模拟:
image.png

当给定了如上微分方程后,我们仍然可以按照模拟粒子运动一样,采用诸如 Euler’s Method 等方法求解常微分方程,来求解刚体的运动。

三、Fluid simulation

流体模拟(Fluid simulation )可以采用 Position-Based Method 进行,它是一种非物理的方法。
Position-Based Method 主要基于两个假设:

  1. 假设水是由无数小的刚体球体组成
  2. 假设水无法被压缩,即任意处水的密度相等

基于上述两个假设,Position-Based Method 就可以通过下述步骤模拟流体:
只要知道水的任意处密度发生了改变,就需要改变刚体球体的位置来修正这一部分的密度;
水的任意处的密度都是关于刚体球体的位置的函数,所以我们也能知道任意处的密度梯度,如果想要改变任意处的密度,只需要通过梯度下降法即可。

image.png

3.1 Eulerian vs. Lagrangian

前面讲了一些关于模拟粒子运动的方法,接下课程继续介绍了关于模拟大规模物质运动的两种思路:

  • (“质点法”) Lagrangian approach:依次模拟空间中每个粒子
  • (“⽹格法”) Eulerian approach:将空间划分为不同格子,考虑不同格子的运动和密度变化
    image.png
    https://www.youtube.com/watch?v=iDIzLkic1pY

Material Point Method (MPM) 是一种混合了上述两种方案的方法:
image.png

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。