【GAMES101笔记速查——Lecture 22 Animation Cont】

news/2024/12/14 17:58:20/

目录

1 单粒子模拟

1.1 欧拉方法

1.2 不稳定性及其改进

1.2.1 误差(Errors)

1.2.2 不稳定性(Instability)

1.2.3 解决不稳定性(Combating Instability)

(1)中点法

(2)自适应改变步长

(3)隐式欧拉方法(Implicit Euler Method)

(4)龙格-库塔 系列方法

(5)非物理(Position-Based / Verlet Integration)

2 刚体模拟(Rigid Body Simulation)

3 流体仿真(Fluid Simulation)

3.1 质点法vs网格法

3.2 材质点方法(Material Point Method (MPM))


1 单粒子模拟

我们模拟出一个粒子的运动

也就是我们想知道:一个物体在t0的时候在某个位置,在t1时刻的时候它在哪里呢?

假设一个理想情况:粒子处在一个速度场中:只要知道粒子的位置,就可以知道它的速度。

在任何一个位置、任何一个时间都知道速度:定义为位移的一阶导数

这个写法叫做常微分方程(单变量微分方程,其中只存在对一个量的导数)。

定义起始点为x0,给出任意的时间t都能解出位置。

那么该怎么解出这个位置呢?

1.1 欧拉方法

欧拉方法:在时间上进行离散化,用上一个时刻的数值来算下一个时刻的数值,步长\Delta t很小

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))

结合了质点法和网格法

首先认为不同的粒子具有一些属性:密度、质量,这些信息存在质点上

融化的过程在网格中完成。

然后将网格中的数据写回给粒子。


http://www.ppmy.cn/news/1555082.html

相关文章

SSH连接报错,Corrupted MAC on input 解决方法

问题描述 客户在windows CMD中SSH连接失败,报错: Corrupted MAC on input ssh_dispatch_run_fatal: Connection to x.x.x.x port 22: message authentication code incorrect值得注意的是,客户通过别的机器做SSH连接可以成功,使用putty, mo…

HTTP 常见状态码解析

HTTP 常见状态码解析 文章目录 HTTP 常见状态码解析一、引言二、1XX 信息性状态码(一)100 Continue(二)101 Switching Protocols 三、2XX 成功状态码(一)200 OK(二)201 Created&…

word中写论文的一些trick

文章目录 加图注使用latex|matjax语法打公式给公式加上编号引用文献 加图注 这样就给图片插入图注 使用latex|matjax语法打公式 按下alt 会出现下面的情景 在右上角选择专业 然后就可以在里面打入latex或mathjax了,不过这个没有预览功能,可以在别的…

鸿蒙实现应用通知

目录: 1、应用通知的表现形式2、应用通知消息的实现1、发布普通文本类型通知2、发布进度类型通知3、更新通知4、移除通知 3、设置通知道通展示不同形式通知4、设置通知组5、为通知添加行为意图1、导入模块2、创建WantAgentInfo信息3、创建WantAgent对象4、构造Notif…

国科大智能设备安全-APK逆向分析实验

APK逆向分析实验 使用APK常用逆向分析工具,对提供的移动应用程序APK文件进行逆向分析,提交逆向后代码和分析报告。具体任务如下: 任务一:安装并熟悉Apktool、Jadx等APK常用逆向工具的使用方法,对提供的Facebook Updat…

【ETCD】【源码阅读】深入解析 etcd 的 `EtcdServer.Start` 函数

深入解析 etcd 的 EtcdServer.Start 函数 在 etcd 的代码中,EtcdServer.Start 是一个关键方法,用于初始化并启动服务器以便处理请求。本文将从源码的角度逐步分析此函数的每一步操作。 函数签名及注释 // Start performs any initialization of the Se…

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。 在网上查阅了很多资料,发现并没有一个合适的…

蓝桥杯刷题——day3

蓝桥杯刷题——day3 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 每张票据有唯一的 ID 号,全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造…