It turns out I have written a lot of Inverse Kinematics solvers using a lot of different IK algorithms.
I didn't even realize how many different algorithms I've tried for solving IK until I started writing this page. The list looks something like this:
- simple serial analytical IK
- Cyclic Coordinate Descent (CCD)
- serial and tree structured
- with joint limits from the root
- with child-child joint limits
- dynamically re-rooted
- 2 Degree of Freedom (DOF), 3 DOF, and 6 DOF
- sequential euler angle joint solver
- numerical quaternion joint solver
- rigid body dynamics solver
- augmented coordinates
- explicit with Lagrange Multipliers, LCP joint limits
- implicit with stiff springs
- generalized coordinates
- explicit with springs
- implicit Featherstone with stiff springs
- augmented coordinates
- particle-based solver (like SHAKE, RATTLE, Jakobsen)
- dense constraint approach to branching nodes
- sparse branching with multiple passes
Yikes! I hope to make each of those a link to a detailed description of the technique and its pros and cons in the future.
For now, here is my 2002 Game Developers Conference lecture, titled My Adventures in Inverse Kinematics. It's a description of the CCD-based approach I took for a while on my indie rock climbing game.