Performance Impact of Bones

Although I’m aware that more bones in a model results in a greater performance impact, to what degree is this the case? I know there’s no single answer and that it depends on the project, so if push comes to shove I’ll just have to go ahead and create the models then compare them myself, but if I could just get a very approximate idea then it’d save me a lot of time and effort in Blender. For example, if I were to use 60 bones instead of 30, would the difference potentially become prohibitive, or can it perhaps quite easily be overlooked? I’m not massively concerned about framerates as it’s not for iPhone or anything, but I don’t want to waste resources left, right and center either.

Also, if the bones have no direct influence on the mesh (such as if they are used to mark a specific point of attachment for weapons, held objects and so on, or are used purely to ensure that other bones rotate around them properly) then will they too make a difference to framerates?

Cheers everyone!

This?

421395--14637--$Screen shot 2010-11-04 at 9.42.18 AM.png

I’m afraid it’s not quite what I was after. I’m referring to the total number of bones in a rigged mesh, rather than the number of bones affecting each vertex. Nonetheless thanks for the reply!

Unity greatly improved bone management over the years.

Nowadays, I can display more than 100+ bones (2 animated chars with 40 bones each, + bones in the level) on 3GS with only a minor performance impact (skinnedmesh calculation time reported to something like 3.3 in the profiler).

You can have a lot of bones, but a limited amount of course. Although, with such a number, you can achieve great things.

an important aspect is also: how many vertices are affected by each bone as that number will linearly affect the cpu power required. zombieville usa for example used a plentitude of bones but only a few dozen vertices per bone all with single weight (the higher the number of weighted bones per vertex the worse btw)

Total number of bones had not-so-direct impact on performance. The biggest thing to remember - for every bone in hierarchy you need to recalculate transform going back to the root - so basically the deeper the hierarchy is - the slower it will be. Sure, there are more things that are slowing down with number of bones going up - but transforms will be your biggest problem.
Also, as Minevr pointed out - you have one more thing to think about - number of bones affecting the vertex - as usual - the less is better :wink: The speed of transforming the vertices do not depend so directly on number of bones per-se, rather on the number of bones affecting the vertex.
So basically it is the question of balancing and testing 8)

Isn’t it always a matter of testing, deciding “on what you really need from what you originally believed to need” and then opt towards that target :wink:

Yeah, especially with character animation, where a simple bone hierarchy change can put a whole year of work to trash can :slight_smile:

For CA, everything has to be planned to insane amounts. :s

Thanks for the brilliant response everyone! I often spend months creating a model, and try to create it with both appearance and the armature in mind, so having to find this out through experimentation could have taken weeks of trial, error and experimentation otherwise. Obviously a bit of testing with my stuff is fairly unavoidable, but the less I have to do, the happier I am. :smile:

@ n0mad - That’s good to hear. I was expecting it to be a lot worse, but if you can get it running at that kind of speed then it seems I won’t have to change half as much as I guessed.

@ dreamora - Now you mention it that seems really obvious, but in all honesty I hadn’t even considered the number of affected vertices until now, so I’m glad you did!

@ Alexey - Thanks for the explanation, I’ll try to reduce the numbers of bones in my character’s spine, as it being a quadruped I’ve used the pelvis as the root, with the heirarchy running all the way up the spine, then either through the front legs or up the neck to the head, where I’ve placed quite a few bones for facial animation. I’ll have to see if moving the root from the pelvis to around the upper thoracic vertebrae will help speed things up.

And if I might push my luck a little, when it comes to animation blending, if I have multiple animations being blended, will that just outright multiply the performance hit by however many animations are affecting each bone too?