Archive 17/01/2023.

What if – there was animation controller proxy

Lumak

Just another one of those processes that I was curious about and wanted to see if it made any difference to create an animation controller proxy for all other characters to use the same animation.

Tested with 400 characters.
Release build:
w/o proxy

w/ proxy

Debug build:
w/o proxy

w/ proxy

Makes a slight difference in Release and more significant in Debug. Any thoughts?

Lumak

I can conclude that the animation system is pretty optimized and there’s no need to create a proxy controller, even if you have a ton of chars in the scene.

weitjong

Have you disabled the max frame limit in your tests?

johnnycable

What of those number shall I check exactly? Update Avg?

Lumak

Thanks, weitjong. I didn’t expect “no limit” would make a difference since the char animation control update is in physics fixed update cycle but, wow, a huge difference. I’m not going to repost pics of every setup but the release build ran at around 470 fps for both conditions and 210 for debug - both conditions.
Our current character demo calls animation update every frame, e.g. PlayExclusive() update of Idle anim. And by removing that call, the release frame rate shot up to 470, dbg frame rate shot up to ~210.

johnnycable, you want to look at sceneupdate and physicsupdate.

Frame capture of debug, non-proxy animation, no constant call to PlayExclusive() in physics fixed update.

Lumak

So, my conclusion still remains the same, animation system is pretty optimized and using a proxy animation controller will not boost performance.
For a large body count, however, you should look into (some things I can think of):

  • lod geom
  • lod shadows
  • lod animation - *err, this feature is there but not sure if it’ll help much because of how optimized anim system is.
  • limit draw distance
Sinoid

For a large body count, however, you should look into (some things I can think of):

Other than LOD, time would be better spent on more aggressive batching and applying AZDO principles to instance the characters. On DX11 that scene can get chopped down to < 15 draw calls with minimal hassle.

Once you get lights and shadows in there the cost of drawing all of those individually is going to get really high fast.