11
\$\begingroup\$

I am looking at adopting a skeletal animation format (as prompted here) for an RTS game. The individual representation of each model on-screen will be small but there will be lots of them!

In skeletal animation e.g. MD5 files, each individual vertex can be attached to an arbitrary number of joints.

How can you efficiently support this whilst doing the interpolation in GLSL? Or do engines do their animation on the CPU?

Or do engines set arbitrary limits on maximum joints per vertex and invoke nop multiplies for those joints that don't use the maximum number?

Are there games that use skeletal animation in an RTS-like setting thus proving that on integrated graphics cards I have nothing to worry about in going the bones route?

\$\endgroup\$
2
  • \$\begingroup\$ +1, This is a good question. I've always wondered whether the animation should be done in shading language or on the CPU... \$\endgroup\$
    – James
    Commented Jan 31, 2011 at 15:41
  • \$\begingroup\$ RTS Games using EA's SAGE engine (C&C 3 and later, BFME series) use skeletal animation, but there vertices are bound to only one bone (at least in BFME) \$\endgroup\$ Commented Feb 2, 2011 at 9:46

2 Answers 2

6
\$\begingroup\$

Limiting the number of bone influences is common, yes. You can either 0-weight unused influences, or have a loop/early-out mechanism to skip.

As for whether it works for an RTS, I don't have a reference for you, but I imagine you're going to need LOD if working with a large number of characters on-screen, and also if those characters are small.

LODing skeletal characters is much the same as LODing anything else, except you'll probably want to LOD the bone influences and skeleton as well as the mesh.

For example, a low-ish level of detail might only use a single bone with the highest influence per-vertex (also known as "hard skinning").

You would probably also limit the number of bones in the skeleton for a low LOD model.

Finally - consider whether you ever need to render the characters close-up. You probably only want to model, skin and animate the characters for the closest view distance... certainly you don't want to be storing all the runtime data at a resolution far higher than you'll ever render. You might find that you just don't need more than a very basic skeleton and a couple of influences per-vertex for your situation.

\$\endgroup\$
2
  • \$\begingroup\$ I was hoping someone might say "you really don't want bones for turrets in an rts if your pieces are small; consider MD3 with it's linked models feature instead" or something \$\endgroup\$
    – Will
    Commented Jan 31, 2011 at 8:50
  • \$\begingroup\$ Well I wouldn't use skinning for those kinds of meshes in that kind of situation, but "bones" are just a fancy name for hierarchical transforms. Nothing stopping you from just attaching meshes to them rather than weighting vertices. (in other words, for a turret you might just have two bones and two meshes, and no skinning/weighting at all). \$\endgroup\$
    – JasonD
    Commented Jan 31, 2011 at 9:09
2
\$\begingroup\$

I dont think skeletal animation is good for an RTS game, skeletal animation will require extra process for all characters, while keyframe animation consumes more memory but you will use the same for lots of characters, also a rts game requires little animations per character

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .