Skip to content
← Back to Blog 3d-modeling

Morph Targets in Unreal Engine 5: Drive Facial Animation and Shape Key Blending for Game Characters

By BitSoul3D6 min read213 views

Morph targets—known as shape keys in Blender—are the backbone of expressive character animation in games. They let you pre-compute vertex offsets for specific facial poses (a smile, a brow furrow, an open mouth) and blend between them at runtime with a single float value. If you've ever seen a game character react to dialogue with nuanced eye squints and lip movements, morph targets are doing most of that work.

Morph Targets in Unreal Engine 5: Drive Facial Animation and Shape Key Blending for Game Characters

The challenge isn't the concept—it's the pipeline. Blender uses shape keys, FBX encodes them as blend shapes, and UE5 calls them morph targets, but the data is the same. Mismatched export settings, wrong pivot origins, or missing morph data in the FBX are the typical failure points. This guide walks every step from Blender mesh setup through runtime Blueprint control in Unreal Engine 5.

Setting Up Shape Keys in Blender for FBX Export

Start in Blender with your character's base mesh in Object Mode. Open the Properties panel → Object Data Properties → Shape Keys. Click the + button to create the Basis key (this is the neutral pose—never modify it). Then add each expression as a new shape key: mouth_open, brow_raise_L, brow_raise_R, eye_blink_L, eye_blink_R, cheek_puff, and so on.

For each shape key, set its value to 1.0, enter Edit Mode, and sculpt or move vertices to create the expression. Return to Object Mode, reset the value to 0.0, and move on to the next key.

Naming matters. UE5 imports morph targets by name. Keep names lowercase with underscores. If you're targeting ARKit-compatible facial animation (useful for MetaHuman blending), use the Apple ARKit 52 blend shape names exactly.

# Confirm all shape keys via Python console in Blender
import bpy
obj = bpy.context.active_object
for key in obj.data.shape_keys.key_blocks:
    print(key.name, key.value)

Before exporting, apply all modifiers that affect vertex count—Subdivision Surface especially. Morph targets encode absolute vertex positions, so the vertex count at export must match the Basis exactly. A subdivision modifier left un-applied will silently zero out your blend shapes on import.

FBX Export Settings That Preserve Blend Shapes

FBX Export Settings That Preserve Blend Shapes — illustrated

In Blender's FBX exporter (File → Export → FBX), the critical settings are:

SettingValueWhy
Apply ScalingsFBX Units ScalePrevents 100× scale mismatch in UE5
Forward-Z ForwardMatches UE5 coordinate system
UpY UpRequired for UE5
Apply Unit✓ EnabledConverts Blender metres to UE5 centimetres
Mesh → SmoothingFacePreserves hard edges
Armature → Add Leaf Bones✗ DisabledPrevents phantom bones in UE5
Mesh → Shape Keys✓ EnabledThis exports blend shapes

The Shape Keys checkbox is easy to miss — it's buried in the Geometry section of the export dialog. Without it, the FBX contains no morph data.

Export as Binary FBX (not ASCII). UE5 handles both, but binary is smaller and parses faster. File size with 52 blend shapes on a 15,000-poly head mesh is typically 4–8 MB — expect that.

Importing Morph Targets into Unreal Engine 5

Drag the FBX into the Content Browser. In the import dialog:

After import, open the Skeletal Mesh asset. In the Morph Target Preview panel on the right, you'll see a list of all imported targets. Scrub each slider to 1.0 and verify the mesh deforms correctly. If the list is empty, the FBX export missed the Shape Keys checkbox — re-export.

UE5 stores morph target data in the LOD0 section of the skeletal mesh. If you have LODs, each LOD must have its own matching morph target data — UE5 will not automatically propagate morph targets down LOD levels. Generate LODs before rigging and shaping, or regenerate them after using the LOD Settings in the Skeletal Mesh editor with Regenerate LODs enabled.

Driving Morph Targets at Runtime via Blueprint and C++

Driving Morph Targets at Runtime via Blueprint and C++ — illustrated

Morph targets are controlled through the Set Morph Target function on a Skeletal Mesh Component. In Blueprint:

  1. Get a reference to the character's Skeletal Mesh Component
  2. Call Set Morph Target with the target name (string) and a float 0.0–1.0
  3. Call this in Tick or via Timeline for smooth interpolation
// C++ equivalent — call in your character's Tick or via a curve asset
GetMesh()->SetMorphTarget(FName("mouth_open"), BlendValue);

For blending multiple targets simultaneously — like a smile that also raises the cheeks — drive each independently. Facial animation rigs often stack 6–12 targets per expression. Keep the blend math in a dedicated Animation Blueprint using the Modify Curve node rather than Blueprint Tick; the Anim Graph runs on a worker thread and is significantly cheaper.

UE5's Pose Asset system is a cleaner approach for complex rigs. Create a Pose Asset from your Skeletal Mesh, store named poses (each encoding multiple morph target values + bone transforms), and blend between poses using Pose Blender nodes in the Anim Graph. This is how MetaHuman facial animation works under the hood.

Performance checklist:

Debugging Common Import Failures

Three problems account for 90% of broken imports:

1. Empty morph target list after import. Shape Keys checkbox was unchecked in the Blender FBX exporter. Re-export with it enabled.

2. Morph targets import but deform incorrectly. The mesh was modified after shape keys were created — a vertex was added or removed, breaking the index mapping. In Blender, delete all shape keys, finalize the mesh geometry, then recreate them.

3. Scale is wrong — the morph deformation is huge or tiny. The Apply Scalings setting was wrong at export. Set to FBX Units Scale and re-export. In UE5 reimport, also check Convert Scene Unit is enabled.

If only some shape keys import and others don't, check for duplicate names. UE5 drops duplicates silently — rename any conflicting keys in Blender before export.

Sourcing Pre-Rigged Characters with Morph Targets

Building a 52-key facial rig from scratch takes days. For indie projects, starting with a pre-rigged asset from a marketplace and adding custom blend shapes on top cuts that to hours. The BitSoul marketplace carries humanoid character meshes in GLB and FBX format, many already including basic expression blend shapes compatible with standard Unreal Engine 5 Skeletal Mesh imports.

When evaluating marketplace characters for morph target compatibility, check:

A modular head/body split is generally better for facial animation — it lets you swap heads between characters and keeps morph target evaluation isolated to the head component.

Conclusion

Morph targets are a precise, GPU-efficient tool for expressive character animation when set up correctly. The full pipeline is: shape keys authored in Blender → exported via FBX with Shape Keys enabled → imported into UE5 with Import Morph Targets on → driven at runtime via Pose Asset or direct SetMorphTarget calls in the Anim Graph. Each step has one or two critical settings that silently break the chain if missed — now you know where to look.

For ready-to-import characters and environment assets that skip the rigging groundwork, explore the BitSoul marketplace and get straight to building your game.


Build with real assets: grab the 98-model Character Pack on the BitSoul marketplace and drop them straight into your project.

Tags: characters

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)