Watch a close-up of a character talking and you are watching a mesh change shape dozens of times a second: the corners of the mouth lift into a smile, an eyebrow flicks up in surprise, an eyelid drops for a blink. None of that is a skeleton swinging bones around — a face has no bones to speak of. It is done by blend shapes (the same idea goes by morph targets in game engines and shape keys in Blender): a small library of pre-sculpted faces that the rig fades between. This is the backbone of facial animation, and it is a beautifully simple idea built on one operation you already know — a weighted average.
This page is part of the
Start with the neutral mesh — the character at rest, mouth relaxed, no expression. Call
its vertex positions
Because the meshes line up vertex-for-vertex, the difference
That is the whole engine. A rig might expose fifty or a hundred of these weights as sliders (or drive them from a performance-capture solver reading an actor's face), and the pose you see is nothing but neutral-plus-a-pile-of-scaled-offsets.
Below is a cartoon face wired with two blend shapes: a smile (weight
Notice the two shapes don't fight: the smile only touches the mouth vertices and the brow-raise only the eyebrow vertices, so you can dial in any mix and the face just... does both. That independence is exactly the commuting property — but, as the next section shows, it politely holds only while the shapes stay out of each other's way.
Let us track a single vertex — the right corner of the mouth — through two targets. In the neutral pose it sits at
A smile target lifts and spreads that corner to
With a gentle half-smile and no squint,
Fine. But crank both to full,
The corner has jumped from
Linear blending assumes the offsets simply add. Reality is more stubborn: skin doesn't stretch linearly, and two expressions that each look great can, together, intersect, bulge, or collapse — think a wide smile plus a dropped jaw-open, whose lips overlap and clip through the teeth. The remedy is a corrective (or combination) shape: an extra target that carries only the difference between the ugly additive result and a face the artist actually sculpted for that combination.
The corrective is driven by the product of the two weights,
For our mouth corner we want the full-smile-full-squint result to read
Two more tricks lean on the same non-linear patching: in-between targets (a shape that
fires at, say,
Blend shapes are not the only way to deform a mesh — the other workhorse is
| Blend shapes | Skinning | |
|---|---|---|
| Driven by | sculpted target meshes + weights | a skeleton of bones + transforms |
| Deformation | arbitrary per-vertex offsets | rigid-ish, follows the bones |
| Best for | faces, subtle organic shapes | bodies, limbs, anything jointed |
| Storage | a full offset per target vertex | a few weights per vertex |
In practice you don't choose — most rigs combine both. A jaw bone (skinning) swings the chin open while blend shapes shape the lips, cheeks, and brow on top. Bodies lean on skinning with a few correctives; faces lean on blend shapes with a couple of bones. The two layers stack: skin the mesh with the skeleton, then add the blend-shape offsets.
Behind an animoji (or any performance-capture facial rig) sits a solver. The device
tracks your face and estimates a set of expression strengths — often the ~50 blendshape coefficients of a
standard face model (brow-up, jaw-open, mouth-smile-left, and so on), each a number in
Blend shapes are stored as per-vertex offsets, matched up strictly by vertex
index: offset number 4173 lands on vertex number 4173. So every target must have the
same vertex count and the same vertex ordering as the neutral — the artist may only move
vertices, never add, delete, or re-order them. If someone retopologises a target (rebuilds
its mesh for a cleaner edge flow), the vertex numbering is scrambled: vertex 4173 is now somewhere else
entirely, so
The second trap is the one from the worked example: naively adding overlapping shapes double-counts. If two targets both push the same vertices the same way, turning both on fully over-deforms. It is not a bug in the maths — linear blending is doing exactly what you asked — it is a signal that the combination needs a corrective shape to subtract the excess.