Facial Animation and FACS

Point a camera at a stranger's face for half a second and you already know an astonishing amount: that they are almost smiling but not quite, that the smile is polite rather than warm, that they just noticed something behind you. Humans are the planet's most obsessive face-readers — we spend our whole lives training on faces, and the machinery for it (the fusiform face area, mirror neurons, a lifetime of social feedback) is ruthlessly tuned. That is wonderful for us and brutal for animators: the audience will forgive a clumsy walk or a floaty cloth sim, but a face that is one millimetre wrong around the eyes reads instantly as dead, creepy, or lying.

That cliff — where an almost-human face suddenly repels instead of charms — is the uncanny valley. This page is about the tool the industry uses to climb out of it: a precise, muscle-level vocabulary for faces called FACS, and how a rig, a performance-capture pipeline, and an emotion are all written in that vocabulary.

Why the face is the hardest thing to animate

A hand has a handful of joints and a fairly rigid skeleton. A face has no skeleton in the region that matters — it is a sheet of skin driven by ~40 flat muscles, many of which don't attach to bone at all but to each other and to the skin. They blend, overlap, and fight. Worse, the audience has an internal model of every one of those muscles, learned from millions of real faces, and they run your animated face against that model frame by frame. The bar is not "looks like a face"; the bar is "looks like a specific person feeling a specific thing."

So facial animation needs a way to talk about faces that is (1) precise enough to be reproducible, (2) anatomically grounded so it can't drift into the impossible, and (3) complete enough to describe any expression. In 1978 two psychologists handed exactly that to the world — for a completely different reason.

FACS: a periodic table for the face

Paul Ekman and Wallace Friesen were not building animation tools; they were studying emotion, and they needed an objective way to write down what a face was doing without smuggling in an interpretation ("looks happy"). Their Facial Action Coding System (FACS, 1978) decomposes any human expression into a small alphabet of Action Units.

The crucial move is that AUs are descriptive, not emotional. FACS never says "happy"; it says "AU6 + AU12". The leap to emotion is a separate, later step — and that separation is exactly what makes FACS a reusable engineering vocabulary rather than a mood board.

A few key Action Units

Every AU names a muscle and a movement. Here are the ones you will meet constantly — enough to build a smile, a frown, a look of surprise, and a scowl.

AUNameMuscle (group)What it doesShows up in
AU1Inner brow raiserFrontalis (medial)Lifts the inner corners of the eyebrowsSadness, fear
AU2Outer brow raiserFrontalis (lateral)Lifts the outer eyebrowsSurprise, fear
AU4Brow lowererCorrugator, procerusPulls brows down and together (a knot)Anger, concentration
AU6Cheek raiserOrbicularis oculi (outer)Raises cheeks, crinkles the eyesGenuine happiness
AU12Lip-corner pullerZygomaticus majorPulls mouth corners up and back (the smile)Happiness
AU15Lip-corner depressorDepressor anguli orisPulls mouth corners downSadness
AU26Jaw dropMasseter (relaxed), pterygoidsOpens the jawSurprise, speech

Notice AU6 and AU12 are different muscles in different places — one around the eye, one at the mouth. Keep that split in mind; it is the whole point of the worked example below.

FACS as the vocabulary of a facial rig

A modern facial rig is essentially a bank of AU shapes. For each Action Unit the modeller sculpts a blendshape (a corrective target mesh) that morphs the neutral face into that one muscle's action at full intensity. The animator (or a capture system) then supplies a weight w_i \in [0,1] per AU, and the displayed face is a weighted sum of those targets on top of the neutral mesh:

\mathbf{F} \;=\; \mathbf{N} \;+\; \sum_{i} w_i\,(\mathbf{B}_i - \mathbf{N}),

where \mathbf{N} is the neutral face and each \mathbf{B}_i is the AU_i blendshape. Because the controls are AUs, the same rig can be driven by an animator's sliders, by a captured performance, or by an emotion model — they all speak the one language. Pixar, Weta, and Apple's Animoji/blendshape API all expose FACS-style AU controls for exactly this interoperability.

