Skin and Muscles on 'Incredibles 2'

Pixar | Senior Software Engineer | 2016–2018

Led skin and muscle simulation developments on Incredibles 2.

Highlights

  • New robust skin tracking algorithm using 2D ray-tracing over mesh surfaces
  • Non-uniform projection spring constraints for art-directed skin behavior
  • FEM muscle development

Tags

PAL, PhysBAM, FEM, Skin Sim, Flesh Sim, Muscle Sim, SIGGRAPH

Contents

Overview

The skin simulation work on Incredibles 2 built directly on the layered pipeline we’d developed for Brave — invertible FEM flesh, rest state retargeting, sliding triangular skin constrained to track the flesh surface. The foundation held. Two things needed to change.

The first was the constitutive model. Brave used a biphasic finite element model: two stiffness phases, a transition threshold, three parameters to tune per character. It worked, but it was genuinely miserable to use, and I’d become increasingly convinced it was treating a symptom rather than the disease. The disease was that co-rotated linear elasticity — our workhorse since WALL·E — was simply bad at preserving area and volume. The biphasic stiff second phase was, in part, compensating for that. Theodore Kim and I had a lot of conversations about this over several productions. The result was Stable Neo-Hookean [Smith, de Goes, Kim 2018]: a new constitutive model that actually preserves area and volume, behaves smoothly through inversion, and needed no second stiffness phase.

The second was the sliding algorithm. Projection-based sliding had worked reliably for low-complexity situations — it had held up on Hank in Finding Dory, for instance [Kautzman et al. 2016]. But it fell apart on the raccoon in Incredibles 2, where the kinematic mesh contained frequent self-intersections during the fight sequence that made projection ambiguous and caused the simulation to collapse entirely. 2D ray-tracing over the mesh surface — developed with Ted Kim — replaced projection as the sliding mechanism and fixed it robustly.

Both results were presented at SIGGRAPH 2018. The sliding algorithm appeared in our talk. Stable Neo-Hookean appeared as a separate paper by Breannan Smith that same week.

SIGGRAPH 2016
Finding Hank: Or How to Sim an Octopus

Ryan Kautzman, Bill Wise, Meng Yu, Per Karlsson, Mark Hessler, Audrey Wong. Projection-spring–based skin simulation on Hank the octopus, representing the state of the prior approach before the 2D ray-tracing work on Incredibles 2.


Robust Skin Tracking

SIGGRAPH 2018
Robust Skin Simulation in Incredibles 2

Ryan Kautzman, Gordon Cameron, Theodore Kim. Skin sliding over a character can become non-physically snagged in curved or creased regions — armpits, for example — when it becomes ambiguous which part of the kinematic surface the skin should track. We address this by performing 2D ray-tracing over the mesh surface to resolve the ambiguity robustly and efficiently.

A skin simulation is a dynamic deformable triangular mesh constrained to slide in-plane on a kinematic surface. It never breaks the profile of the kinematic animation. It slides on the surface rather than floating free of it. This is an important distinction from cloth, which can float and wrinkle dramatically. Skin can wrinkle — adding bending energies does produce that behavior experimentally — but in production the priority is keeping the silhouette consistent with the animation. The value of the simulation is in the in-plane sliding: secondary ballistics, tissue moving with the character rather than locked rigidly to the rig.

There are two mostly-independent components: the in-plane constitutive model that governs how the triangular mesh deforms, and the out-of-plane constraint that keeps it on the surface and drives the sliding. They interact at one important seam: the constraint can detect inverted triangles, which the FEM itself can’t determine in isolation. When a triangle is near-inverted, the system communicates this and the out-of-plane spring force is relaxed, giving the element room to uninvert itself rather than being pinned in a degenerate state.

Projection Springs

The out-of-plane constraint works through projection springs: zero-length penalty springs connecting each skin mesh vertex to a corresponding anchor point on the kinematic surface. The anchor represents where the skin should be on the surface at any given moment. A stiff spring in the surface-normal direction keeps the skin on-surface, preventing it from floating away or tunneling through. A deliberately weak (or absent) spring in the tangent plane allows the skin to slide laterally without being locked to a fixed surface point.

The spring models the springiness of the adipose layer — the fat between skin and muscle that allows skin to slide over the underlying structure. It’s a physically motivated formulation: real skin isn’t welded to muscle, it’s connected through compliant tissue that allows differential motion.

When the normal-direction constraint and the collision system interact, there’s a conditioning issue. If a triangle is near-inverted, a stiff out-of-plane spring can trap it in that degenerate state by removing the out-of-plane degree of freedom the element needs to recover. The fix is to condition the spring force on the triangle’s deformation state: when a triangle’s phi value falls below a threshold indicating near-inversion, the spring force lightens up and gives the element room to right itself.

