【GAMES101笔记速查——Lecture 22 Animation Cont】
目录
1.2.3 解决不稳定性(Combating Instability)
(3)隐式欧拉方法(Implicit Euler Method)
(5)非物理(Position-Based / Verlet Integration)
3.2 材质点方法(Material Point Method (MPM))
1 单粒子模拟
一个物体在t0的时候在某个位置,在t1时刻的时候在哪里?
假设粒子处在一个速度场中:只要知道粒子的位置,就可以知道它的速度。
在任何一个位置、任何一个时间都知道速度:定义为位移的导数
这个写法叫做常微分方程(单变量微分方程)。
起始点定义为x0,给出任意的时间t都能给出位置。
1.1 欧拉方法
欧拉方法:在时间上进行离散化,用上一个时刻的数值来算下一个时刻的数值
1.2 不稳定性及其改进
1.2.1 误差(Errors)
步长Δt越小,误差越小,就更精确。
1.2.2 不稳定性(Instability)
螺旋形出现的问题:无论取多大的步长,都不可能沿着螺旋形的轨迹走。
下面的图形,越模拟和实际的结果相距越远,直到无限远。
一切用数值解解微分方程都会遇到的问题:误差、不稳定性
不稳定性这个问题比较大,有可能会在实际中导致一些难以解释的问题,比如下面这个小轿车装上摩托车之后在空中进行的一些迷惑运动
1.2.3 解决不稳定性(Combating Instability)
(1)中点法
原本在速度场中,这个点应该往a方向走。但现在不使用指向a的速度方向,而使用起始点和a点连线的中点处的速度方向,也就是b。此时用b这个速度方向来更新当前点的位置,会发现更新后,当前点到达了c点。
实际上用了两次欧拉方法。
观察公式可知:中点法更加准确的原因在于它有个Δt的二次方项,能模拟出类似抛物线的形状,能比一次的线性模型更准确一点。
(2)自适应改变步长
有人想要结合a点和c点的信息。
先按照欧拉方法计算出一个xT
再把Δt分成两半,应用两次欧拉方法得到xT/2
如果xT 和xT/2 相差很大,那就说明xT/2更接近真实的情况,此时,继续细分Δt,逼近真实值。
如果xT 和xT/2 相差不大,那就说明目前计算出的下一个点的位置精确度已经足够,可以进行下一步计算。
(3)隐式欧拉方法(Implicit Euler Method)
也叫:后向欧拉方法
用下一个时刻的速度、加速度(未知量)来计算下一个时刻的位移和速度。
最后形式是一个方程组,需要解出来,用求根公式或者优化方法来解,这样会慢很多。但隐式欧拉方法的稳定性比较好。
如何定义一个方法的稳定性和稳定程度?
局部截断误差:每一步的误差
整体累积误差
人们认为研究这两个数值没意义,应该研究这两个误差的阶,也就是和误差如何随着Δt的减小而减少的。
直接给结论:隐式欧拉方法是一阶的。
一阶:如果把h减小一半,那么期望得到的误差也减小一半
二阶:h小一半,得到的误差减小1/4
···
(4)龙格-库塔 系列方法
RK4是一个4阶的方法,这个应用比较广泛。
相当于中点法的一个推广,里面的权重经过精心设计。
(5)非物理(Position-Based / Verlet Integration)
这种的方法直接改变粒子的位置
2 刚体模拟(Rigid Body Simulation)
刚体不会发生形变,会让其内部所有的点按照同一种情况运动,可以把刚体看作一个粒子。在刚体模拟中,在原本的位置和速度的基础上,会关注更多的量:
位置、朝向、速度、角速度······
3 流体仿真(Fluid Simulation)
主要思想:
水体是由许多、不可压缩的、刚体小球组成的
认为水在任何一个位置都不可以压缩
给任何一个时刻,小球分布的位置,如果任何一个地方的密度和原本水的密度不一样,那么就通过移动小球,修正这种密度。
我们需要知道:任何一个点的密度对任何小球位置的梯度。
然后进行梯度下降方法来修正。
3.1 质点法vs网格法
模拟大规模物质的两个思路:质点法(拉格朗日方法) vs网格法(欧拉方法)
网格法是盯着一个固定的空间,关注每个空间的密度变化等。
3.2 材质点方法(Material Point Method (MPM))
结合了质点法和网格法
首先认为不同的粒子具有一些属性:密度、质量,这些信息存在质点上
融化的过程在网格中完成。
然后将网格中的数据写回给粒子。
原文地址:https://blog.csdn.net/weixin_45972089/article/details/144406260
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!