Skip to main content

Shell Actors

Experimental

Shell actors are part of the experimental API. Their API may change in future releases.

Shell actors represent thin-shell surface elements for simulating membranes, fabrics, and other sheet-like deformable structures. Unlike soft (FEM) actors, which use volumetric tetrahedral meshes, shell actors operate on surface triangle meshes and model both in-plane stretching and out-of-plane bending.

Formulation

Continuous Model

Shell actors approximate the Kirchhoff–Love thin shell model, which is posed on a parametric surface ΓX\Gamma_\mathbf{X} parameterized by the mapping X(ξ)\mathbf{X}(\bm{\xi}) from coordinates ξR2\bm{\xi}\in\mathbb{R}^2 to position XR3\mathbf{X}\in\mathbb{R}^3. The surface ΓX\Gamma_\mathbf{X} defines the undeformed reference configuration, while the deformed position of X(ξ)\mathbf{X}(\bm{\xi}) is given by x(ξ)\mathbf{x}(\bm{\xi}). This can be expressed in terms of a displacement field u=xX\mathbf{u} = \mathbf{x} - \mathbf{X}, which is treated as the unknown solution.

Kinetic energy is

T=12ΓXρA0u˙22dX .T = \frac{1}{2}\int_{\Gamma_\mathbf{X}} \rho_{A0}\Vert\dot{\mathbf{u}}\Vert_2^2\,d\mathbf{X}~.

Elastic potential energy UU is given in terms of a density WW per unit reference area,

U=ΓXWdX .U = \int_{\Gamma_\mathbf{X}} W\,d\mathbf{X}~.

The energy density WW is the sum of two terms:

W=Wmembrane(ε)+Wbend(κ) ,W = W_{\text{membrane}}(\bm{\varepsilon}) + W_{\text{bend}}(\bm{\kappa})~,

where WmembraneW_{\text{membrane}} is the membrane energy, depending on the membrane Green–Lagrange strain ε\bm{\varepsilon}, and WbendW_{\text{bend}} is the bending energy, depending on a curvature strain κ\bm{\kappa}. Expressed with respect to the standard curvilinear basis {Eα=Xξα}α=0,1\left\{\mathbf{E}_\alpha = \frac{\partial\mathbf{X}}{\partial\xi^\alpha}\right\}_{\alpha=0,1} of the reference configuration, these strains are

εαβ=12(aαβAαβ) ,καβ=Bαβbαβ ,\varepsilon_{\alpha\beta} = \frac{1}{2}(a_{\alpha\beta} - A_{\alpha\beta})~,\qquad\kappa_{\alpha\beta} = B_{\alpha\beta} - b_{\alpha\beta}~,

where A\mathbf{A} and B\mathbf{B} are the metric tensor and second fundamental form of ΓX\Gamma_\mathbf{X} and a\mathbf{a} and b\mathbf{b} are the corresponding tensors on the deformed surface, pulled back to ΓX\Gamma_\mathbf{X}. We follow the Einstein summation convention, with tensor indices α,β{0,1}\alpha,\beta\in\{0, 1\}.

Both energy terms are isotropic St. Venant–Kirchhoff materials, with energies given by

Wmembrane=λ2(trε)2+μtr(ε2) ,Wbend=12(α(trκ)2+βtr(κ2)) ,W_{\text{membrane}} = \frac{\lambda}{2}(\text{tr}\,\bm{\varepsilon})^2 + \mu\,\text{tr}(\bm{\varepsilon}^2)~,\qquad W_{\text{bend}} = \frac{1}{2}\left(\alpha(\text{tr}\,\bm{\kappa})^2 + \beta\,\text{tr}(\bm{\kappa}^2)\right)~,

where λ\lambda and μ\mu are 2D Lamé parameters, α\alpha and β\beta are bending stiffness coefficients, and the trace operator is defined as trτ=ταα=Aαβτβα\text{tr}\,\bm{\tau} = {\tau^\alpha}_\alpha = A^{\alpha\beta}\tau_{\beta\alpha} for a tensor τ\bm{\tau}.