The constraint stiffness can also be made spatially non-uniform: different regions of the character get different binding strengths. This enables art-directed control over where the skin slides loosely versus where it tracks tightly to the underlying animation.

A Better Constitutive Model

Before getting to the sliding algorithm, the in-plane constitutive model matters more than it might seem at first — because the material model and the sliding constraint aren’t fully independent.

Skin simulation’s two persistent failure modes — snagging and uncontrolled bunching — are related. If the in-plane model can’t preserve area and is prone to inversion, the out-of-plane spring fights against recovery: it removes the out-of-plane degree of freedom that an inverted element needs to uninvert. A material that holds its area well works with the constraint rather than against it.

Since WALL·E, our workhorse constitutive model had been co-rotated linear elasticity. It decomposes the deformation gradient into a rotation and a stretch, applies linear elastic forces in the rotated local frame, then rotates the forces back to world space. This handles large rotations correctly and survives element inversion [Irving et al. 2004]. But it has a well-known failure mode for area and volume preservation. As you increase the Poisson’s ratio — the parameter controlling resistance to volume change — co-rotated linear doesn’t get better at preserving volume. It gets progressively more unstable, eventually producing wildly nonphysical behavior near the incompressible limit. The parameter you’d reach for to increase volume preservation actually makes the simulation worse.

ARAP (as-rigid-as-possible) is essentially co-rotated linear with volume preservation disabled entirely — it doesn’t even try. StVK ignores inversion altogether, which rules it out for the deformation ranges we see in Pixar animation. Classical Neo-Hookean and Mooney-Rivlin formulations are theoretically correct but had been impractical for production use. The result was that biphasic stiffness on Brave was partially compensating for a material model that leaked area under stress — the stiff second phase caught material that was stretching unrealistically because co-rotated linear wasn’t preserving area adequately. It was a workaround rather than a fix.

Stable Neo-Hookean [Smith, de Goes, Kim 2018] addressed this directly. Its key properties for skin simulation:

SIGGRAPH 2018 · ACM Trans. Graph.
Stable Neo-Hookean Flesh Simulation

Breannan Smith, Fernando de Goes, Theodore Kim. A Neo-Hookean constitutive model with correct volume preservation behavior, smooth energy through element inversion, and closed-form eigenvalue/eigenvector expressions that allow direct projection of the Hessian to semidefiniteness.

The practical payoff was significant workflow simplification. Biphasic required tuning two stiffness values plus a transition threshold — three parameters in a complex relationship that took deep experience to set well. SNH reduced this to a single stiffness parameter. The biphasic model could be dropped entirely.

Full disclosure: Stable Neo-Hookean was developed in conjunction with Incredibles 2 production but didn’t make it into the raccoon skin sim — the skin behavior was finalized before it was ready. It was used elsewhere in I2 production, and it debuted as a separate SIGGRAPH 2018 paper by Breannan Smith the same week as our skin talk.

2D Ray-Tracing for Sliding

Each timestep, after integrating the skin mesh forward under its elastic forces, the anchors need to update — to advance along the kinematic surface to wherever the simulation wants the skin to go. The projection approach to this update is straightforward: for each skin vertex, project it to the closest point on the kinematic surface and use that as the new anchor.

Projection works when the kinematic mesh is simple. It fails when the mesh has sharp creases, concavities, or self-intersections, because a given point in space may then have multiple candidate projection targets. The correct choice is the one that minimizes geodesic distance from the previous anchor — the candidate that requires the least actual surface travel to reach. But computing geodesic distance for every anchor at every timestep, on a continuously changing mesh, is computationally prohibitive [Kautzman et al. 2012].

SIGGRAPH 2012
Stable, Art-Directable Skin and Flesh Using Biphasic Materials

Ryan Kautzman, Jiayi Chong, Patrick Coleman. The projection springs approach to skin sliding on Brave, using Euclidean-distance projection to update anchor positions each timestep — the prior approach that the 2D ray-tracing method replaces.

Earlier attempts to approximate geodesic distance with Euclidean distance proxies, or by restricting search to an N-ring neighborhood [Saito and Yuen 2017], fail when the mesh is sufficiently pinched or motion is sufficiently large. The raccoon fight sequence in Incredibles 2 made this failure mode severe: the kinematic mesh contained frequent self-intersections in the hind legs and torso during the fast action. Under projection-based sliding, the simulation picked wrong projection candidates, introduced discontinuous anchor jumps, and collapsed entirely.

The key insight is that projection causes the problem in the first place. The moment you lift an anchor off the surface to find a new one, you’ve introduced the ambiguity. The fix is to never leave the surface at all.

