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_lvsLeftUpLeg) - 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:
- Chain root transform (position + rotation at start bone)
- End effector position (where the endpoint is in space)
- Chain direction vector (normalized vector from start to end)
- Total chain length (Euclidean distance)
- 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:
- IK Solver bends intermediate bones to reach the new foot position
- Twist bones are rotated procedurally to prevent candy-wrapper artifacts
- Foot IK goals correct for ground plane and prevent penetration
- 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!