Full Body IK

Build next-generation realtime Full Body IK systems with FBIK.

Windows
MacOS
Linux

The Full Body Inverse Kinematic (FBIK) feature for Unreal Engine 5 Early Access allows you to construct IK in Control Rig with a high degree of control and flexibility. This document provides an overview of how to create a FBIK node, configure it's options to achieve your desired pose, and provides a node reference.

Prerequisites

  • FBIK is a node within the Control Rig Graph, therefore you should have a moderate understanding of the Control Rig Editor and featureset.

  • You must enable the FullBodyIK plugin. To do this, navigate in the Unreal Editor menu bar to Edit > Plugins and search for FullBodyIK. Ensure the plugin is enabled and restart the editor.

    image alt text

  • You have imported a Skeletal Mesh Asset into your project.

Creation and Setup

To start, create a Control Rig asset for your Skeletal Mesh Asset. Do this by right-clicking on your Skeletal Mesh Asset and selecting Create Control Rig. This will create a new Control Rig Asset with your skeletal mesh already assigned. The Asset will automatically name itself after the Skeletal Mesh with the suffix _CtrlRig.

create control rig

Once created, double-click on the Control Rig Asset to open it.

Next, create the FBIK node. In the Control Rig graph, right-click and in the context menu select Hierarchy > Full Body IK.

create pbik

In the Rig Hierarchy panel, create some controls for your IK end effectors. In this example, controls are created for the Left Leg, Right Leg, and Head bones. Locate the desired bones, right-click them and select New > New Control.

create controls

You can rename your controls to better identify them by double clicking on the text and typing in the name.

rename controls

Make sure your controls are unparented from the Skeleton hierarchy. To do this, right-click the Control in the Rig Hierarchy and select Unparent.

unparent controls

Next, reference the controls into the Control Rig Graph by dragging and dropping the controls from the Rig Hierarchy panel to the Rig Graph panel, then selecting Get Control.

get control

Now, on the Full Body IK node, set your Root bone. In this example a relatively simple FBIK system is being created between feet and head, so it would be best to choose the Hips or Pelvis to be the Root

pbik root bone

Press the Add button next to the Effectors array to add new effector pins to your FBIK node. Do this for each control. Within each Effector, set the corresponding Bone value for each control. In this example, Head_CTRL is the control for the head bone, and so forth. Once set, hook the Transform pins from the controls to their respective Effector Transform pin.

pbik effector

You should now have a rudimentary FBIK setup for your character. Feel free to manipulate the controls within the Control Rig viewport to see the results.

position based ik

Bone Settings

You might notice that the IK behavior is not behaving the way you intended. This might be because certain bone settings are not set. Bone Settings are another array element within the Full Body IK node, and are used to control the behavior of each bone that FBIK is affecting.

In the earlier example, the following issues are visible:

  • The hips are rotating and translating too aggressively.

    pbik hip problem

  • The legs are not rotating enough.

    pbik leg problem

  • The ankle is rotating too far upward, causing an unrealistic pose.

    pbik ankle problem

Bone Settings can be used to resolve issues like these, in order to best support your preferred IK setup.

Rotation/Position Stiffness

Rotation and Position Stiffness properties are used to control how much a bone in the IK Chain can be affected by the controls and effectors.

fbik stiffness

In this example, they can be used to address issues seen in the hips. Start by creating a new Bone Setting by pressing the Create button next to Bone Settings. After it is created, assign the pelvis bone to the Bone entry.

Below the Bone entry are the properties for Rotation and Position Stiffness. Use these properties to change the amount the pelvis bone will be affected by the movement of the controls. The range is 0-1; a value of 0 is completely free, whereas a value of 1 is completely locked down.

In this example a value of 0.8 will provide a good amount of stiffness. Once you have entered your stiffness amount, manipulate the controls to see the result.

pbik stiffness

Preferred Angles

Preferred Angles can be used in order to suggest joints rotate along a specific axis to reach the effector.