The 2D ray-tracing approach [Kautzman, Cameron, Kim 2018] walks each anchor over the kinematic mesh rather than projecting it. The anchor is always on the surface, so there’s never ambiguity about which face it belongs to. The algorithm:

  1. Take the displacement vector between the current anchor and its candidate (off-surface) position, and project it into the plane of the triangle containing the current anchor.
  2. Compute a QR decomposition of the triangle’s edge matrix D_m = QR, where D_m ∈ ℝ³×² stacks the two edge vectors. This gives an orthonormal basis Q for the triangle’s plane and a 2×2 matrix R that maps between world space and canonical triangle coordinates.
  3. Transform the anchor and displacement direction into the canonical 2D frame using R⁻¹Qᵀ. R is 2×2, so inverting it is fast. The ray-tracing problem is now a simple 2D ray-triangle intersection against three edges.
  4. If the ray exits through an edge, transform the hit point back to world space, step across to the adjacent face, and continue from there.
  5. If the ray terminates in the interior of the triangle, that interior point is the new anchor.
  6. If there is no adjacent face (mesh boundary), the anchor stops at the edge.
  7. If the same face is encountered twice, a sharp crease has been hit and the anchor’s optimal position lies on an edge rather than a face — terminate there.

One additional refinement: inserting an anchor only at each skin vertex is insufficient, because a face can unnaturally straddle a sharp crease in the kinematic mesh (vertices on each side get pulled in opposite directions). Adding an anchor at the barycenter of each face prevents this.

The computational cost of the ray-tracing step is negligible. For the raccoon (18,929 triangles, 181 frames), the ray-tracing step never exceeded 1% of total frame time. The dominant costs were collision processing and the linear system solve — the raccoon mesh contained badly-conditioned triangles. Per-frame average was 78.63 seconds.

Projection-based sliding:

2D ray-trace sliding:

Without the new algorithm, the simulation collapsed entirely. With it, it worked.

Finals

The raccoon fight is the scene: Jak-Jak decides the raccoon raiding the family trash is a supervillain, and it becomes his personal mission to defend the garbage. It’s a high-velocity sequence, and the raccoon — skinny, cartoonish, fast — was exactly the kind of character where the old projection-based algorithm fell apart.

For a character like this, skin simulation earns its keep by maintaining a biological quality that would be difficult to hand-author. The skin keeps the silhouette consistent with the animation while adding the sense of mass sliding under fur. Because the fur is rooted to the skin surface, layering a hair sim on top of the skin sim gives you fur motion for free.

Bob got skin sliding to sell his weight.


Flesh and Muscle Sim

The heroes of Incredibles 2 carried forward the flesh simulation approach from Brave — invertible tetrahedral FEM, rest state retargeting, soft constraint springs — now with Stable Neo-Hookean as the constitutive model. The biphasic model was gone. One stiffness parameter per region, rather than three in a complex relationship.

FEM Muscle Sim R&D

Alongside production, the I2 period included R&D on a more principled muscle simulation system. The long-term goal was volumetric muscle simulation with realistic fiber-directed activation — muscles that could contract along anatomically defined axes, producing deformation that looked like actual muscle mechanics rather than a stiffness-and-constraint approximation.

The first step was building fiber direction fields: smooth vector fields defined on the volumetric mesh that encode the orientation of muscle fibers at every point in the volume. In a simple muscle like the bicep, fibers run parallel to the long axis. More complex muscles have pennate or multi-pennate architecture where the relationship between fiber direction and force production changes continuously through the volume. Painting and interpolating these fields is non-trivial, and getting them wrong produces unrealistic contraction behavior.

Fiber direction fields:

With a fiber field defined, muscle activation is modeled by modifying the element’s rest state along the fiber axis — shortening in the fiber direction while allowing volume-preserving expansion in the perpendicular directions. The following tests explore basic contraction behavior on simple meshes before scaling to production characters.

Muscle contraction:

Muscle contraction on a sphere:

Muscle contraction on a sub-mesh:

A bicep mesh reconstructed from the Visible Human Project dataset provides a more realistic geometry test case — actual anatomical proportions, real fiber architecture — that validates the system against something closer to production complexity.

A bicep from the visible human dataset:

Moving to a full musculoskeletal setup introduces a new category of collision problem. A rigid skeleton drives the simulation from inside the volumetric muscle mesh. Under large deformations, bone geometry can penetrate the muscle surface — a harder problem than surface-to-surface collision because the collision source is internal to the simulated volume. Standard collision processing assumes penetrations come from the outside.

And then we were out of time. I’d solved this problem before at ILM, but they took a 2 years off the schedule for Incredibles 2, and we didn’t have the time to push this project through. Which was a real shame, as I’d loved to have seen anatomically driven muscle contraction on Bob.