Robert Tamayo


Animation Debugging: The Floor Should Be the Root Bone

I had set up inverse kinematics for my rig by following along with Imphenzia's YouTube videos. Everything was working perfectly. However, when I went to import the model into Unreal Engine, I was getting errors about there being multiple "Root" bones. To resolve this, I set my Inverse Kinematics (IK) Target and Pole bones to have the Root bone, located at the pelvis, as their parent. After doing this, everything imported into Unreal successfully, but there was a subtle problem.

The Problem

After making the IK bones children of the Root bone, the legs of my character stopped "connecting" with the floor. Now, the idle animation just showed my character floating up and down slowly, moving in and out of the ground. His knees weren't bending at all, so it looked a little weird. I thought about the problem for a while and tried to reconnect the bones to different parents, but nothing worked. 

I realized that the reason this was happening was that the Root bone was now affecting the position of the IK bones; moving the Root bone downwards also moved the IK bones downwards, and so no knee bending was required.

The Solution

I reasoned that the pelvis bone was not the ideal position for a Root bone. Instead, I needed the True Root bone to be located at the ground. I remembered seeing something like this in Unreal Engine's mannequin skeletal mesh last year. Unreal's mannequin skeleton has these weird lines pointing to the ground from the characters hands and feet. When I encountered this problem, I suddenly realized why the mannequin's skeleton was rooted to the ground.

To solve: I created a new bone and called it FloorBone, and I placed it at the ground level. Then I made it the parent of the IK bones. After that, I made the Root bone (pelvis bone) a child of the FloorBone. Now the Root bone was still the parent of every other bone in the armature, but it was not the parent of the IK bones. The IK bones would now respond to movement of the Root bone, and everything would still have 1 Root bone (now the FloorBone) when imported into Unreal Engine.

Here's a visual of the solution:

Leave a Comment