In this example, you can use Preferred Angles to address the issues seen in the legs. Start by adding a new Bone Setting by pressing the Create button next to Bone Settings. After it is created, assign the calf_l boneto the Bone entry.

create bone setting

Near the bottom of the new Bone Setting entry are properties for Preferred Angles. Make sure the box for Use Preferred Angles is checked.

Next, expand the Preferred Angles property. This is where you will input your angles of rotation. The size of a number impacts the strength of the preference, so you should keep numbers between 0-90.

image alt text

Depending on your content setup, your input here might vary from the example. The example mannequin's foot should bend along the Z axis in a positive direction, therefore for this example a value of 45 will be set on the Z property. Once you have entered your angle preference amount, manipulate the controls to see the result.

pbik preferred angle

Limits

Limits can be used to limit the range of, or completely lock, the rotation of bone axes along the IK chain.

In this example, you can use limits to correct the ankle bone bending in an unrealistic manner. Start by adding another Bone Setting by pressing the Create button next to Bone Settings. After it is created, assign the foot_l boneto the Bone entry.

pbik bone settings

The limit settings are located between the Stiffness and Preferred Angles properties.

pbik limit settings

Each axis has settings that allow for Free movement, Limited movement within a range, or Locked which disables movement on that axis. If Limited is chosen, then the Min/Max properties are used to define the range of movement.

To correct the ankles rotating too much along the Z axis, set a value of -70 for Min Z and 70 for Max Z, then set the Z axis to Limited. Once you have entered your limit amount, manipulate the controls to see the result.

pbik limit settings

Node Reference

image alt text

Pin/Setting Name

Description

Root

The root bone to be specified for the IK chain.

Effectors

Bone

The end point bone to be specified for the IK chain.

Transform

The transform to use to control the end point bone. Typically this is provided by a Get Transform node linked to a Control that shares the same transform information as the end point bone.

Offset Alpha

This property weights the ability for the effector/bone to reach the target control or transform. At 1, the effector does it's best to reach the target transform, at 0 the effector remains at the input pose.

Strength Alpha

This property affects the strength of this effector's influence on the IK chain. At 0, the effector will not pull the chain towards it and other effectors will take precedence.

Bone Settings

Bone

The Bone these settings are applied to. Can be any Bone in the hierarchy between the Effectors and the Root.

Rotation/Position Stiffness

The amount of stiffness to apply to a bone on either rotation or translation. A value of 0 allows for full free movement, whereas 1 will completely lock down the bone.

XYZ Limit Setting

A drop-down menu to choose the type of allowed movement on the selected bone's axis. Free allows for full movement, Limited allows for movement within a specified range, and Locked will disable the axis from moving.

Min/Max XYZ

If Limited is specified as a Limit Setting, the Min/Max XYZ properties are used to specify the range of movement allowed.

Use Preferred Angles

A checkbox to enable the Preferred Angles feature for the selected bone.

Preferred Angles

Specify how much the Bone should rotate, in each axis, as the chain is squashed.

Settings

Iterations

Increase this value until the effectors converge on their desired goal locations. Iterations increase the CPU cost of the solver, so keep this as low as possible. The introduction of Stiffness, a high Mass Multiplier and Rotation Limits can all affect the convergence rate and necessitate more iterations.

Mass Multiplier

This is a global value that affects how much the bones resist rotations and translations. Typical values range between 0.0 and 5.0 with 0.0 being totally loose and 5.0 being very stiff. Higher Mass Multiplier values require more iterations to achieve convergence.

Allow Stretch

Enabling this will cause bones along the IK chain to translate to reach their effector. Stiffness values affect this result.

Pin Root

Enabling this will pin the translation of the root bone to the original pose. Rotation will still be affected.

Debug

Draw Scale

Multiplier that controls size of debug lines.

Draw Debug

Enable this to show all affected bones along the IK chain of this FBIK node.