Characters and animation from Unreal
Skill ferret-unreal-characters · download all skills · SKILL.md
When to use#
Exporting playable characters (customizer presets), NPCs or animals from a UE5 project, turning Animation Blueprints into Ferret graphs, or checking why an exported character looks or moves wrong. Placing and driving them in a level is ferret-animation, ferret-ai-navigation and ferret-transform.
Steps#
- Inventory (
ue/inventory_characters.py): meshes, skeletons, clips per skeleton, morph counts. Families that share a skeleton share clips. - Read the game's data: presets and tables (parts, material options, tints, morphs), not just meshes.
- Export with
ue/characters.py, one mesh per editor run,FERRET_CLIPS=1for its clips. characters.mjs clipsto one skeleton;--keepwhat the game plays.characters.mjs assemblefrom the game's spec: one skin, morphs baked by name,solidhair withhairColor().characters.mjs optimizeper tier (morphs dropped unlesskeepMorphs).animbp.mjsfor Animation Blueprints; read everyunknownit reports.- The character viewer (
?characters=<index.json>), then the game in third person.
Check afterwards#
The viewer report is clean (every file loads, every clip moves bones, no part without skin or material); the hero walks forwards; sizes per tier within budget.
What usually goes wrong#
- Several meshes in one editor run: each file carries the earlier ones' clips.
- Writing a retarget map for skeletons that already share bone names.
- Hair as stripes (groom strands do not bake) or red (
Hair Tintis melanin and redness, not RGB). - 100 morph targets left in: tens of MB per head.
- Hair bones left at the rest pose; one Babylon skeleton per part.
- Turning the model 180 degrees by guess (it faces +Z): measure the toes against the walk.
- Same-named assets in two folders overwriting each other; key by path.
More in reference/ue-characters.md.
Files#
reference/ue-characters.md— Exporting skeletal meshes, clips and Animation Blueprints from Unreal into Ferret characters, and the traps found doing it: clips that only export through a playing component, hair, morph targets, shared skeletons, size, facing.reference/api-animation.md— every export of@ferret/animationwith signature and doc comment