粒子系统 Particle System [49:38]
基于粒子系统的动画的主要过程:
- 创建粒子
- (难点)计算每个粒子受到的力
- (难点)更新粒子的位置和速度
- 移除不需要的粒子
- 渲染粒子
粒子建模要考虑的力有:
- 动力:重力、吸引力、电磁力、斥力
- 阻力:摩擦力、粘滞力
- 碰撞
✅ 模拟和渲染是两个独立的步骤[56:31]
粒子系统的更多应用场景:水、星系、鸟群、分子结构
📌 具体内容在Lecture 22
单个粒子系统
要解决的问题
- 场景一:
已知:初始的 position x0,任意时刻的速度
求:某个时间刻的 position
- 场景二:
已知:初始的 position X0,速度场,即在任意 position 上的速度 [06:40]
求:某时刻的 position
常微分方程
ODE = Ordinary Differential Equation
dxdt=˙x=v(x,t)
已知˙x,求x
一阶常微分方程的特点:
- 只涉及一阶微分
- 不存在对其它变量的微分
欧拉方法
显式欧拉方法
根据上一时刻的位置、速度、加速度,根据定义求这一时刻的位置、速度、加速度。
xt+Δt=xt+Δt˙xt˙xt+Δt=˙xt+Δt¨xt
❗ =右边的都是上一时刻的量。=左边的都是当前时刻的量。
💡 连续问题离散化,这种思想在课程中大量运用
❓ 问:为什么有第二个公式?如果是问题一,˙xt已知。如果是问题二,˙xt跟xt有关,应该用不到¨xt。而且¨xt未知,用到了也没法算
答:因为问题描述那里说的不准确。已知的是点在某个时刻/位置上受到的力。力->加速度->速度->位置。
特点:
- 简单,直观迭代。
- 误差:用不同大小的步长Δt会得到不同的结果。步长越小越精确。
- [1:18:54] 不稳定,且不稳定性与步长无关
👆 不管取多大的步长,最后一定会离开这个螺旋形的速度场。
✅ 误差不是严重的问题,因为可以通过减小步长来降低误差。但不稳定性是严重的问题,因为不管取什么步长,最后结果一定会离真实情况越来越远。
✅ 误差是一阶,步长再小也是一阶。
❓ 为什么有些情况下一定会不稳定,不稳定的本质原因是什么?
用数值方法解微分方程的共性问题:
- 误差 VS 精度
- 不稳定, divergence
❓ 所以不稳定的来源是数值方法而不是微分方程?
💡 我的思考:
有点像花书里的"病态问题'。输入的微小改变导到输出的巨大变化。
也可以理解为函数在不同方向上的敏感度差别很大.
后面介绍的这些方法都是在对抗前面提到的不稳定性。
中点法 Midpoint Method
- 当前点为x(t),用欧拉方法计算下一个时间步的位置,称为a点
xa=x(t+Δt)=x(t)+Δt⋅˙x(t)
- 取x(t)与a的中点,称为b点或mid点
xmid=x(t)+x(t+Δt)2=x(t)+Δt2⋅˙x(t)
- 取mid点位置的速度作为x(t)点的速度
˙x′(t)=˙xmid(t)
- 用˙x′(t)再算一次欧拉,得到c点
xc=x(t+Δt)=x(t)+Δt⋅˙x′(t)
直观上看,很奇怪中点法更准确。展开后发现,中点法比原方法多了二次项函
x(t+Δt)=x(t)+Δt⋅˙x(t)+(Δt)22¨x(t)
Adaptive Step Size 自适应步长
- 定义初始的Δt为Δ0
- 用欧拉方法计算xt+Δ0。即用Δ0算一遍欧拉方法
XT=x(t)+Δ0⋅˙x(t) 3. 用欧拉方计算xt+2∗12Δ0。 即用2∗12Δ0算两遍欧拉方法
Xmid=x(t)+Δ02⋅˙x(t)XT/2=xmid+Δ02⋅˙xmid
- 比较XT和XT/2,如果两者差别比较大,取后者,且将delta0更新为12delta0。
Implicit (隐式的) Euler Method
原问题:已知xt和˙xt,求 xt+Δt和dotxt+Δt
xt+Δt=xt+Δt˙xt˙xt+Δt=˙xt+Δt¨xt
转化为新问题:
xt+Δt=xt+Δt˙xt+Δt˙xt+Δt=˙xt+Δt¨xt+Δt
部分已知,部分未知,变成了一个优化问题。
我的思考:
显式和隐式,有种FK和IK的感觉。利用被依赖项计算依赖项,用数学公式。利用依赖项计算被依赖项,用优化问题近似。
优点:稳定。
❓ 隐式也是一阶,为什么比显式的稳定?
衡量各种欧拉方法的稳定性
指标:
- 局部截断误差:每一步会产生多少误差
- 全局积累误差
重要的不是指标的数值,而是这些指标与Δt的关系。
例如 Implicit Euler Method方法的稳定性为1阶。因为的它的局部截断误差是O(h2),全局累积误差是O(h)。
O(h)的意思是,当步长减小到一半,那它的误差的期望也会减小到一半。
O(h2)的意思是,当步长减小到一半,那它的误差的期望也会减小到1/4。
阶数越高越好。
Runge-kutta 方法
这是一类方法。
欧拉方法用于解线性ODE(常微分方程),而此类方法能够解非线性的ODE。
❓ 线性ODE和非线性的ODE什么区别?
其中Rk 4方法应用最广泛. 4代表4阶
已知:
dydt=f(t,y)y(t0)=y0
RK 4解法:
yn+1=yn+16h(k1+2k2+2k3+k4)tn+1=tn+h
说明:
这个公式里的h就是Δt
()中的四个加法项是基于中点法的中间结果,系数是精心设计的
🔎 数值分析课程会对这个算法有详细的解释
如果说中点法是泰勒展开的即视感,那么这里的公式是对泰勒展开更精确的模拟
问:为什么说RK系列擅长非线性呢?都是以欧拉方法为基础,在哪里引入的非线性的设计?
答:1阶是处理线性问题,高于1阶才能处理非线性。理解类似泰勒公式的近似截断。
Position Based / Verlet 积分
原理:只是通过调整位置使得能够满足某些限制,简化弹簧的物理推导过程
优点:快、简单
缺点:不是基于真实的物理过程可能会有错误
本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/