Mass and stiffness dissipation are given by the dissipation potential

R=ΓX(αR12(ρA0u˙22)+βR(Wmembrane(ε˙)+Wbend(κ˙)))dX ,R = \int_{\Gamma_\mathbf{X}} \left(\alpha_R\frac{1}{2}(\rho_{A0}\Vert\dot{\mathbf{u}}\Vert_2^2) + \beta_R\left(W_\text{membrane}(\dot{\bm{\varepsilon}}) + W_\text{bend}(\dot{\bm{\kappa}})\right)\right)\,d\mathbf{X}~,

where αR\alpha_R and βR\beta_R are mass and stiffness dissipation coefficients. This potential is the natural shell generalization of the soft-actor dissipation model.

Parameter Selection

The material parameters λ\lambda, μ\mu, α\alpha, and β\beta can represent any isotropic membrane and bending responses. However, they are not directly available in material handbooks. In the special case of a shell that is made of homogeneous isotropic material with Young's modulus EE, Poisson's ratio ν\nu, and mass density per unit reference volume ρ0\rho_0, we can calculate the shell material properties assuming a thickness hh:

λ=hEν1ν2 ,μ=hE2(1+ν) ,α=h3Eν12(1ν2) ,β=h3E(1ν)12(1ν2) ,ρA0=hρ0 .\lambda = \frac{hE\nu}{1 - \nu^2}~, \qquad \mu = \frac{hE}{2(1 + \nu)}~, \qquad \alpha = \frac{h^3E\nu}{12(1 - \nu^2)}~, \qquad \beta = \frac{h^3E(1 - \nu)}{12(1 - \nu^2)}~, \qquad \rho_{A0} = h\rho_0~.

The utility function ShellMaterialParamsFrom3dIsotropic is provided to apply these formulas. Even for materials where these assumptions do not apply (e.g., textiles consisting of woven threads), this can provide a reasonable starting point for relative orders of magnitude of membrane and bending terms. The stiffness-damping coefficient βR\beta_R can be taken directly from a 3D material, while the mass-damping coefficient αR\alpha_R can be tuned empirically as a crude approximation of air resistance effects.

Discretization

The reference configuration ΓX\Gamma_\mathbf{X} is discretized as a surface triangle mesh. The degrees of freedom are the displacements of each mesh vertex (node), giving 3N3N total DoFs for NN nodes. Concepts from discrete differential geometry are then used to define discrete counterparts of the kinematic quantities needed by the continuous model.

Displacement is interpolated with linear finite element shape functions within each triangle. This results in a constant value for ε\bm{\varepsilon} over each triangle, making the discrete evaluation of WmembraneW_\text{membrane} straightforward. The discretization of WbendW_\text{bend} is more complex, and depends on approximating the second fundamental form of a triangulated surface. We use a similar discrete approximation as that of Chen et al. (2021), Appendix A, which estimates the second fundamental form on each triangle from a four-triangle stencil including its three edge-neighbors. This involves first computing a mid-edge normal vector ni\mathbf{n}_i for the edge opposite each vertex xi\mathbf{x}_i of the triangle, then approximating the partial derivatives of the normal vector with respect to parametric coordinates using finite differences between midpoints of edges:

bαβ=eαnξβ[b]2[(n1n0)e0n0e1n0e1(n2n0)e1] ,b_{\alpha\beta} = -\mathbf{e}_\alpha\cdot\frac{\partial\mathbf{n}}{\partial\xi^\beta} \quad\rightarrow\quad\lbrack\mathbf{b}\rbrack \approx 2 \begin{bmatrix} (\mathbf{n}_1 - \mathbf{n}_0) \cdot \mathbf{e}_0 & -\mathbf{n}_0 \cdot \mathbf{e}_1 \\ -\mathbf{n}_0 \cdot \mathbf{e}_1 & (\mathbf{n}_2 - \mathbf{n}_0) \cdot \mathbf{e}_1 \end{bmatrix}~,

