Facial expressions, lip sync, muscle flexing, cloth deformation — all of these rely on the same underlying technology: blend shapes (also called morph targets or shape keys). Yet this is one of the most misunderstood parts of the 3D-to-game-engine pipeline. Export them wrong and your entire face rig is silent in-engine. Get them right and you unlock some of the most powerful animation tools available in Unity and Unreal Engine 5.
This guide walks the full pipeline: authoring shape keys in Blender, exporting cleanly via FBX and GLB, then driving them at runtime in both Unity and UE5.
What Are Blend Shapes and Morph Targets?
A blend shape (Unity terminology) or morph target (Unreal Engine terminology) is a stored vertex-position delta — a snapshot of how each vertex moves from its rest position to a deformed state. At runtime the engine interpolates between the base mesh and one or more targets using a 0–1 weight value.
They are completely separate from skeletal animation. Bones rotate joints; blend shapes move individual vertices. The two systems work in parallel: a character can have a skeleton driving limb movement while blend shapes simultaneously drive facial expressions or muscle bulges.
Common use cases:
- Facial animation and lip sync — FACS-based rigs, viseme sets for dialogue
- Corrective shapes — fix skin pinching at the shoulder or knee on certain poses
- Soft-body simulation bakes — pre-baked cloth or jiggle stored as morph sequences
- Body customisation — sliders for character creator systems (weight, height, muscle mass)
One key performance note: blend shapes are computed on the CPU (or a compute shader pass) per frame, so keep the vertex count on morphed meshes as low as possible. Shapes that affect the full body are expensive; isolate facial meshes from body meshes where feasible.
Creating Blend Shapes in Blender: Shape Keys
Blender calls these Shape Keys, found in the Object Data Properties panel (the green mesh icon) under the Shape Keys section.
Basic workflow
- Select your mesh in Object mode.
- In the Shape Keys panel click + to add a Basis key — this is the rest pose.
- Click + again to add a new key (e.g. `mouth_open`). Blender automatically names it `Key 1`; rename it immediately — the name becomes the blend shape name in-engine.
- Enter Edit mode. Move, sculpt, or use proportional editing to deform vertices into the target shape.
- Return to Object mode. Set the Value slider to 1.0 to preview the morph.
Shape key naming conventions
Use descriptive, consistent names from day one. Unity preserves the exact Blender name in `SkinnedMeshRenderer.blendShapes`; Unreal does the same in Pose Assets. A set like `brow_raise_L`, `brow_raise_R`, `jaw_open`, `eye_blink_L`, `eye_blink_R` maps cleanly to FACS and makes runtime code readable.
Avoid spaces in names — use underscores. Some engine importers stumble on spaces.
Relative vs. absolute shape keys
By default Blender uses relative shape keys: each key is a delta from a reference key (usually Basis). This is what game engines expect. Absolute shape keys are a Blender-specific animation tool and do not export correctly — keep relative mode on.
```python
# Blender Python: list all shape keys and their current values
import bpy
obj = bpy.context.active_object
if obj.data.shape_keys:
for kb in obj.data.shape_keys.key_blocks:
print(f"{kb.name}: {kb.value:.3f}")
```
![]()
Exporting Morph Targets via FBX and GLB
Shape keys survive export only if you tick the right options. This is where most pipelines silently break.
FBX export (File → Export → FBX)
In the FBX export dialog:
| Setting | Value |
|---|---|
| Apply Scalings | FBX Units Scale |
| Forward | -Z Forward |
| Up | Y Up |
| Mesh > Smoothing | Face (or Normals Only) |
| Armature > Add Leaf Bones | Off |
| Geometry > Apply Modifiers | On (unless using subdivision — see note) |
Critical: Blend shapes are geometry data. If you have a Subdivision Surface modifier above the Armature modifier in the stack and export with Apply Modifiers ON, your blend shapes on the unsubdivided mesh are lost. Workaround: keep the subdivision modifier below or separate the mesh into a no-modifier export copy.
GLB/GLTF export
GLTF 2.0 natively supports morph targets as `mesh.primitives[].targets`. In Blender's GLTF exporter, shape keys export automatically — no extra checkbox needed. GLTF is generally the cleaner choice for web targets and Godot 4; FBX remains more reliable for Unreal's import pipeline.
```bash
# Blender CLI batch export to FBX with shape keys preserved
blender --background scene.blend --python-expr "
import bpy
bpy.ops.export_scene.fbx(
filepath='/output/character.fbx',
use_selection=False,
add_leaf_bones=False,
bake_anim=True,
use_mesh_modifiers=True
)"
```
Using Morph Targets in Unity
Unity imports FBX blend shapes automatically into `SkinnedMeshRenderer`. No extra import setting is needed — they appear under the BlendShapes foldout in the Inspector.
Runtime control via script
```csharp
using UnityEngine;
public class BlendShapeController : MonoBehaviour
{
SkinnedMeshRenderer smr;
int jawOpenIndex;
void Start()
{
smr = GetComponent<SkinnedMeshRenderer>();
// GetBlendShapeIndex returns -1 if name not found
jawOpenIndex = smr.sharedMesh.GetBlendShapeIndex("jaw_open");
}
// weight: 0–100 (Unity uses 0–100, not 0–1)
public void SetJawOpen(float weight)
{
if (jawOpenIndex >= 0)
smr.SetBlendShapeWeight(jawOpenIndex, weight);
}
}
```
Gotcha: Unity's blend shape weights run 0 to 100, not 0 to 1. This catches everyone at least once.
Animating blend shapes in the Unity Animator
Blend shapes are animatable properties. In the Animation window, record mode will capture `SkinnedMeshRenderer.blendShape.<name>` curves. This is how you author facial animation clips directly in Unity without importing animated shape key data from Blender.
For lip sync, tools like Oculus LipSync, Salsa LipSync, and uLipSync all drive Unity blend shape weights automatically from audio — just make sure your viseme shape names match the tool's expected naming convention.
![]()
Driving Morph Targets in Unreal Engine 5
Unreal imports FBX morph targets and stores them in the Skeletal Mesh asset. You can preview them in the mesh editor under the Morph Target Previewer panel.
Blueprint approach
In an Animation Blueprint, use the Set Morph Target node inside the AnimGraph or as a function call from Blueprint:
```
// In C++ (USkeletalMeshComponent)
SkeletalMeshComp->SetMorphTarget(FName("jaw_open"), 0.75f);
```
In Blueprint: `Set Morph Target` node, target = your Skeletal Mesh Component, Morph Target Name = `jaw_open`, Value = float 0–1.
Pose Assets (UE5 recommended workflow)
Unreal Engine 5 introduced Pose Assets as a first-class morph target container. Import your FBX, then in the Content Browser right-click the animation → Create Pose Asset. This lets you drive expressions via Pose Driver nodes and blends them with the full animation graph.
For MetaHuman-compatible facial rigs, the Pose Asset approach is mandatory — the Control Rig for MetaHuman drives 130+ morph targets via Pose Assets under the hood.
Performance checklist for morph targets in UE5
- Enable GPU morph target in the Skeletal Mesh settings for meshes with >10k vertices
- Cull morph target evaluation when the character is off-screen (`bAllowMorphTargetCulling`)
- Merge facial mesh into the body only if blend shape counts are low (<30); otherwise keep separate LOD-controllable components
- Use LOD morph target reduction — strip non-critical shapes from LOD2+ in the LOD settings
For rigging context that pairs with blend shapes, see how to rig a 3D character for Unity and animation retargeting across engines.
Blend Shape Best Practices: Quick Reference
| Concern | Recommendation |
|---|---|
| Shape key count | Keep under 50 per mesh for real-time characters |
| Vertex count on face mesh | Aim for 3k–8k verts; isolate from body |
| Naming | snake_case, no spaces, FACS-aligned |
| Export format | FBX for UE5; GLB for Unity/Godot/web |
| Unity weight range | 0–100 (not 0–1) |
| UE5 weight range | 0–1 |
| Corrective shapes | Author in relative mode, reference the pose not Basis |
| LODs | Strip low-priority shapes from LOD2 and above |
Blend shapes are an underused superpower in real-time character pipelines. When integrated properly — clean Blender shape keys, correct FBX export settings, runtime scripting in Unity or UE5 — they add an enormous amount of life and expressiveness to characters at relatively low runtime cost. Explore production-ready character assets and full-body rigs with pre-built morph targets on the BitSoul marketplace, where assets are validated for Unity and Unreal Engine 5 compatibility out of the box. Open any character model in BitSoul's 3D Studio to inspect blend shape targets in the browser before downloading.
---
*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*