In the golden era of real-time graphics, two animation techniques have dominated character rigging: Skeletal Animation (bones) and Morph Target Animation (blend shapes). While skeletal animation handles the gross movement of limbs, morph target animation is experiencing a renaissance. It has become the new non-negotiable standard for realistic facial expressions, muscle bulging, and corrective shapes.
But why "new"? Because modern GPU power and next-gen engine features (like Unreal Engine 5's MetaHuman and Unity's Digital Human package) have removed the old limitations, allowing artists to sculpt detail pixel-perfectly.
Practical tip: provide animators with both macro (high-level) controls and access to raw sliders; macro controls call multiple underlying blendshapes with mapped weights for expressive leverage.
Morph target animation (also known as blendshape animation or vertex morphing) is a foundational technique for producing smooth, expressive deformations of a mesh by interpolating between multiple stored vertex configurations. Though decades old, morph targets remain essential in character facial animation, corrective shapes, stylized transformations, and increasingly in real-time applications (games, AR/VR) thanks to improved tooling and GPU techniques. This treatise surveys principles, practical workflows, performance considerations, and advanced practices for “morph target animation—new” (i.e., contemporary usage and innovations). morph target animation new
The old way: Store full vertex positions for each target → huge VRAM waste.
New approach:
Implementation tip (HLSL/GLSL):
// Instead of full vertex buffer per target, use a structured buffer of deltas
struct SparseDelta
uint vertexIndex;
float3 deltaPosition;
float3 deltaNormal; // optional
;
The vertex shader accumulates only relevant deltas for the current vertex.
For a long piece (e.g., a cat's tail), you do not want to store a morph target for every single frame of an animation. That would be memory prohibitive.
Instead, you use a Dimensional Reduction approach. Morph Target Animation: The New Standard for High-Fidelity
Target_A_BendLeft: The piece curves sharply to the left.Target_B_BendRight: The piece curves sharply to the right.Target_C_Slack: The piece becomes loose and wavy.Instead of blending on the CPU or in the vertex shader serially:
Benefits:
Example kernel concept (simplified):
RWStructuredBuffer<Vertex> outputVertices : register(u0); StructuredBuffer<MorphDelta> deltas[MAX_TARGETS]; float weights[MAX_TARGETS];
[numthreads(64,1,1)] void MorphBlendCS(uint3 id : SV_DispatchThreadID) uint vertexIdx = id.x; float3 finalPos = basePositions[vertexIdx]; for (int t = 0; t < numActiveTargets; t++) finalPos += deltas[t][vertexIdx].delta * weights[t]; outputVertices[vertexIdx].position = finalPos;