Fixing the cracks

Project Page Next project post Post History

Having recently upgraded my inverse kinematics (IK) engine, I've since been trying to deploy it in my ProxyMan production tool. The original idea was to build an IK engine into my motion system so that I could fix feet and hand contacts, among other things.

I started by building the engine in my test object, because it was quicker to build and test with. So, when things worked in there, I moved them into the production tool. But it wasn't all smooth sailing. ProxyMan highlighted some issues still present in the IK engine.

A good example of this was with blending. Blending in this instance would be going in-between a motion capture state and an IK calculated state. That is, blending the IK output into and on top of the motion capture performance.

The legs really highlighted an issue; the blended rotations just didn't work correctly. The following images show the issue.

Standing pose, the leg is not bending towards the cube, so no IK blending:

Now, lets bend the knee using IK to 100%:

Now, lets blend between these two states.

Here's what (approx.) 60% blending looks like:

The leg looks twisted

And another blend example, this one around 50%:

This blending is really off

You can see from the images above that the 'in-between' rotation states are simply not right. So, I had to find a fix. In the end, I had to rewrite some of my library helper functions, and just generally give the engine better data to work with. It was a bit of a hop-skip-and-jump thing. I'd fix one part, and another issue came through. After the many hours of fumbling about, I can't say for sure that everything is now 'fixed'. But it seems to work pretty good now.

Here's an example of a another leg, showing the chain in all the correct rotational states for three different blending values:

From left to right, the completed IK engine with zero blending, 50%, and the full 100% IK reach

Ah, looks good. No funny rotational issues with the in-between blending, and no issues with the roll joints (the yellow joints), which are meant to be unaffected. It's a really good example of how I designed the system to be flexible. It's an IK engine that preserves all other objects, irrespective of whether they are within the chain or not. It all just seems to work now.

All in all, this is, quite frankly, a big relief and a positive sign moving forward. Having my own motion system with a capable IK engine means I should now be able to do some basic motion capture animation and editing. The next step is to test this on an animation, something to prove the IK engine and edit concept.

It doesn't end here though. There's still a lot ahead to solve. For instance, I haven't got a solution for facial motion capture yet. But this here is a big box to tick. I feel much closer to bringing my projects to life now.