My players have real faces now.
The architecture: one body skeleton for every player. That is where motion matching, the montages and every retargeted animation live, and I never touch it. The head is a separate MetaHuman mesh that simply wears the body's pose, and which head a player gets is driven from his database ID. Same player, same face, on every machine, forever.
Necks stretched like giraffes when they ran. I was hiding the body's head bone so it would not poke through the MetaHuman one. It turns out hiding a bone collapses its transform, and the head mesh copies exactly those transforms to pose itself. I was feeding the face a corrupted head bone. It worked standing still and exploded in motion.
The two features literally cannot coexist and no code fix exists. The answer was the boring one I had written in my own design doc on day one and then spent hours avoiding: give the body mesh no head. Delete the head polygons in Blender, keep the bone. Which is exactly what real football games do. Zero runtime logic now. Problem class extinct.
Lesson: when the clean fix is "content work" and the hacky fix is "code," I reach for code. That instinct cost me an evening.
And the faces are not cosmetic. Every player is a row in a database: name, age, contract, potential. So when a seventeen-year-old from your academy breaks into the first team, he is not "Player_0412." He has a face you recognise.
Shipped: MetaHuman heads on a shared animation body