where e0=x1x0\mathbf{e}_0 = \mathbf{x}_1 - \mathbf{x}_0 and e1=x2x0\mathbf{e}_1 = \mathbf{x}_2 - \mathbf{x}_0 are the curvilinear basis vectors of the triangle's local parameterization and formulas for off-diagonal entries have been simplified using orthogonality of normals with their corresponding edges and the symmetry bαβ=bβαb_{\alpha\beta} = b_{\beta\alpha}. Unlike Chen et al., the mid-edge normals {ni}\{\mathbf{n}_i\} are computed via Kelvin inversion (not normalization) of the midpoints between normal vectors of each edge's two adjacent triangles, AiA_i and BiB_i:

ni=12(nAi+nBi)12(nAi+nBi)22 .\mathbf{n}_i = \frac{\frac{1}{2}(\mathbf{n}_{A_i} + \mathbf{n}_{B_i})}{\left\Vert \frac{1}{2}(\mathbf{n}_{A_i} + \mathbf{n}_{B_i})\right\Vert_2^2}~.

This is consistent with normalization in the limit of fine discretization of smooth surfaces, but causes the discrete curvature to diverge if the angle between two adjacent normals approaches 180 degrees. It can be seen as a generalization of the diverging tan\tan-based edge energy recommended by Tamstorf and Grinspun (2013), and makes the formulation more robust against adjacent triangles folding through each other. If an edge is at a boundary of the mesh, the missing face normal is set to the normal of the adjacent face.

Parameters Reference

ShellActorParams

ParameterTypeDefaultDescription
nameDynamicString""Actor name for identification
layerDynamicString""Layer name for grouping
worldFromLocalTransformRTIdentityInitial world-space transform
shapeShapeHandle--Required. Must be a TriangularMeshShape created with CreateTriMeshShape.
materialShellMaterialParamsSee belowMaterial properties (membrane Lamé parameters, bending, density)
colliderTypeColliderTypePointCloudMust be ColliderType::PointCloud or ColliderType::None. Controls shell-to-shell contact participation.
contactContactParamsDefaultContact properties for interactions with volume (non-shell) actors. Friction settings also apply to shell-shell contact.
pointCloudColliderPointCloudColliderParamsDefaultPoint-cloud collider parameters.
hasGravitybooltrueWhether gravity affects this actor
contactElementTypeActorBoundaryElementTypeDefaultQuadrature type for contact element sampling

ShellMaterialParams

ParameterTypeDefaultUnitsDescription
membraneLambdareal300Pa*m2D Lamé first parameter (plane-stress StVK, thickness-integrated)
membraneMureal400Pa*m2D Lamé second parameter (plane-stress StVK, thickness-integrated)
bendingAlphareal0.00002Pa*m^3First bending stiffness parameter
bendingBetareal0.00007Pa*m^3Second bending stiffness parameter
densityreal1.0kg/m^2Mass per unit surface area
massDampingCoefficientreal01/sMass-proportional damping coefficient αR\alpha_R
stiffnessDampingCoefficientreal0sStiffness-proportional damping coefficient βR\beta_R

Examples

  • T-shirt on Plane: loads a garment triangle mesh, derives shell material parameters from three-dimensional properties, and enables point-cloud self-contact. Python example: examples/example_tshirt_on_plane.py.
  • Slit Annular Ring Benchmark: solves a literature benchmark for geometrically nonlinear shell behavior while demonstrating prescribed nodal boundary conditions, external nodal forces, and dynamic relaxation toward a static reference solution. Python example: examples/example_slit_annular_ring.py.
  • Soft Actors — Volumetric deformable bodies using tetrahedral FEM. Use when thickness is not negligible relative to other dimensions.
  • Solvers — Details on the Newton solver, linear solvers, and line search methods used to integrate shell dynamics.
  • Contact — General contact model documentation, including penalty-based contact and friction.

References