The new 3.0 MetaHumans: 40% performance gains? Tutorial inside.

Update:

After some more research, I learned that the MetaHuman performance cost is not due to the raw # of bones, but the # of vertices influenced by a large # of bones. The engine has to “think” of how to move each vertex during one frame of an animation. And if each vertex has a large number of moving bones to pay attention to, it cant think efficiently. This new understanding of skeletal mesh performance seems more realistic and tangible than simply “delete bones lul”.

In UE, vertexes can only have 8 bones maximum weighted to them. So I made a script to gather data on the worst offending bones before continuting with the bone deletion script. It looks like this:

For every vertex (~17,000 in “f_med_nrw_body”):
If the vertex has >4 bones influencing it:
Count +1 for each of those bones.
Print list of all bones, each notated with the number of times it was weighted to a vertex with 5-8 bones total.

Once I have this list, I can slightly change my targets for what bones I want to prioritize deleting. And perhaps some corrective bones that dont intruduce many stacking bone weights per vertex (elbow, knee) can remain for fidelity purposes.

This part of the saga is where subjective decisions are going to be implemented. So i’m making sure to set up mild scalability settings for other users that use this in the future. Such as bone-per-vertex tolerance (1-8) when identifying offending bones & potentially varying degrees of choice when finally deleting bones. For example: a potato mode for NPC metahumans that deletes more bones and a mode for main character metahumans that leaves some of the fancy bones, primarily in the face and arms.

1 Like