Animation - Keyframe vs Skin-and-bone

Started by
12 comments, last by Aardvajk 12 years, 10 months ago
Hey all,

I'm currently getting started with animation and I was wondering if I should implement keyframe or skin-and-bone animation in my game. Or is it necessary to include both? What are some disadvantages and advtanges between the two? Is one significantly faster?

Any information will be very helpful.

Thanks,
Achilles
Advertisement
Skinned animation usually is key-framed...

Do you mean vertex-morph/blend-shape animation VS skinned animation?
I'm confused now. I thought that skin-and-bone animation was where you define some skeleton with joints and then have some skin over it. As the skeleton moves you can calculate the movement needed for each vertex of the skin that is associated with that joint.

For keyframe animation, can't the artist define a bunch of different frames for certain times and then you linearly interpolate between the frames depending on your current time.

Is the skin-and-bone method required for the artist to generate the different keyframes?

Any insight on this would be great =) I'm just starting my journey into 3D animation. Please be as specific as possible =)

Thanks,
Achilles
P.S.

I would like to try to have character animation similar to that in Sims 3. Do you know what type of animation they use?
Sorry, I could've been more descriptive in my first post...
I'm confused now. I thought that skin-and-bone animation was where you define some skeleton with joints and then have some skin over it. As the skeleton moves you can calculate the movement needed for each vertex of the skin that is associated with that joint.

For keyframe animation, can't the artist define a bunch of different frames for certain times and then you linearly interpolate between the frames depending on your current time.
Those are both correct -- now, put them together and you've got key-framed skinned animation ;)

i.e. you define a skeleton with joints. The artist defines a bunch of different frames (which is a pose for the skeleton at a specific time) and you can linearly interpolate between those frames to generate in-between poses depending on the current time.
Once you've got a pose, you can use that to calculate the movement needed for each vertex of the skin (depending on the vertexes associated joint(s)).

This is the most common way of animating characters in games.
Start with skin-and-bone animation, but plan ahead so you can support full or partial keyframes for specific poses as well.

The big pluses of skeletal animations are IMHO:

  • It is much easier to make animated models
  • You need less data
  • You can easily add IK solvers and adjust poses dynamically

Keyframes can give you better quality - but this implies you can invest enough into creating models and animations.
Lauris Kaplinski

First technology demo of my game Shinya is out: http://lauris.kaplinski.com/shinya
Khayyam 3D - a freeware poser and scene builder application: http://khayyam.kaplinski.com/
The big minus of skeletal animation is that a lot of the time it needs to run on the CPU. You can do keyframed animation (including interpolation) entirely on the GPU and with very high performance, although obviously there is the storage cost to consider.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

Thanks for all of the answers guys, very helpful.

The big minus of skeletal animation is that a lot of the time it needs to run on the CPU. You can do keyframed animation (including interpolation) entirely on the GPU and with very high performance, although obviously there is the storage cost to consider.


Skeletal animation can be done entierly on the GPU using vertex shaders (Look up hardware skinning, its extremely straightforward and the shaders aren't very expensive), transformation matrices for the bones can be stored on the GPU (which means you can store keyframes for the skeleton on the GPU aswell.

Some types of animations are excessivly difficult to make using skeletons though so there are definitly good reasons to use vertex morphing instead in some situations.

Skeletal animation works best for objects that have skeletons or joints, while vertex morphing works better for things that change shape (Turning a cylinder into a cube using skeletal animation is painful to say the least and forcing your artists to make such an animation using skeletons and vertex weights will drive them insane, Making a humanoid walk properly however is far easier to do using a skeleton and if you want something like ragdolls its pretty much required)

Mixing multiple animation techniques for a single object is possible aswell. (You can morph the vertices you use as the skin for a skeleton to create some pretty cool things)
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!
Keyframe animation is used in most games, especially where speed is important (like RTS or MMORPG); models are stored key frame by key frame (all you need is to interpolate between any 2 key frames), so the file is rather large, but it's easy to implement and use; World of Warcraft uses keyframe animation (you wouldn't wanna be in the WoTLK Dalaran if there were skeletal animations, computations would kill any video card).

Skeletal animation is also key framed, but the final result (skinning) is done dynamically. It is only useful in high-end games, rag-doll physics, complex and interactive animations, games where a more organic animation is required; Crysis uses skeletal animations.

Both types of animation can link models with other models by using tag points; this way you can achieve a higher degree of animation as well as adding different features like faces, hair styles, clothes, items etc.

I would recommend you to start with keyframe animation, it's easier and you can find a huge load of free animation files on the public domain.

This topic is closed to new replies.

Advertisement