Home / Technology / Animation

Understanding UE5 Retargeting: Why Chains, Not Bones

ModernSlave liked this

This is the most important part of UE5 retargeting — and where most people fundamentally misunderstand the system.

I'll explain it from first principles, not through UI steps.

The Core Question: Why Not Bone-to-Bone?

If retargeting worked bone-to-bone, it would fail the moment you encountered:

  • Different bone counts (80 bones vs 120 bones)
  • Extra twist/helper bones
  • Different naming conventions (leg_l vs LeftUpLeg)
  • Different proportions (tall character vs short character)

Yet UE5 retargeting works seamlessly across completely different rigs — even between bipeds and quadrupeds with adaptation.

How?

Unreal ignores individual bones and instead asks a different question:

"What function does this group of bones serve?"

That function is defined by a chain.

What a Chain Actually Is

A chain is a functional limb definition, not a bone hierarchy:

Chain = [Start Bone] → [End Bone]

Everything in between is treated as implementation detail.

Example: Left Leg

Chain Name: Leg_L
Start Bone: thigh_l
End Bone:   foot_l

Whether that leg contains:

  • 2 bones (thigh, shin)
  • 3 bones (thigh, shin, foot)
  • 7 bones (thigh, thigh_twist, shin, shin_twist, foot, etc.)

Unreal sees the same thing:

"This is a leg. It has a root point, an endpoint, a direction, and a length."

The intermediate bones? The retargeter doesn't care. It will solve for them automatically.

What Unreal Extracts From Each Chain

For every frame of animation, Unreal computes these properties per chain:

  1. Chain root transform (position + rotation at start bone)
  2. End effector position (where the endpoint is in space)
  3. Chain direction vector (normalized vector from start to end)
  4. Total chain length (Euclidean distance)
  5. Relative motion delta (change from retarget pose)

Notice what's missing: individual bone rotations, bone names, bone hierarchy.

How Retargeting Actually Works

Let's trace through a single frame:

Source Animation (80cm tall character)

Source Leg Chain:
- Start: Hip at [0, 0, 100]
- End:   Foot at [40, 0, 0]
- Chain moved: 40cm forward in this frame

Target Skeleton (90cm tall character)

Target Leg Chain:
- Source Length: 80cm
- Target Length: 90cm
- Scale Factor:  90 / 80 = 1.125

→ Target foot moves: 40cm × 1.125 = 45cm forward

Then the Magic Happens:

  1. IK Solver bends intermediate bones to reach the new foot position
  2. Twist bones are rotated procedurally to prevent candy-wrapper artifacts
  3. Foot IK goals correct for ground plane and prevent penetration
  4. Pole vectors maintain natural knee/elbow direction

Result: The motion's intent is preserved, not its literal bone rotations.

Why Chain-Based Beats Bone Matching

Bone Matching Chain-Based Retargeting
❌ Fragile to rig changes ✅ Robust across any rig
❌ Requires identical skeletons ✅ Works on different rigs
❌ Copies rotations blindly ✅ Solves for intent
❌ Breaks with proportions ✅ Length-aware scaling
❌ Twist bones cause issues ✅ Handles twists elegantly

This is intent-based animation transfer, not data copying.

Creating Chains: The Mental Model

When defining chains, you're answering one question:

"If this limb moves, where does motion begin and where must it end?"

Standard Humanoid Chain Setup

Root:
  Start: root
  End:   pelvis

Spine:
  Start: spine_01
  End:   head

Leg_L:
  Start: thigh_l
  End:   foot_l

Leg_R:
  Start: thigh_r
  End:   foot_r

Arm_L:
  Start: upperarm_l (or clavicle_l)
  End:   hand_l

Arm_R:
  Start: upperarm_r (or clavicle_r)
  End:   hand_r

Important Exclusions

Notice what's not included:

  • ❌ Twist bones (handled procedurally)
  • ❌ Toe bones (usually excluded, creates foot sliding)
  • ❌ Individual finger bones (retargeted separately or copied)

Why Fingers Are Different

Finger animation has unique properties:

  • High-frequency motion (fast, detailed)
  • Author-specific timing (personal animation style)
  • Poor IK candidates (too small for meaningful IK)

Best practice:

  • Body chains → IK retargeting
  • Fingers → Direct bone copy or separate curve retarget

The Critical Role of Retarget Pose

Here's what many tutorials skip:

Chains do nothing without a proper retarget pose.

Unreal calculates motion as:

ChainMotion = CurrentPose - RetargetPose

Why This Matters

If your source skeleton is in A-pose and target is in T-pose, the retargeter sees:

"The arms rotated 45° downward in the bind pose"

Every frame will carry this offset. Your retargeted animation will have perpetually weird arm angles.

Fix: Set both skeletons to the same retarget pose (usually T-pose or A-pose) before retargeting.

This is why retarget pose adjustment often matters more than chain setup.

Common Chain Mistakes (I See These Constantly)

❌ Mistake #1: Wrong Start Bone

Leg_L:
  Start: pelvis  # WRONG
  End:   foot_l

Problem: Leg chain now absorbs torso motion, creates impossible bends.

Fix: Start at thigh_l

❌ Mistake #2: End Bone Too Deep

Leg_L:
  Start: thigh_l
  End:   toe_03  # WRONG

Problem: Foot slides, rotates unnaturally, IK struggles.

Fix: End at foot_l or ankle_l

❌ Mistake #3: Missing Pelvis Chain

Spine:
  Start: spine_01  # WRONG - skipped pelvis
  End:   head

Problem: Upper body "floats," disconnected from root motion.

Fix: Include pelvis → spine_01 in your root or spine chain

❌ Mistake #4: Including IK Target Bones

Leg_L:
  Start: thigh_l
  End:   ik_foot_target_l  # WRONG

Problem: Double solving creates jitter and instability.

Fix: Chain should end at the actual skeletal bone, not IK controllers

Lock In This Mental Model

Chains describe anatomy, not hierarchy.

Retargeting moves limbs, not bones.

If you internalize this, UE5's entire retargeting system becomes intuitive instead of mysterious.

How This Connects to Your Engine Work

If you're implementing retargeting yourself (Ozz, custom engine, etc.), you're already working with these concepts:

Your Work Chain-Based Equivalent
Root motion extraction Chain root delta calculation
Velocity estimation Pelvis chain delta per frame
Foot IK solving End-effector constraint solving
Motion matching Intent matching across clips

UE5 just wrapped these algorithms in artist-friendly editor tools. The math underneath is what you're already building.

Comments 0

Please sign in to leave a comment.

No comments yet. Be the first to share your thoughts!

Edit Comment

Menu