Computer Graphics and Virtual Reality Lab

Department of Computer Science

Dr Andreas Aristidou

Forward And Backward Reaching Inverse Kinematics

Inverse Kinematics is defined as the problem of determining a set of appropriate joint configurations for which the end effectors move to desired positions as smoothly, rapidly, and as accurately as possible. However, many of the currently available methods suffer from high computational cost and production of unrealistic poses. In this work, a novel heuristic method, called Forward And Backward Reaching Inverse Kinematics (FABRIK), is described and compared with some of the most popular existing methods regarding reliability, computational cost and conversion criteria. FABRIK avoids the use of rotational angles or matrices, and instead finds each joint position via locating a point on a line. Thus, it converges in fewer iterations, has low computational cost and produces visually realistic poses. Constraints can easily be incorporated within FABRIK and multiple chains with multiple end effectors are also easily supported.

FABRIK has been in several game engines, including the Unreal Engine, Unity3D, and Panda. There are numerous videos available online explaining how to integrate FABRIK in different problems.

Making Kine more flexible:

FABRIK solution CCD solution FABRIK algorithm has been implemented within the Kine application [1]; Kine is a 2D real-time gaming application that initially has a kinematic chain with six joints. Kine allows you to interact with the IK solver; you click on the screen and the snake (the kinematic chain is drawn as a snake) moves to solve the IK problem. There is also an option where you click and drag on the screen and the snake tracks your mouse.

[1] Jeff Lander, Making Kine more flexible, Game Developer, Volume 5, Issue 3, pages 15-22, 1998

Kine has been adapted from the work of Jeff Lander. More information about Kine can be founded at Jeff Lander's website. We would like to express our enormous thanks to Jeff for giving us permission to use his code and application.

You can download and interact with the Kine IK solver here (.rar file). Use the "OPTION" tab to switch from FABRIK to CCD IK solver.


Final IK: A collection of Inverse Kinematics solutions for Unity3D

FABRIK algorithm has been also implemented as a plug-in within the Final IK collection [2]; the documentation for the constrained version FABRIK can be accessed here, and for the case of multiple chains here. You can access the asset store, in order to purchase the Final IK script for Unity3D, here.

Many thanks to Pärtel Lang.


Extending FABRIK with Model Constraints

We adjust FABRIK so as to be used in problems with leaf joints, closed-loop chains, to control a fixed inter-joint distance in a kinetic chain with unsteady data, as well as providing optimisation solutions when the target is unreachable. In addition, we present various techniques for constraining anthropometric and robotic joint models using FABRIK, and we provide clarifications and solutions to many questions raised since the first publication of FABRIK. Finally, a human-like model that has been structured hierarchically and sequentially using FABRIK is presented, utilising most of the joint models suggested in this paper; it can efficiently trace targets in real-time, without oscillations or discontinuities, verifying the effectiveness of FABRIK.


Open code Libraries

FABRIK has been implemented in several languages and stored in open source libraries, such as gitlab. For instance, CALIKO is an open source library that implements FABRIK in Java, and FULLIK is a conversion from java to Caliko 3D libs. Here, you can Lunch a Demo of FULLIK

The extended version of the FABRIK algorithm has also been integrated into FABRIC engine 2, and it has been uploaded into github.

In this thread in ROBLOX wiki explains step by step how to implement FABRIK.


FABRIK Inverse Kinematics Implementation in 3D with Joint Constraints


 [Back to top]