Unreal plugin

Custom avatars

IAMX is not MetaHuman-only — drive any rig with blend shapes.

Every conversation IAMX runs — the speech, the reasoning, the emotion, the lip movement — is authored against a neutral, rig-agnostic set of facial controls. That means the character your audience sees is entirely your choice. Drop in a MetaHuman and it just works. But so does a Character Creator 3/4 export, an iClone character, a Daz figure, a Ready Player Me avatar, a VRoid model, or literally any skeletal mesh in your project that ships with blend shapes / morph targets on its face.

There is no proprietary avatar format, no re-topology step, and no "convert to MetaHuman" pipeline to survive. If your mesh can move a morph target, IAMX can perform through it. This page explains how the retarget works and how to wire a non-MetaHuman character up in a few minutes.

MetaHuman

Zero configuration. IAMX writes straight to the standard MetaHuman facial controls out of the box.

Creator pipelines

Character Creator 3/4, iClone, Daz, Ready Player Me, VRoid — all expose named blend shapes IAMX can target.

Anything else

Any skeletal mesh with morph targets works, including your own custom facial rig from Blender or Maya.

How the retarget works

The heavy lifting happens in the cloud and arrives as neutral facial controls — a compact stream of expression values that describe a performance without assuming any particular mesh. Think of them as "how open is the jaw", "how wide is the smile", "how pursed are the lips", expressed as normalized 0–1 curves rather than vertex positions baked for one specific head.

On the Unreal side, the IAMX component takes that stream and resolves it against your character in one of two ways:

Built-in mapping (MetaHuman)

When the target is a MetaHuman, IAMX applies the controls directly to the standard facial control set. Nothing to configure — the names already line up.

Custom mapping (your rig)

When the target is a custom character, IAMX routes each control to your blend-shape name through a mapping table you fill in once. The performance is identical; only the destination names change.

Because IAMX writes values to named morph targets rather than driving a specific bone rig, it is fully decoupled from how your face was built. Whether your mouth shapes came from an ARKit-style export, a Character Creator "Extended" facial profile, or a hand-authored rig, IAMX only needs to know which name on your mesh corresponds to each of its controls.

  Cloud (rig-agnostic controls)          Your Unreal character
  ┌───────────────────────────┐          ┌──────────────────────────┐
  │  jawOpen        0.62       │          │                          │
  │  mouthSmile_L   0.18       │  ──────▶ │   Custom Blend Shape      │
  │  mouthSmile_R   0.20       │  mapping │   Mapping (fill once)     │
  │  mouthPucker    0.05       │  table   │                          │
  │  eyeBlink_L     0.00       │          │   jawOpen → Merged_Open... │
  │  ...                       │          │   mouthSmile_L → V_Wide   │
  └───────────────────────────┘          └───────────┬──────────────┘
                                                      │ direct morph write
                                                      ▼
                                            Facial performance on YOUR mesh
The controls are the same for every character. Switching from a MetaHuman to a Character Creator avatar does not change the AI, the voice, or the timing — only the row of names the facial values land on.

Set it up

Add the IAMX component to your character actor as usual (see /docs/quickstart), then enable the custom mapping and fill in the table. This is a one-time step per character type.

  1. Tick Use Custom Character Mapping — on the IAMX component's details panel, enable Use Custom Character Mapping. This tells IAMX to stop assuming MetaHuman control names and route through your table instead.
  2. Fill Custom Blend Shape Mapping — this is a map of IAMX control → your mesh's blend-shape name. Add one row per control you want driven. For example jawOpen → Merged_Open_Mouth. Any control you leave out simply isn't driven, which is a convenient way to disable shapes your rig doesn't have.
  3. Point at the right mesh — make sure the component targets the skeletal mesh component that actually carries the face morph targets. If your character has a separate head mesh, select that one.
  4. Speak a test line — trigger a conversation from the panel at iamx.live or in PIE and watch the mouth. Adjust any rows that look off, then you're done.

Example mapping table

Below is a representative slice of a mapping for a Character Creator–style export. Your exact right-hand names depend on how your character was exported — open the mesh's morph target list in Unreal and copy the names verbatim.

IAMX controlYour mesh blend-shape nameDrives
jawOpenMerged_Open_MouthJaw drop / open vowels
mouthCloseMouth_CloseLip closure on m / b / p
mouthPuckerMouth_PuckerRounded o / u / w
mouthFunnelMouth_FunnelFunnel shape on oo
mouthSmile_LMouth_Smile_LSmile corner (left)
mouthSmile_RMouth_Smile_RSmile corner (right)
jawLeft / jawRightJaw_L / Jaw_RLateral jaw motion
eyeBlink_LEye_Blink_LBlink (left)
browInnerUpBrow_Raise_InnerExpressive brow lift
Character Creator and ARKit-style rigs map in minutes. Both use conventional, well-known shape names, so the left and right columns often differ by only a prefix or capitalization — you can fill most rows by eye. If your export already uses ARKit names verbatim, many rows are a direct one-to-one copy.
Blend-shape names are case-sensitive and must match the morph target on the mesh exactly. If a mouth shape isn't moving, the usual cause is a typo or a stray suffix (_L vs .L) in the right-hand column. Open the skeletal mesh asset and copy the name straight from the morph target list.

What you get

Once the mapping is in place, the facial performance is written straight to your morph targets every frame the character speaks. There are a few important consequences of doing it this way:

In practice this means you can build one interaction — objectives, actions, knowledge, voice — and reuse it across a whole cast of visually different avatars, MetaHuman and custom alike, without rewiring the conversation logic.

Eye and head tracking also work on custom rigs. The look-at behaviour isn't tied to MetaHuman bones — point the look-at nodes at your own eye bones / controls (and the neck or head bone for head tracking), and IAMX will drive them the same way it drives a MetaHuman's gaze.

Troubleshooting

SymptomLikely causeFix
Mouth doesn't move at allUse Custom Character Mapping left off, or wrong mesh targetedTick the box; confirm the component points at the mesh that owns the face morph targets
Some shapes work, others don'tTypos / mismatched names for the missing rowsCopy blend-shape names verbatim from the mesh's morph target list
Lips move but body freezesFacial anim accidentally overriding the body trackIAMX only writes mapped morphs — verify your body AnimGraph is still evaluating
Gaze doesn't followLook-at nodes still pointed at MetaHuman bonesRe-target look-at to your rig's eye/head bones

Next steps

Wire the pipeline

Set up the LLM, voice, and interaction basics in /docs/quickstart.

Blueprint API

Trigger conversations, actions, and events from your graphs — see /docs/blueprint-api.

Get the plugin

Grab the latest build from Releases or browse the source.

Questions about a specific export from Character Creator, iClone, Daz, Ready Player Me, or VRoid? Share your morph target list on the forum — mapping recipes for common rigs are collected there and on the blog.