you are here [x]: Scarlet Star Studios > the Scarlet Letters > finding my c(g) legs
<< before
here it comes again
after >>
good google!
June 17, 2007
finding my c(g) legs
by sven at 11:59 pm
I feel like I'm finally beginning to get a feel for how to animate CG models. (Knock on wood!) It's been a week of migraines to get to this point, though.
Today's big victory: I figured out a bug that was plaguing me all week.
A wrote a few days ago about wrestling with the eyestalks. The clip above shows the final outcome for that effort. Unable to figure out what was causing the little "epileptic fit," I wound up simply re-animating the whole thing.
I was worried that the mysterious bug would show up again... And sure 'nuf, it did. In the clip above, watch the lower left-hand corner and you'll see the leg have a little unintended spasm.
What causes it? Short answer: It happens if you try to make the arm-tentacle's hand pass through its own elbow.
See, the Elder Thing model is basically just hollow skin. To articulate it into poses, you create a skeleton of bones, each of which has magnetic force that deforms the skin's polygon mesh...
The arm-tentacle's bones are rigged using "inverse kinematics" -- which basically just means that you pose the end of the bone chain, and the computer will figure out how to bow the chain so that it follows the hand's lead...
And if you try to make the hand pass through the elbow? Then the the computer has a problem, and it will suddenly pop the arm-tentacle off in a totally different direction.
This problem was really hard to diagnose for several reasons:
- When one of the IK chains freaks out, all of the IK chains stutter. I was seeing the stutter in the leg -- but the offending pose was actually up in the arm!
- You can't tell that the arm is trying to pass through itself when IK is turned on -- only when it's turned off. (I'll illustrate this point later.)
- The stutter doesn't coincide with a keyframe. The hand tries to go through the arm's elbow between keyframes, when the computer's interpolating a motion path for me.
- Given the complexity of the model, it's easiest to create poses while looking at orthogonal views (e.g. top, front, right). To see where the problem's occurring, you need to view the model in perspective, and zoomed in on the correct controller.
Let me show you the problem up close:
The model stutters on the change between frame 12 and 13, and between 19 and 20. Above you can see the arm bowing nicely...
...and then, in the very next frame, the arm pops to this pose! (Yeesh.)
That box in the center of the screen is what controls the position of the hand. I pose it independently of the skeleton. When IK is turned on, the computer will do computations to make sure that the last bone in the arm is touching it.
Now let's see what frames 12 and 13 look like when the IK is turned off...
See that thin white line that the box is traveling up? That's its motion path. In frame 12, the box (the "wrist goal") is getting close to the arm -- but hasn't touched it yet.
In frame 13, the box is now touching the (unposed) arm. This little transgression -- this is what causes the IK to freak out and makes the entire model stutter.
Boy am I glad to finally have the mystery solved! Not knowing why the model was out of my control -- it was torture.
Other good news: I figured out what causes a recurrent crash. If I have a LightWave file open -- and then replace it by opening another -- then when I go to render the second file, LightWave is going to crash.
It's not a situation that I can really avoid. But at least I can be smart about when I save my work. And I know that if I want to render a file other than the one I currently have open, I'm just going to have to quit the program and start it up again.
(Upgrade the software? I could upgrade LightWave 7.5 to 7.5d for free if I wanted -- but I've been reading about other bugs that show up in 7.5d. Too dangerous, methinks, to muck with mission-critical software while I'm on a deadline.)
posted by sven | June 17, 2007 11:59 PM | categories: let sleeping gods lie