Knee pop… minor but obvious

(EDIT: educational video added)

IK Leg: Knee Pop
Knee pop: the large angular change when an IK chain reaches full extension, and bones appear to lock to the extreme for some frames.
For a standard 3 joints (2 bones) IK chain, high angular velocity near full extension is no surprise, appearing to ‘pop’. In fact, a pop should occur.

Briefly explaining: the knee angle only depends on the distance of ankle to hip joint. The IK system inputs a translation from IK control, outputs angles to have the ankle match the IK control location. On a unit circle, a conversion example:
theta=acos(x/1)
The graph of above equation, with full extension (-1) or minimal extension (1), the derivative approaches infinity (vertical). It’s obvious when you see the 1st derivative:
d_theta=-1/(1-x^2)^0.5

Solutions?
Most animators simply take care of the keys and curves to avoid full/hyper extension, since those poses tend to be rare. Professionals on the pop:
http://animationtipsandtricks.com/2008/08/readers-question-workflow-and-timing.html

In Maya solutions:
Angle limit: works, but animators want to reach full extension. Also, often limits cause weird jitters and IK could start twisting along x (bone axis).
Angle damp: works on 4+ joints, so not for 3 joint legs.
Autocorrect: fix bad IK control positions by adding ease-in and limiting distance to hip. Need to figure the ease-in amount.
Looking at the derivative, simply counteract the angle speedup by setting IK control translate keys with extreme ease-in eas-out. You can calculate the best ease, but most animators prefer to determine that speed right?

Compression of Motion Capture Databases (UTA, Siggraph 2006)
This paper mentions it’s common in commercial apps to allow imperceptible bone length changes to minimize knee pop. Perhaps it’s hidden in 3d apps or motionbuilder has it, I’ve never heard of this. It’s compression results are amazing, but here we’re dealing with a simple problem. But we seek the easiest solution that maintains animator useability.

Footskate Cleanup for Motion Capture Editing (UW, Siggraph 2002)
This paper implements several methods on mocap cleanup, one of which fixes knee pop. I didn’t read the full paper, so seems like the corrective component of the system can’t be used separately. Are they proposing 2 methods? Either knee damping, or leg stretch methods?

Given prebuilt IK solvers (like Maya), damping the angle is unlikely, since it’s part of the solver. I can write a plugin solver with ankle damping…
Leg stretch is nonrealistic, but common.

Further reading shows they damp the knee after IK solve, and stretch the thigh and shin bones to reach d (distance btw hip and ankle). It’s not mentioned, but I’m assuming they rotate the hip afterwards to match the ankle to IK control exactly.

Kind of envy how they are in control of the whole system. In maya it’s better to only adjust the IK control or distance btw things. IK’s supposed to deal with all angles.

…just got a working expression. First one cut off 10fps, a simple cleanup made >1fps hardly any slowdown. It uses several cosines, so I’m considering a pseudo-linearish solution if performance matters. I’m quite amazed by the smoothness, by indirectly damping the angle. It doesn’t have the exact equations from the papers though. I opted for a cosine damper. Later I’ll think of a simpler/more user directable damper. That’ll be useless for small joint numbers where animators just fix it, but assuming a large IK system (whatever that is???), it could help dampen annoying pops.

link

11/01/2008. Tags: , , , , , , , , , , , . code.

No Comments Yet

Be the first to comment!

Leave a Reply

Trackback URI