R15 Animation Retargeting: How It Works and Why It Goes Wrong (2026)

Retargeting moves an animation from one skeleton onto another. See why copying joint angles onto Roblox R15 looks off, and how a proportion-aware retarget fixes it.

Updated By Alex · Founder, NPCMotion8 min read
Example output · R15
Text to motion

“A person sprints forward naturally with fast steps and swinging arms. Loop naturally”

Try this prompt
TL;DR
  • Retargeting is moving an animation made for one skeleton onto a different one. Generated, mocap and video-based motion all have to be retargeted before they play on a Roblox avatar.
  • The quick method maps joints by name and copies the rotations. It is fast, and it is why so much generated animation looks slightly off on R15.
  • R15 has 15 parts joined by Motor6Ds, with limbs that are shorter relative to the torso than a human’s. Same angles, different hand and foot positions.
  • A proportion-aware retarget keeps where the hands and feet go, scaled into R15 space, then re-solves the joint angles and clamps them to sane limits.
  • Because that solve is deterministic and runs on CPU, re-targeting an existing generation onto another rig costs no credits in NPCMotion.

Retargeting is the step that moves an animation from the skeleton it was made for onto the one you actually want to play it on. Every animation that was not keyed by hand on your rig goes through it, and on Roblox it is the step that decides whether the result looks made for R15 or merely pasted onto it.

Most of what people call "the AI look" in generated animation is not the model at all. It is a retarget that copied angles when it should have kept positions.

What is the R15 rig?

R15 is the 15-part Roblox avatar. Each part is joined to its parent by a Motor6D, and an animation is a KeyframeSequence that sets those joints over time. It is the rig most experiences now use, and the one that supports body scaling and Rthro proportions.

R6R15
Body parts615
Elbows and kneesNoYes
Body scaling and RthroNoYes
Supported by NPCMotionNoYes

Why does copying joint angles look wrong?

Take a character reaching for a door handle at chest height. On a human skeleton, a given shoulder and elbow angle puts the hand on the handle. On R15 the upper arm is proportionally shorter and the torso wider, so the same angles put the hand short of the handle and angled oddly.

Why copied angles miss
Reach for the door handle
Misses by 17% of the arm

Illustration: the same reach on a human arm and on R15’s shorter upper arm.

Legs are the same story, and there it shows up as the most recognisable flaw of all: foot sliding.

What gets preservedCopy the anglesProportion-aware
Joint anglesExactlyRe-solved per rig
Hand and foot positionsLostKept, scaled to R15
Foot contactsDriftPinned
Joint limitsCan hyperextendClamped
Rthro and custom scalesSame error, different sizeOwn solve per body

How does a proportion-aware retarget work?

The principle is simple: decide what the motion is for, keep that, and let the joint angles be whatever achieves it on the new body.

  1. 1Read the target rig. Part sizes and joint offsets come from the rig itself, by walking its Motor6D hierarchy. The Studio plugin sends that structure and nothing else: no meshes, no textures, no place file.
  2. 2Scale the motion into R15 space. The root path and the hand and foot positions are scaled by the ratio between source and target limbs.
  3. 3Re-solve the limbs. Inverse kinematics finds the shoulder, elbow, hip and knee angles that reach those positions.
  4. 4Lock the contacts. Each planted foot is pinned for its contact window.
  5. 5Clamp the joints. Angles are limited so elbows and knees never bend the wrong way.
  6. 6Bake. The result is written as a KeyframeSequence at 30 or 60 fps, with keys on every driven joint, so it opens in the Animation Editor like anything keyed by hand.
Example output · R15
Text to motion

“Look scared then turn and run away with big dramatic strides”

One prompt, through the six steps above: re-solved for R15 legs, the feet pinned through a sharp turn and long strides, and baked as a KeyframeSequence.

Try this prompt

Does retargeting cost credits?

No. Generation runs on a GPU and is what credits pay for. Retargeting runs on CPU and is deterministic, so in NPCMotion an existing generation can be re-baked onto a different rig, frame rate or root-motion mode without spending a credit.

That split also means a tall Rthro body and a blocky default avatar each get their own solve from the same generation, rather than one compromise that suits neither.

Can you retarget to non-humanoid rigs?

Not with this solve. Dragons, spiders and mechs need a different approach: a procedural solver that walks the Motor6D graph and plants feet on a phase timer, with no model and no GPU. That is a separate engine, and it ships after the R15 one.

Sources and further reading (checked Oct 2, 2026)

Frequently asked questions

Written by Alex, Founder, NPCMotion. Builds NPCMotion, the text and video to R15 animation tool for Roblox creators, and writes up the parts of the pipeline that are hardest to get right: retargeting, foot contacts and GPU inference.

Published

Keep reading

All guides