学习教程来自:GAMES201:高级物理引擎实战指南2020
以下大部分图片来自教程PPT,仅作为笔记用于学习和分享,侵删


笔记内容大多为课程内容的翻译和转述,外加一些自己的理解,若有不正确的地方恳请大家交流和指正

笔记

0. 显式时间积分器和隐式时间积分器对比

显式容易实现,数值上不稳定,对dt更敏感。
隐式较难实现(通常需要求解线性系统、多次迭代、求倒数等),但允许较大dt。

1. 模拟弹性物体

弹性材质是很多材质的基础(viscoelastic粘弹性, elastoplastic弹性塑料, viscoplastic粘塑性,等)

1.1 形变 Deformation

deformation map ϕ(向量函数)把物质的静止位置Xrest映射到形变位置Xdeformed


</br>

将此函数对静止位置求导,得到形变梯度F


</br>

J(Jacobian)=形变后体积/静止体积=矩阵F的行列式


</br>

1.2 弹性 Elasticity

材料具有恢复到静止状态的性质

超弹性模型Hyperelasticity
ψ:势能函数,表示单位体积的应变势能的密度(strain energy density function)。定义了应力和应变的关系
Stress:应力,材料内部的弹性力,用来恢复材料的体积形状的内力
Strain:应变,材料形变的度量,可用形变梯度F替换


</br>

1.3 应力张量 Stress tensor

一个3x3矩阵/2阶张量,取材料微元内部的截面的法向量乘以Stress tensor,可以得到对周围邻居施加的力(应力?)(Traction)


</br>

3种常见的Stress tensor:P、τ、σ
PK1(The First Piola-Kirchhoff stress tensor):对ψ求导,在rest空间下计算得到应力张量(Stress tensor),不对称


</br>

Kirchhoff stress tensor:在形变后的空间计算得到,对称
Cauchy stress tensor:在形变后的空间计算,对称(由于角动量守恒)

三者的关系的理解:3个都是stress tensor,Kirchhoff=形变梯度的行列式乘以Cauchy=PK1乘以形变梯度的转置。J形变梯度的行列式表示形变后体积的变化比值。F转置表示材料从rest space(形变前空间)到形变后的空间,F转置求逆则相反,从形变后的空间到rest space。


</br>

1.4 几个描述弹性材料的属性 Elastic moduli

  1. 杨氏模量 Young’s modulus E:应力/应变之比,单位是Pa(N/m^2) ,描述固体材料抵抗形变能力的物理量,是沿纵向的弹性模量


</br>

  1. 泊松比 Poisson’s ratio ν :横向正应变和轴向正应变的比值,泊松比较大时更接近不可压缩,例如皮筋为正的泊松比,是反映材料横向变形的弹性常数


</br>

注意:以下的量均可根据杨氏模量和泊松比计算出,故一般只给出1和2即可得到材料的弹性属性


</br>

  1. 体积模量/体变模量 Bulk modulus K :压强和体积变化的关系,单位Pa,V为原本的体积


</br>

  1. Lamé’s first parameter µ
  2. Lamé’s second parameter λ(切变模量/剪切模量/G):剪切应力与应变的比值,越大材料刚性越大,难以剪切

1.5 常见的超弹性模型

Linear elasticity:更适用于小范围的形变,材料在模拟时旋转后不再符合物理规律

Neo-Hookean模型:


</br>

修正后的Corotated模型:其中σi时F的奇异值/特征值(singular values)


</br>

2. 有限元 FEM

Finite element method:一个使用了weak formulations的离散化方法,把空间分为一个个Element(如三角元素)

2.1 弹性系统中的有限元

由于形变梯度(deformation gradient)F在一个有限元元素(element)里是一个常数,deformation map ϕ成为一个仿射变换(affine)


</br>

元素的弹性势能:能把势能密度在体积上积分得到,由于F是一个常数,故密度也是常数,积分结果为体积乘以密度
势能定义:-力关于位置求导数 dw = -f ds


</br>

2.2 形变梯度F的计算

以下为2维空间下,三角形作为元素的求解F(2x2矩阵)过程,已知deformation map如下


</br>

将x分别拆分为三角形3个顶点的位置


</br>

1-3 2-3化简


</br>

构建矩阵B和D直接求,其中B可提前计算出(其只和静止位置相关)


</br>

2.3 更新速度和位置

显式积分器方法,Semi-implicit Euler (aka. symplectic Euler)


</br>

其中只求f即可,过程:势能求导=每个元素的势能求导再求和=拆出每个元素的势能,并使用链式求导法则=用PK1替换(V为常数,只剩下PK1和F导数)


</br>

隐式积分器方法,backward Euler,其中f部分已经再上边求出,式中需要再对f求一次导数(二阶导数),M为对角矩阵,存储每个节点的质量


</br>