GAMES101-现代计算机图形学学习笔记(22)

GAMES101-现代计算机图形学学习笔记(22)


原课程视频链接以及官网
b站视频链接: link.
课程官网链接: link.

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

  1. Single Particle Simulation
  2. Rigid body simulation
  3. Fluid simulation

Single Particle Simulation

这种方法是通过研究模拟单个粒子速度场中的运动情况(速度场指的就是一种函数,在任意时刻 t t t 和位置 x x x,都有对应的速度取值 v ( x , t ) v(x, t) v(x,t)):
在这里插入图片描述
而速度 v ( x , t ) v(x, t) v(x,t) 通常可以用位移函数的一阶导数 x ˙ \dot{x} x˙ 进行表示,其常微分方程形式为:
d x d t = x ˙ = v ( x , t ) \frac{d x}{d t}=\dot{x}=v(x, t) dtdx=x˙=v(x,t)
在这里插入图片描述
所以我们可以求解这个常微分方程以得到对应时刻的粒子位置:
在这里插入图片描述

Euler’s Method

这种方法是通过时间间隔 Δ t \Delta t Δt 来求解位置的,对于初始时间 t t t 和时间间隔 Δ t \Delta t Δt,我们可以求解出对应变化的位移 x t + Δ t \boldsymbol{x}^{t+\Delta t} xt+Δt 和速度 x ˙ t + Δ t \dot{\boldsymbol{x}}^{t+\Delta t} x˙t+Δt
在这里插入图片描述
由于 Euler’s Method 依赖于 Δ t \Delta t Δt 的取值,所以它的结果往往是存在误差和不稳定的:

误差是指当 Δ t \Delta t Δt 取值越小,得到的 x t + Δ t \boldsymbol{x}^{t+\Delta t} xt+Δt 越精确:
在这里插入图片描述
不稳定是指无论如何减小 Δ t \Delta t Δt,有一些情况始终无法通过模拟得到:
在这里插入图片描述
在这里插入图片描述

Instability and improvements

下面就有一些方法用来提高稳定性:
在这里插入图片描述

Midpoint Method

这种方法的步骤如下:

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

在这里插入图片描述
这种方法为什么比 Euler’s Method 更稳定呢?因为它等于是用二次项进行模拟,更加准确:
在这里插入图片描述

Adaptive Step Size

这种方法的步骤如下:

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

在这里插入图片描述

Implicit Euler Method

该方法是用未来的一些量(速度、加速度)来求解这个时刻的位移,比如说假设下一个 Δ t \Delta t Δt 的加速度 x ¨ t + Δ t \ddot{\boldsymbol{x}}^{t+\Delta t} x¨t+Δt 和当前时刻的位移 x t \boldsymbol{x}^{t} xt 已知,那么就可以求解出下个 Δ t \Delta t Δt 的速度和加速度(两个方程两个未知数肯定可以求解):
在这里插入图片描述
如何定义方法是否稳定?这里引入了来进行描述:

假设 Implicit Euler 的阶为1,它的局部误差和全局误差分别为 O ( h 2 ) \mathrm{O}\left(\mathrm{h}^{2}\right) O(h2) O ( h ) \mathrm{O}(\mathrm{h}) O(h),这里 h 指的是步长即 Δ t \Delta t Δt

O ( h ) \mathrm{O}(\mathrm{h}) O(h) 表示当 h 减小一倍时,对应的误差也会减少一倍。

Runge-Kutta Families

Runge-Kutta Families 是用来求解常微分方程(ODEs)的一类方法,它能更好的模拟非线性的运动:
在这里插入图片描述

Position-Based / Verlet Integration

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

Rigid body simulation

刚体模拟(Rigid body simulation)不会发生形变,即刚体的内部都会以一种方式(趋势)进行运动,所以也可以把刚体模拟看成是粒子的扩充进行模拟:
在这里插入图片描述
当给定了微分方程后:
d d t ( X θ X ˙ ω ) = ( X ˙ ω F / M Γ / I ) \frac{d}{d t}\left(\begin{array}{l} \mathrm{X} \\ \theta \\ \dot{\mathrm{X}} \\ \omega \end{array}\right)=\left(\begin{array}{c} \dot{\mathrm{X}} \\ \omega \\ \mathrm{F} / M \\ \Gamma / I \end{array}\right) dtdXθX˙ω=X˙ωF/MΓ/I

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

Fluid simulation

流体模拟(Fluid simulation )可以采用 Position-Based Method 进行,它是一种非物理的方法。

Position-Based Method 主要基于两个假设:

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

基于上述两个假设,Position-Based Method 就可以通过下述步骤模拟流体:

只要知道水的任意处密度发生了改变,就需要改变刚体球体的位置来修正这一部分的密度;

水的任意处的密度都是关于刚体球体的位置的函数,所以我们也能知道任意处的密度梯度,如果想要改变任意处的密度,只需要通过梯度下降法即可。

在这里插入图片描述

Eulerian vs. Lagrangian

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

(“质点法”) Lagrangian approach:依次模拟空间中每个粒子

(“⽹格法”) Eulerian approach:将空间划分为不同格子,考虑不同格子的运动和密度变化

Material Point Method (MPM) 是一种混合了上述两种方案的方法:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值