Suppose you have sculpted a beautiful character — tens of thousands of vertices, every wrinkle in place — and now the director wants the whole belly to bulge, or the ear to droop, or the loaf of bread to sag in the middle. You do not want to grab those tens of thousands of vertices by hand. Instead you drop the model inside a cage: a coarse control mesh with a handful of vertices that surrounds the shape. Grab a cage vertex, drag it, and the enclosed model flows along with it — smoothly, as if it were embedded in a piece of clear jelly you are squeezing.
You have already met the box version of this idea in
Barycentric coordinates for a triangle should feel familiar: any point inside a triangle with corners
Because the weights are frozen at bind time, deformation costs one weighted sum per model vertex, no
matter how the cage is dragged around. This is exactly the shape of
Take the simplest interesting cage: a square with corners
Now drag corner
The centre moves by exactly one quarter of the corner's displacement — its weight on that
corner. Move a corner by
A point off-centre breaks the symmetry: nearer a corner, its weight there climbs toward
The mean-value coordinates (MVC) scheme is the workhorse closed form. For an
interior point
MVC are wonderfully general: they are defined for any polygon in 2-D or polyhedron in 3-D,
convex or not, and they interpolate the cage smoothly. That generality is why they became a default.
But there is a catch hiding in that
Below is a cage (the outlined pentagon) with a scatter of interior points bound to it by mean-value coordinates. Pull the highlighted top vertex with the slider. Watch how the points nearest that vertex — which carry the largest weight on it — surge along with it, while points down at the far side, whose weight is nearly zero, hardly budge. The faint dots mark where every point started, so you can read each point's displacement as (its weight on the vertex) × (the vertex's displacement).
This is the entire mechanism: no per-point hand-editing, just one vertex handle and a frozen table of weights doing the interpolation.
Mean-value coordinates do not guarantee
Harmonic coordinates fix this by construction — they are non-negative everywhere, so no interior point can ever run the wrong way. If your cage is convex, MVC stay non-negative and you are safe; the danger lives in concavities.
Harmonic coordinates trade the tidy closed form of MVC for a small numerical solve,
and get non-negativity in return. For each cage vertex
This locality and non-negativity is why Pixar developed harmonic coordinates for "Ratatouille" (2007): the deformers had to bend limbs and faces built from concave cages without the flesh punching through the cage or a moving arm dragging the torso with it. The price is that the weights come from a grid solve rather than a formula, so binding is heavier and the result is only as accurate as the grid is fine.
MVC and harmonic coordinates both write the point as a blend of cage vertex positions only. Green coordinates add a second ingredient — the cage face normals — into the blend:
where
A rough field guide. Mean-value coordinates: cheap closed form, any cage — reach for it first when the cage is convex and you want speed. Harmonic coordinates: when the cage is concave and you cannot tolerate overshoot or leakage across gaps — the "Ratatouille" choice — at the cost of a grid solve. Green coordinates: when preserving the local shape and rotation of fine detail under a twisting cage matters more than exact interpolation. All three are the same template — an interior point as a weighted blend of cage handles — differing only in how the weights are cooked.
With the general picture in hand, free-form deformation snaps into place as a special case. An FFD lattice is nothing but a cage whose vertices are laid out on a regular rectangular grid, and whose generalised barycentric coordinates happen to be a tensor product of Bézier (or B-spline) basis functions. Move a lattice control point and the enclosed model deforms by the same rule — a weighted blend of moving handles. Cage deformation simply frees the handles from the grid: the cage can be a loose, close-fitting shell around a hand or a face, so a few well-placed vertices give control exactly where the model needs it, instead of a coarse box that wastes control points on empty corners.
| Scheme | Cage | Weights ≥ 0? | Cost | Special strength |
|---|---|---|---|---|
| FFD lattice | regular box grid | yes (Bézier basis) | cheap | simple, familiar box control |
| Mean-value | any polygon/polyhedron | not guaranteed | cheap (closed form) | works on any cage |
| Harmonic | any (esp. concave) | yes | grid solve | no overshoot, interior-local |
| Green | any | — | moderate | quasi-conformal, keeps local shape |