Stable real-time deformations
Müller, M., Dorsey, J., & McMillan, L. (2002). Stable Real-time Deformations. Proceedings Of the ACM SIGGRAPH/Eurographics Symposium on Computer Animation. doi:10.1145/545261.545269
Summary
In this paper, Müller et al. introduce a stable method for deforming objects without increasing the volume of the object.
The Finite Element Method gives a function $F$ that converts deformations into elastic forces:
where $\mathbf{x}$ is the deformed location of the element and $\mathbf{x}_0$ is the original location of the element. The Jacobian of this matrix evaluated at $\mathbf{x}_0$ is called the stiffness matrix:
In the linear case, $F$ is approximated by a first-order approximation, giving
However, this assumes that the transformation between $\mathbf{x}_0$ and $\mathbf{x}$ is linear (i.e., no rotations). If this assumption is violated, because linear elastic forces are invariant under translations but not rotations, the resulting simulation will over-stretch.
To avoid this, Müller compute the forces in the original (unrotated) coordinate frame and then transform them back into the rotated coordinate frame:
where $R_e$ is a block matrix with the gobal rotation matrix $R_x$ repeated four times along the diagonal and zeros everywhere else (repeated once for each vertex). From this, they compute the force for the whole mesh by warping the stiffness matrix according to the rotation of each vertex. The force at vertex $i$ is then:
where $R_i$ is the rotation matrix for vertex $i$. However, these local rotations aren’t known (the global rigid-body rotation is known, but we want to know the local rotations which include the effect of deformation). Given the vectors for the original mesh ($\mathbf{u}$), and the vectors of the deformed/rotated mesh ($\mathbf{v}$), they compute:
where $\mathbf{n}_1$, $\mathbf{n}_2$, and $\mathbf{n}_3$ are the basis vectors of $\mathbb{R}^3$. Given $F$, they decompose it using SVD to get $F=USV^\top$, and then compute the rotation matrix as: