Unlike skeletal animation, which moves bones, morph targets (blend shapes) blend vertex positions directly against other "target" position sets. They’re especially useful for deformations bones struggle with — facial expressions, a raised mouth corner, closed eyes.
The requirement: the base geometry and each morph target must have exactly the same vertex count and order. Put the target positions into geometry.morphAttributes.position as an array (before creating the Mesh!) and three.js automatically builds mesh.morphTargetInfluences. Each value (0–1) in that array says how much to blend toward that target.
The demo clones an icosahedron’s vertex array as-is, then pushes each vertex outward along its own normal by a different amount to build a "spiky sea urchin" target, and swings morphTargetInfluences[0] back and forth with a sine wave, so the shape drifts endlessly between a smooth sphere and the spiky form. Keeping flatShading on makes every facet’s changing angle read clearly during the morph.
When to use
Character facial expressions and lip-sync, or any UI/product animation that needs a smooth transition between two shapes.