Inverse Kinematics

I got into IK by watching Ubisoft's IK Rigs GDC Talk. Since then I've tried my best to replicate as many of the IK leg movements types I saw in the video. This is a collection of mostly what I call single pass IK Solvers. These are an alternative to things like FABIK and CCD Solvers which require several passes to reach an end effector.

  1. SwingTwist Solver this uses 2 directions to point a bone, similar to lookAt matrix function. Instead it uses what I call Inverted Quaternation Direction along with the concept of breaking rotation down into a swing and twist motion. It works well it keeping bone orientations intact.
  2. Limb Solver two bone solver thats good for human arms and legs.
  3. Z Solver three bone solver that shapes the bones in a Z Shape, good for animal or mech legs.
  4. Piston Solver this one handles position instead of rotation which is uses to create a piston motion. good for mechanical movement.
  5. Arc Solver with equal lengthed bones, it translate the IK distance to a circle arc toward the end effector.
  6. ArcSin Solver based on the arc solver but fixed to create a sin wave like shape.
  7. Trapezoid Solver different three bone solver that uses a trapezoid shape to compute the angles which ends up creating a c like shape. Good for mech legs like the star wars AT-RT.
  8. Spring Solver with even number of bones and equal length, this solver creates a spring-like shape.
  9. Triangulation Solver my implementation of a research paper. Its like a single pass solver alternative to CCD.
  10. Natural CCD from a white paper where they take the CCD algorithm and apply a scaling factor that gives the moment of the bones a more natural feel.
  11. All Solvers showing off all the solvers using procedural leg movement while rendering all the ik data with SDF Ray Marching, this recreates a part of the Ubisoft Demo.
  12. IK Rig working example of the current version of the IK Rig Animation system. This one takes existing animation, converts all the rotation data into IK information that is then used to drive other characters using IK solvers. This allows sharing animations between characters that dont have the same kind of skeleton. It also has an extra solver used to animate the human spine that I call SwingTwist Chain solver, which uses two sets of directions that interpolates the results onto a chain of bones to recreate how the spine should be rotated.