学习教程来自: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
- 杨氏模量 Young’s modulus E:应力/应变之比,单位是Pa(N/m^2) ,描述固体材料抵抗形变能力的物理量,是沿纵向的弹性模量
</br>
- 泊松比 Poisson’s ratio ν :横向正应变和轴向正应变的比值,泊松比较大时更接近不可压缩,例如皮筋为正的泊松比,是反映材料横向变形的弹性常数
</br>
注意:以下的量均可根据杨氏模量和泊松比计算出,故一般只给出1和2即可得到材料的弹性属性
</br>
- 体积模量/体变模量 Bulk modulus K :压强和体积变化的关系,单位Pa,V为原本的体积
</br>
- Lamé’s first parameter µ
- 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>