Jordan Santell immersive engineer


THREE.IK is an inverse kinematics library for three.js, supporting a FABRIK iterative solver, multiple chains, multiple effectors, and constraints.

Documentation landing page for THREE.IK, demonstrating the IK functionality.

Inverse kinematics

"Bones" are used in skinned mesh animations in computer graphics, controlled via inverse kinematics (IK) or forward kinematics (FK). Animating an arm, for example, can be handled by forward kinematics, rotating bones from parent to child (shoulder, elbow, wrist). Often animators want to specify where the end of the bone chain should be, and with inverse kinematics and constraints, can automatically solve for the rotation of the ancestor bones.

Demo showing multieffectors in THREE.IK.

THREE.IK uses a Forward And Backwards Reaching Inverse Kinematics (FABRIK) solver to accomplish this. In short, FABRIK works in two passes. First, the forward pass moves the end effector to the target destination, and incrementally adjusts its ancestor joints according to its constraints. Next, the backward pass moves the root joint to its initial position, and incrementally adjusts its descendant joints, ending at the end effector.

Steps illustrating FABRIK's forward and backward passes
Figure 1 from the FABRIK paper (Aristidou, Lasenby), illustrating the forward and backward passes.

There are other IK solutions (namely CCD) that may be used instead of FABRIK, each with different tradeoffs.


THREE.IK's goals were to provide a baseline IK solution, and more importantly, facilitate a place for 3D web developers to discuss what the web needs from an inverse kinematics library. Discussions are archived on additional constraints, alternative IK solvers, general API design, and simulated annealing.

THREE.IK's logo, by Caitlyn Crites.

Currently (2020), development is not active on THREE.IK, although that may change with the availability of WebXR.