GAMES103课程笔记07-Finite Element Method I
这个系列是GAMES103:基于物理的计算机动画入门(GAMES 103: Intro to Physics Based Animation)的同步课程笔记。本课程是计算机动画的入门课程,着重介绍各种基于物理的动画仿真模拟技术。本节课主要介绍有限元在物理仿真中的应用。
Linear Finite Element Method
Deformation Gradient
线性有限元(linear FEM)是有限单元法(FEM)中最基本的形式。在linear FEM中我们使用三角形网格来表示物体,并且假设三角形内部任意点的运动可以使用一个线性变换来表示:
式中

因此我们可以利用三角形的两条边来计算变形梯度:
这样我们就可以利用三角形在变形前后的坐标来计算变形梯度。但需要注意的一点是这样计算出的变形梯度实际上同时包含了变形和旋转:即使三角形只进行了旋转而没有发生变形,我们仍然可以计算出一个变形梯度,此时

Green Strain
显然我们希望求解出的变形能够与刚体变换无关。因此可以对
其中

因此我们希望可以从
上式中
Strain Energy Density Function
有了变形后就可以定义系统的能量。我们定义面积微元上的变形能量为能量密度(energy density)
对于linear FEM整个三角形上的变形是相同的,因此三角形的能量等于能量密度乘以三角形的面积:
在图形学中一般使用Saint Venant-Kirchhoff Model(StVK)来计算能量密度:
其中

对能量密度求导可以发现:
其中
Forces
通过对能量求导就可以计算出作用在每个顶点上的力:
其中

最后整理得到顶点上的力:
利用单元上合力为0可以得到
Finite Volume Method
除了FEM外在图形学中还经常使用有限体积法(finite volume method, FVM)来求解弹性体的变形问题,而且对于线性单元FVM和FEM实际上是等价的。
Traction and Stress
首先我们定义内力在单位长度(面积)上的分布为traction,记为
同时,traction可以表示为应力张量
因此我们可以得到应力张量表达的内力:

不难发现,在FVM中我们更多地是从积分的角度来看待物体的力与变形。对于三角网格,我们定义每个面片对于顶点力的贡献为:
其中
这样就得到了边界

对于三维的情况只需要把曲线边界推广成面积即可:

Different Stresses
从上面的推导可以发现计算顶点力的核心是应力张量

实际上根据参考系的不同应力张量有不同的定义,在FEM中使用的是第二类Piola-Kirchhoff应力张量,而在FVM中则使用的是柯西应力张量(Cauchy stress)。还有第一类Piola-Kirchhoff应力张量(first Piola-Kirchhoff stress),它表示法向在变形前但traction在变形后的应力张量:

第一类Piola-Kirchhoff应力张量和第二类Piola-Kirchhoff应力张量之间只相差一个变形梯度矩阵,而第一类Piola-Kirchhoff应力张量和柯西应力张量之间的变换关系可以推导如下:


总结一下,不同应力张量之间的转换关系可参见下表:

这样我们就可以通过前面计算出的
其中

接下来考虑

整理得到:

最终FVM的求解过程如下:

Hyperelastic Models
First Piola–Kirchhoff Stress
我们可以把第一类Piola-Kirchhoff应力张量

同时应力张量

Isotropic Materials
假设弹性体是各向同性的(isotropic),我们还可以进一步把变形前的旋转分离出去:

因此
其中
其中
我们可以使用

其中第一项表示材料抵抗剪切的能力,而第二项则表示材料保持原有体积(面积)的能力。其它常用模型的能量密度计算公式如下:

当我们获得了能量密度后就可以通过对能量密度求导来计算应力张量:
这样通用模型的弹性体节点力计算过程如下:
