学习教程来自: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 实现

  1. 求每个粒子的密度,压强


</br>


</br>

  1. 求每个粒子的压强的梯度得到加速度


</br>


</br>

  1. 带入求解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>


</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 屏幕空间渲染

把粒子映射到屏幕空间上,在进行渲染的计算,实时渲染方