Download

Understanding Shared Skeleton + Skeletal Mesh Performance

I’m trying to get better understanding of what actually affects the performance when sharing a skeleton between multiple skeletal mesh characters in ue4.

My source files are (3dsMax):

  • A single common bone rig which contains a high number of bones/nodes e.g. 250

  • I have two skinned characters

  • Character (cutscene) A - skinned to all of the bones (for example)

  • Character (in-game) B - skinned to just a subset of these bones e.g. 50

  • In-game animations use 50 bones

  • Cutscene animations use the full 250 bones

In UE4:

  • I import the Character A and it generates the unreal SKELETON asset with the full bone list (250)
  • I import Character B and tell it to use the same skeleton file as above
  • I import all animations using the same skeleton

Both characters can now share animations, so this is good and what I want and the skeleton is mapping the animations to the correct channels. This means I can:

  • Play in-game and cutscene animations on my in-game character B
  • Play cutscene and in-game animations on my cutscene character A

But, even though Character B is only skinned to 50 bones (i.e. a small set of what’s in the skeleton mapping file) - is it bad for performance for it to be using the SKELETON uasset that contains many (250) channels that won’t effectively be being used in game (as the Character B asset will only ever be being affected by just the 50 bones (core set) and not the full 250?

Is it better for performance to have a separate skeleton file for the in-game Character B with just the 50 bones in it (and lose the ability to share anims between them (without animation re-targeting and generating new assets)?

Is the performance mostly related to how many of the skinned bones (in the respective skeletal mesh assets) are being driven by a given animation, and not specifically anything to do with the contents of the skeleton file?

If I play a 250 bone authored animation on Character B (skeletal mesh skinned to just 50 bones), is that inefficient in theory?

Hopefully this makes some kind of sense, and appreciate any thoughts on this. Note: I have assets imported, played around with them but not done any performance testing specifically - this is just a trying to understand better how it all ties together in terms of what affects the performance.

Any thoughts or help appreciated. Thanks.