Click here to go straight to the WoS merchandise shop!

Rocket Club Developer Pages
Inverse Kinematics and Animation Keyframes

Rocket Club:
Home Page

Community:
Bulletin Board

Developer Pages:
Overview

Developers:
Development_Notes

Synthetic Reality

Inverse KineWHATics?

Um... in the world of 3D model animation there are two basic schools of thought. One is that the computer should do everything. You tell it that your four legged creature is 'running' and it works out how each leg should be bent in every display frame so as to give the illusion of running, while at the same time feet connect with the ground realistically, the chest heaves with each breath, and the Klargon Warrior-Slave riding the beast also bounces up and down appropriately.

The other school says "Man, that looks awful!" and realizes that humans are very discerning when it comes to noticing un-realistic body motion. Even more so with animals they have experience with (people, horses, dogs, etc.) This group feels only a talented artist has any hope of making an animation look believable.

Well, OK, there's the third group that likes putting on blue suits covered with ping pong balls and dancing around in an empty room while a computer with a camera takes notes.

The point is that the first group has some initial startup issues and after that can have an infinite variety of animations for free. Animations that do, in fact, probably look a little sucky. But the second two groups either have to pay top dollar to an animator, or buy a lot of extra ping pong balls, for every new animation they need.

Oh, sorry, inverse kinematics is the task of figuring out "What angle do I need to bend the knee so that his foot is on the ground, when his hip is right HERE. (i.e. given the end point constraints caused by gravity, ground, and previous motion, figure out all the in-between values for joint rotations.. preferably without actually bending things in directions which would normally make a real animal scream)

Which School does Rocket Club Attend?

Rocket Club waffles. For each animatable object, Rocket Club expects you to create a certain number of 'poses' (animation keyframes). For example, your little creature standing, sitting, jumping, etc. Some actions require multiple poses (walking requires you to make 8 poses).

At any given time, your little creature is moving FROM one pose and TOWARDs a new pose. The computer then calculates all the in-between frames automatically, and then does a little IK work (try to say IK (inverse kinematics) as much as possible, so you sound really smart. If someone challenges you on it, just say "which quaternion library do you use?" (I wrote my own!)) for special things like gluing your feet to the ground (when appropriate) or your butt to the ejection seat.

Rocket club can also (or at least plans to) inject a little random variance to add a little spice and individuality. Eventually I have to get to the spot where monsters can 'bite' you and at that point there will be a lot of fudging to make them turn their head in a way to look dangerous.

Also, rocket club is set up to re-use animations with different objects, so, for example, all bipedal two-armed creatures COULD share an animation. Admittedly I have not gotten this to work very well yet, sorry.

So Why Bring This Up Now?

I needed a spot to document the frame numbers I am using, since right now they must be the same for all animations. Eventually I may allow the plan file to override via some sort of intermediary animation hints file. (Something like "use animation from THIS model file HERE, and use frame 34 for the flying frame")

So, the rest of this page is just what each of the frames are for. Hopefully with a visual example:

  • POSEStandingIndex (1) // the rest pose we return to between other poses
  • POSEWalkingIndex (10) // first of 8 poses for walking
  • POSEDrivingIndex (20) // Seated in vehicle
  • POSERidingIndex (22) // Riding an animal
  • POSESeatedIndex (24) // sitting in a chair
  • POSESquattingIndex (26) // cross legged on the ground
  • POSEJumpingIndex (28) // in mid jump
  • POSEFlyingIndex (29) // Superman in flight

Pose numbers are Milkshape animation frame numbers. Note that animations include not only the angles of every joint, but also a position offset. When an animation is played, it does not modify the action physical location of the 'root' of the character. Hence an animation which is to be used for 'sitting cross legged on the ground' will actually offset the whole model to be 'below' the root node (which will be about 1 meter above the ground).

There is no substitute for experience here, so good luck! I personally have experienced some frustration in this process and had to re-do my work a lot (mainly when I neglected to select all the bones I needed). I strongly advise carefully keeping backups of the file BEFORE you start to fiddle with the animation, and don't just overwrite it when you're done, at least not until you have THOROUGHLY confirmed that you didn't break anything. I advise just frequently saving to files with ever increasing version numbers, so you can always go back to some previous version and start over.

POSEStandingIndex (1) // the rest pose we return to between other poses

POSEWalkingIndex (10) // first of 8 poses for walking

POSEWalkingIndex (11) // 2nd of 8 poses for walking

POSEWalkingIndex (12) // 3rd of 8 poses for walking

POSEWalkingIndex (13) // 4th of 8 poses for walking

POSEWalkingIndex (14) // 5th of 8 poses for walking

POSEWalkingIndex (15) // 6th of 8 poses for walking

POSEWalkingIndex (16) // 7th of 8 poses for walking

POSEWalkingIndex (17) // 8th of 8 poses for walking

POSEDrivingIndex (20) // Seated in vehicle

POSERidingIndex (22) // Riding an animal

POSESeatedIndex (24) // sitting in a chair

POSESquattingIndex (26) // cross legged on the ground

POSEJumpingIndex (28) // in mid jump

POSEFlyingIndex (29) // Superman in flight

 
  Copyright 1999-2014, Synthetic Reality Co. All Rights Reserved