学习教程来自:GAMES201:高级物理引擎实战指南2020
以下大部分图片来自教程PPT,仅作为笔记用于学习和分享,侵删
笔记
1. 拉格朗日视角(Lagrangian View)
用拉格朗日粒子、三角网格、Grid等,代表跟随材料移动的节点(Sensor),不断检测自身的位置和速度
</br>
2. 欧拉视角(Eulerian View)
一般网格本身不移动,检测穿过当前Sensor的材料的速度
</br>
3. Mass-Spring Systems(弹簧质点系统)
用作布料系统、弹性物体等
游戏作品:《World of Goo》《Build a Bridge》
</br>
胡克定律:i和j之间的力=-弹簧刚度(i和j距离-弹簧正常状态下长度)j到i的单位向量
</br>
加速度和速度
3.1 离散化
时间的离散化:取一个时间步长,实现时一般将1/24或1/60的时间步长拆分为更小的步长实现
前向欧拉法(Forward Euler、显式积分explicit):
</br>
下一时刻的速度 = 速度 + 时间步长 x 加速度
下一时刻的位置 = 位置 + 时间步长 x 速度
Semi-implicit Euler(explicit):
</br>
下一时刻的速度 = 速度 + 时间步长 x 加速度
下一时刻的位置 = 位置 + 时间步长 x 下一时刻速度
Backward Euler(implicit):
3.2 Explicit v.s. implicit(显式积分器和隐式积分器)
显式:未来的状态由过去的状态计算得出(forward Euler, symplectic Euler, RK等)
优点:易于实现
缺点:容易爆炸(在弹簧质点系统下,一个timestep中震荡了多个周期),对较硬的材质不友好(k值变大)
</br>
隐式:未来的状态由未来和过去的状态计算得出(backward Euler, middle-point等)
缺点:难以实现和优化,每个步长变得昂贵但容忍的时间步长更大(更快),Numerical damping and locking
3.3 实现
</br>
隐式积分
</br>
1带入2消去xt+1
</br>
线性化:对力f一阶泰勒展开
</br>
移项:得到线性系统
3.4 解线性系统的方法
Jacobi iterations:雅各比迭代
Gauss-Seidel iterations
Conjugate gradients:共轭梯度
使用雅各比迭代求解vt+1
</br>
Lecture — Jacobi Iteration Method
</br>
增加一个系数β,分别取
0(forward/semi-implicit Euler (explicit))
1/2(middle-point (implicit))
1(backward Euler (implicit))得到不同的结果
</br>
3.5 优化
稀疏矩阵、共轭梯度、预条件、PBD等
4. SPH(Smoothed particle hydrodynamics)
</br>
一点的物理量A由核函数累加周围(半径h之内)的每个点Ai得到
适合模拟自由表面流体(例如水),不适合非自由表面流体(例如烟雾)(需要填满整个空间,消耗大)
4.1 WCSPH(Weakly Compressible SPH)
材料倒数:跟着粒子动的倒数
加速度
</br>
压强
</br>
密度
</br>
求一个物理量的梯度
</br>
4.2 实现
- 求每个粒子的密度,压强
</br>
</br>
- 求每个粒子的压强的梯度得到加速度
</br>
</br>
- 带入求解Symplectic Euler step
</br>
4.3 一些SPH变种
Predictive-Corrective Incompressible SPH (PCI-SPH)
隐式积分,引入预测机制,最终速度场的散度比较小,流体更加接近不可压缩
Position-based fluids (PBF)
PBD结合SPH方法
Divergence-free SPH(DFSPH)
速度上Divergence-free
4.4 CFL(Courant Friedrichs Lewy)condition
另一个对于时间步长的限制:一个步长内移动的最大距离/离子半径小于等于Cmax(叫做Courant number/CFL)
</br>
4.5 加速SPH-Neighborhood search
</br>
使用一个Grid限制粒子遍历的范围,只在周围的格子里找半径小于h的粒子进行计算
4.6 其他基于粒子的模拟方法
DEM(Discrete element method):模拟沙子等
MPS(Moving Particle Semi-implicit):类似SPH,流体的不可压缩性更好
Power Particles: An incompressible fluid solver based on power diagrams,视觉上粒子之间的间距会非常均匀
A peridynamic perspective on spring-mass fracture
5. 一篇SPH流体和刚体耦合的论文
Interlinked SPH Pressure Solvers for Strong Fluid-Rigid Coupling
强耦合-上文:解线性系统/迭代时,2个系统联立求解
弱耦合:例如先解流体,再把流体作为刚体边界条件解刚体,再把刚体解算的得到边界条件解流体
6. 一些问题
6.1 从粒子到水面
表面重建:Marching Cube方法:把粒子光栅化到背景网格,再用三角形填充背景网格
重建前的预处理:对背景网格进行处理
6.2 屏幕空间渲染
把粒子映射到屏幕空间上,在进行渲染的计算,实时渲染方