Character creators that give you dozens of face sliders are usually exposing the rig's AU bank directly. Because each slider is one anatomically real action, any combination you dial in stays on the manifold of possible human faces — you can make it ugly, but you can't easily make it impossible. That is FACS earning its keep: the vocabulary constrains you to real speech. It is also why the same face rig can be re-used to lip-sync any language or replay any actor's capture — the controls don't care where the weights come from.

Emotions are AU combinations

Ekman's other famous claim is that a handful of basic emotions are recognised across every human culture, each with a signature facial display. In FACS terms an emotion is just a named combination of AUs:

EmotionSignature AUsReads as
HappinessAU6 + AU12Cheeks up, mouth pulled — a warm smile
SadnessAU1 + AU4 + AU15Inner brows up, knotted, mouth down
SurpriseAU1 + AU2 + AU5 + AU26Brows up, eyes wide, jaw dropped
AngerAU4 + AU5 + AU7 + AU23Brows down, glare, lips tightened
FearAU1 + AU2 + AU4 + AU5 + AU20Brows up & together, lips stretched

This is enormously convenient for an animation pipeline: an emotion becomes a preset — a vector of AU weights — that you can blend, dial up in intensity, or layer onto speech.

Worked example: a real smile vs a fake one

The textbook demonstration of why FACS matters is the smile. Build happiness the Ekman way and pull the two AUs apart.

The genuine smile is \text{AU6} + \text{AU12}. AU12 (zygomaticus major) pulls the lip corners up and out — that is the mouth. AU6 (orbicularis oculi) raises the cheeks and crinkles the skin around the eyes into crow's-feet, narrowing the eye aperture. Both firing together is the classic Duchenne smile, named for the neurologist who found that only real enjoyment recruits the eye muscle.

The polite / fake smile is \text{AU12} alone. The mouth does exactly the same thing, but the eyes stay flat — no AU6, no cheek raise, no crinkle. You can voluntarily fire AU12 any time (say "cheese"), but the eye muscle AU6 is largely involuntary, so its presence is a hard-to-fake tell of real feeling. This is why a rig that animates only the mouth looks salesman-slick and slightly sinister: it is literally coding a fake smile.

Play with the two AU weights below. Push AU12 up alone and you get the flat-eyed grin; add AU6 and the eyes narrow and the cheeks lift — the smile suddenly reads as warm. Same mouth, different soul.

The blendshape formula \mathbf{F}=\mathbf{N}+\sum_i w_i(\mathbf{B}_i-\mathbf{N}) makes combining AUs look like vector addition — dial each weight, sum the deltas, done. Real faces are not linear. Muscles co-contract and interact: fire AU6 and AU12 together and the skin between cheek and mouth folds in a way that is more than the two motions superimposed, while some pairs (a raiser and a depressor on the same tissue) partly cancel or fight. Naive linear addition of two AU deltas therefore produces broken in-between faces — creased where skin should bulge, intersecting lips, a nasolabial fold in the wrong place. The fix is corrective (combination) shapes: extra targets that fire only when specific AUs are both active, adding the non-linear "glue" the sum is missing. Building and driving those correctives is the subject of the next lesson.

Capturing a real face into AU weights

Once the rig speaks AUs, the job of facial performance capture becomes: watch a real actor and solve for the AU weights, frame by frame, that best explain their face. Two broad families:

Either way the output is a curve per AU — the same weights an animator would have keyed by hand. Capture and hand-animation land in the identical representation, which is why they can be blended, cleaned up, and layered so freely. The universal currency is the AU.

Weta's pipeline on The Lord of the Rings and later films pushed facial capture from a curiosity to the core of the performance: Andy Serkis's face, tracked and solved onto a FACS-based creature rig, carried the acting, while artists added correctives for the non-human anatomy. The reason a digital Gollum, Caesar, or Thanos can carry a close-up is precisely that the actor's real AU performance is preserved all the way to the render — the FACS vocabulary is the bridge that lets a human face drive a face that isn't human at all.