Facial Animation

Morph targets, blend shapes, VRM expressions — make your character feel things.

What Are Morph Targets?

Morph targets (also called blend shapes) are pre-sculpted deformations of a mesh. Each morph target represents a specific facial pose — a smile, a frown, an eyebrow raise, puffed cheeks. By blending between the base mesh and these target shapes, you create smooth, convincing facial animation.

Unlike skeletal animation (bones rotating), morph targets move individual vertices. This makes them perfect for soft tissue deformation like facial muscles, lip sync, and eye movement.

VRM Expressions

VRM models come with a standardized expression set. These aren't just arbitrary blend shapes — they're semantic expressions that any VRM-compatible runtime can understand:

ExpressionWhat It Does
HappySmile, raised cheeks
AngryFurrowed brows, tight mouth
SadDownturned mouth, raised inner brows
SurprisedWide eyes, open mouth
RelaxedNeutral-positive, slight smile
BlinkBoth eyes close
BlinkLeft / BlinkRightIndividual eye winks
LookUp / LookDownEye gaze direction (morph-based)
LookLeft / LookRightEye gaze direction (morph-based)
Screenshot: VRM character showing different facial expressions (happy, angry, sad, surprised) in a 2x2 grid 1200 × 675

The Multi-Mesh Challenge

Here's a gotcha that trips up many 3D tools: VRoid Studio splits morph targets across multiple SkinnedMeshes. The face mesh has some blend shapes, the body mesh has others, the hair mesh has even more. If your tool only applies morphs to one mesh, you get broken expressions.

BlackBox solves this automatically. When a morph target is activated, the engine applies it to every SkinnedMesh in the model that contains that blend shape. No manual configuration. No "which mesh is the face mesh?" guessing game.

Why this matters

A "smile" expression might deform the face mesh, the body mesh (for cheek geometry that overlaps), and even the mouth interior mesh. BlackBox hits all of them simultaneously. This is why VRM expressions look correct in BlackBox but often break in simpler viewers.

Export Profiles & Optimization

Morph targets are the biggest contributor to GLB file size. A model with dozens of blend shapes can easily hit 50+ MB. BlackBox gives you control over this trade-off:

ProfileWhat's IncludedFile Size
Full (Video) All morph targets, full precision deltas ~12.9 MB
Game Essential expression morphs, zero-delta pruning, influence reset ~6–7 MB
None No morph targets at all ~5 MB

Select the profile in the export dropdown before exporting. The Game profile is the sweet spot for most use cases — you keep the important expressions while cutting file size in half.

What's "zero-delta pruning"?

Many morph targets contain vertices that don't actually move (zero deltas). These waste space. The optimizer strips them out. It also resets influence weights on unused blend shapes to prevent "bleed" from corrupting nearby morph targets. The result: same visual quality, dramatically smaller files.

What's Next