Vega FEM Library |
Vega is a computationally efficient and stable C/C++ physics library for three-dimensional deformable object simulation. It is designed to model large deformations, including geometric and material nonlinearities, and can also efficiently simulate linear systems. Vega contains about 145,000 lines of code, and is open-source and free. It is released under the 3-clause BSD license, which means that it can be used freely both in academic research and in commercial applications.
Vega implements several widely used methods for simulation of large deformations of 3D solid deformable objects:
Method | Description | Citations |
co-rotational linear FEM (optional: exact tangent stiffness matrix) | large deformations, uses polar decomposition of the deformation gradient to extract large rotations, linear strain-stress relationship | [MG04]; exact matrix: [Bar12] (similar to [CPSS10]) |
co-rotational orthotropic (anisotropic) FEM elasticity | same as above, but the strain-stress relationship is orthotropic, i.e., models anisotropic materials with different stiffnesses in three orthogonal directions | [LB14] |
invertible isotropic nonlinear FEM | large deformations, nonlinear isotropic strain-stress relationship, e.g., Saint-Venant Kirchhoff, neo-Hookean, Mooney-Rivlin models; includes a mechanism to handle element inversions | [ITF04], [TSIF05] |
Saint-Venant Kirchhoff FEM deformable model | large deformations, Green-Lagrange strain, linear strain-stress relationship, informally referred to as isotropic geometrically nonlinear FEM | [Bar07] |
linear FEM elasticity | standard small-deformation FEM, linear Cauchy strain, linear strain-stress relationship | [Sha90] |
mass-spring system | standard 3D mass-spring code; optionally, the network can be built as edges of a tet mesh | many |
For any 3D tetrahedral or cubic mesh, Vega can compute the elastic energy, the internal elastic forces and their gradients (tangent stiffness matrix), in any deformed configuration. Different parts of the mesh can be assigned arbitrary material properties. Vega can also timestep these models in time under any user-specified forces, using several provided integrators: implicit backward Euler [BW98], implicit Newmark [Wri02], explicit central differences [Wri02] and symplectic Euler. All models include support for multi-core computing. In addition to linear materials, Vega provides neo-Hookean and Mooney-Rivlin nonlinear material models; arbitrary nonlinear material models can be added to Vega. For isotropic hyperelastic materials, this is as easy as defining an energy function, and its first and second derivatives.
Since version 2.0, Vega FEM also supports model reduction [BJ05], cloth simulation (Baraff-Witkin cloth solver, [BW98]), and rigid body dynamics. Isotropic materials now also include (optional) compression resistance ([KTY09] and several prior references), which makes it possible to simulate very soft materials undergoing large compression in a stable way.
Since version 2.1, Vega FEM also supports orthotropic materials [LB14], i.e., anisotropic materials that exhibit different stiffnesses in three orthogonal directions. Also included is a binary .vegb format, faster loading of volumetric meshes with many regions, and support for the clang compiler (Mac). We also fixed known bugs and made numerous code improvements.
Vega FEM 2.2 was a minor release, fixing a few minor issues and memory leaks.
Vega FEM 3.0 provides elastic energy functions for all the materials in Vega, improved cloth implementation [BW98], signed distance field calculation from manifold meshes, or from general ``polygon soups'' [XB14], marching cubes with topological guarantees (similar to [LLVT03,Che95]), quality triangular meshing of distance field level sets [ORY05], Delaunay tetrahedralization of an arbitrary point set in 3D [BOW81], (including efficiently adding new points), constrained Delaunay 3D tet meshing with refinement [Si08,SG11] (experimental feature), calculating the winding number for triangle meshes [JKSH13], Laplacian matrix of a tet mesh [XLCB15], calculating eigenmodes of a 3D mesh under constraints [HX16], improved PARDISO solver wrapper, and bug fixes.
Vega FEM 3.1 is a minor release. Changes include positive-definite invertible materials, improved Delaunay mesher and tet mesher, improved code style, and bug fixes.
Vega FEM 4.0 provides virtual tet meshing for nearly self-colliding and colliding triangle meshes [LB18]. It also improves the multi-threading efficiency of elastic force and stiffness matrix computations (via "stencil force models"). We also replaced pthreads with Intel TBB for multi-threading, and added support for cubic meshes to corotationalLinearFEM. We also provide an as-rigid-as-possible (ARAP) deformation implementation, and improved meshing with exact predicates.
Vega is a middleware physics library. It is aimed at researchers and engineers with some preexisting knowledge in numerical simulation, computer graphics and/or solid mechanics, who can integrate Vega into their projects. The strength of Vega lies in its many C/C++ libraries which depend minimally on each other, and are in most cases independently reusable. Vega contains about 120,000 lines of C/C++ code. It compiles under Windows, Linux and Mac OS X, and has no required external dependencies. Optionally, the built-in conjugate gradient solver can be replaced for an external sparse linear system solver such as Intel MKL or SPOOLES.
Most of Vega was written by Jernej Barbič. Other code contributors include Fun Shing Sin, Daniel Schroeder, Andy Pierce, Yuyu Xu, Yijing Li, Hongyi Xu, Yili Zhao, Bohan Wang, Danyong Zhao, Koki Nagano, Christopher Twigg and Somya Sharma.