3D Animation techniques argument

Louis!
Unregistered
 
Post: #1
I recently had a dissacord with a friend who was claiming that most comercial 3D games out there right now do not use interpolation between frames of character animation. According to him, the animator must actually make a pose for every frame of animation (instead of only the key frames). Now, I can understand that the game engine may pre-interpolate certain animation to speed things up (not to my knowledge though), but I can't seem to wrap my head around trying to figure out why all 3D software made for game character animation that I've come across seems to be based on keyframing if the animator is simply going to have to make all the frames by and anyway since that's the universally used method in games. Is he off his rocker, or am I the total nut in this?
Quote this message in a reply
Member
Posts: 57
Joined: 2002.04
Post: #2
A lot of commercial games now use motion-capture for character animation, where a person acts out each animation sequence in real life and sensors send data back to the computer, which is then used to animate the 3D model. However, this system is very expensive and really only works for humanoid characters, so often the animator has to animate the model by hand in a 3D graphics program. In this case, the animator can either use keyframes or create the animation frame-by-frame. In keyframing, the animator sets up keyframes and the graphics software automatically interpolates between them in the final animation (although I'm hardly an expert on 3D engines, I don't think any of the interpolation takes place in-engine; feel free to correct me if I'm wrong). The frame-by-frame approach takes far longer than keyframing but generally results in more realistic character animation. (Keyframing may also be used as the basis for frame-by-frame animation, to give the animator a rough animation which he can refine manually.)
Quote this message in a reply
Member
Posts: 145
Joined: 2002.06
Post: #3
I only have hard facts for one particular case, the Unreal Engine, but this is how they do it:

The animator creates and textures the model in whatever app they want. They then import it into 3DStudio for animation. In 3DStudio, the typical process is to bone the model and then keyframe animate the bones, but other animation techniques may be used. The animation is then cooked to a fixed-framerate full-mesh animation and saved.
UCC then uses this cooked animation to create the LodMesh and animation data that gets saved into the package. When Unreal plays back the animation, it does linear interpolation of the two keyframes nearest the fractional frame* that is currently being displayed. This has all the benefits of:

1. animation in a standard commercial package that animators are farmilliar with
2. simple data storate (#polys, #verticies, #frames, polys, verticies, verticies, verticies, ...)
3. easy frame picking at render time
4. smooth animation playback at framerates higher than stored.

* think GL_NEAREST texture interpolation with verticies

"He who breaks a thing to find out what it is, has left the path of wisdom."
- Gandalf the Gray-Hat

Bring Alistair Cooke's America to DVD!
Quote this message in a reply
Jeff Binder
Unregistered
 
Post: #4
I don't know about any specific games, but one tecnique is to use quaternion interpolation with bones. This results in higher quality than linear interpolation, especially if the keyframes are far apart.

For example, if one keyframe has the arm all the way back, and the other has it all the way foreward, linear interpolation would make the arm get increasingly shorter until it's completely flat, than make it get longer in the other direction. Using bones with quaternion interpolation, the arm would swing around correctly. This means you can get away with fewer keyframes and still get acceptable results.
Quote this message in a reply
Member
Posts: 345
Joined: 2002.04
Post: #5
Quote:Originally posted by Louis!
I recently had a dissacord with a friend who was claiming that most comercial 3D games out there right now do not use interpolation between frames of character animation. According to him, the animator must actually make a pose for every frame of animation (instead of only the key frames). Now, I can understand that the game engine may pre-interpolate certain animation to speed things up (not to my knowledge though), but I can't seem to wrap my head around trying to figure out why all 3D software made for game character animation that I've come across seems to be based on keyframing if the animator is simply going to have to make all the frames by and anyway since that's the universally used method in games. Is he off his rocker, or am I the total nut in this?

Louis, you are right and your friend is misinformed. Even in my shareware snowboarding game I use keyframing. The techniques others have listed here are other ways to do it but I would go out on a limb and say no commercial game uses the technique of storing every single frame of animation any more.
Quote this message in a reply
Member
Posts: 145
Joined: 2002.06
Post: #6
Quote:Originally posted by monteboyd
I would go out on a limb and say no commercial game uses the technique of storing every single frame of animation any more.
Unreal stores character animation at 30fps for some models. That's pretty close to "every frame". those frames are generated from a keyframe animation however.

</nitpick>

"He who breaks a thing to find out what it is, has left the path of wisdom."
- Gandalf the Gray-Hat

Bring Alistair Cooke's America to DVD!
Quote this message in a reply
Member
Posts: 345
Joined: 2002.04
Post: #7
Quote:Originally posted by inio
Unreal stores character animation at 30fps for some models. That's pretty close to "every frame". those frames are generated from a keyframe animation however.

</nitpick>

I could be wrong but I think Louis' friend was saying that the animators themselves would have to create each frame, the above technique means the engine is still doing the tweening work - correct?
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #8
Yeah, but they can get away with a linear interpolation between frames with key-frames that frequently. With less frequent key- frames, you'd have to do some kind of spherical linear interpolation to get things looking good.
Quote this message in a reply
Member
Posts: 145
Joined: 2002.06
Post: #9
Quote:Originally posted by monteboyd
I could be wrong but I think Louis' friend was saying that the animators themselves would have to create each frame, the above technique means the engine is still doing the tweening work - correct?
the use of the <nitpick> tag was supposed to indicate I was critisizing your perticular use of the phrase "no commercial game uses the technique of storing every single frame of animation". Sorry about that.

"He who breaks a thing to find out what it is, has left the path of wisdom."
- Gandalf the Gray-Hat

Bring Alistair Cooke's America to DVD!
Quote this message in a reply
Member
Posts: 345
Joined: 2002.04
Post: #10
Sorry, I picked up on that Inio, just wanted to clarify my case Smile
Quote this message in a reply
Louis!
Unregistered
 
Post: #11
Thanks everyone. I'm glad to see I'm not crazy!
As for the interpotation stuff everyone is mentioning. Unless there is some really weird stuff going on under the hoods of all the software I've used It seems you've missunderstood what is meant by linear interpolation. (But I couls very well be wrong about this since what I use is animation software made for making animation easier). But to my understanding, Linear simply refers to the transition, not the direction of the movement.. When you animate a bones model, you're not moving around position data for each bone, you are moving around rotation data. Since you are rotating, not repositioning, bones this means that simply interpolating (in a linear fasion) between the agular values of key-frame 1 to key-frame 2 will give you a rotation of the attached limb. Remember, when animating, if I want to move the guy's hand up, I don't grab his wrist bone and move it up (which would raise his hand but stretch the arm as well), I instead rotate the elbow bone who's rotation is translated to its attached vertices and child bone (wrist) and its attached vertices. This way, if the computer linearly interpolates between an elbow's rotation from 0 degrees to 90 degrees (thus passing from values of 0 to 90) you a rotation not a simple displacement.
Quote this message in a reply
Luminary
Posts: 5,143
Joined: 2002.04
Post: #12
What you are referring to is usually called "spherical linear interpolation", that is, linear interpolation of an angle. What many games (such as Quake 2) do is linear interpolation between vertices. Obviously, this will change the dimensions of the model, but if the difference between key-frames is small, the error will be small.

If you're going to go to the trouble of doing spherical linear interpolation, there's probably no need for so many key-frames; chances are the movement you're trying to capture can be described far more efficiently in terms of rotation than in terms of translation.
Quote this message in a reply
Member
Posts: 345
Joined: 2002.04
Post: #13
Just to add my personal experience to the equation, in the skeletal animation program/system I developed for my snowboarding game I pretty much only use rotation of joints to create movement. It has the ability to do translation movments but that is pretty much just there for completeness rather than usefulness.

In the model of a muscle and bone bound being you will pretty much only find rotation movement, but if you animating some form of machinery then translation would become useful for moving parts.
Quote this message in a reply
Post Reply 

Possibly Related Threads...
Thread: Author Replies: Views: Last Post
  Screen-space techniques mattz 4 3,976 Nov 6, 2008 08:55 PM
Last Post: Bachus
  2d Game techniques lfalin 9 5,253 May 3, 2007 10:04 AM
Last Post: lfalin
  2D game techniques in OpenGL Wowbagger 7 8,416 Aug 5, 2006 05:06 PM
Last Post: akb825
  billboarding techniques ghettotek 2 3,274 Feb 16, 2003 10:28 PM
Last Post: OneSadCookie