Detached Hands with Humanoid Control

Humanoid Control supports full body avatars, but sometimes you just want to use hands. This article explains how you can use rigged hands without a body.

The Hands

In this article we we the hands provided in the Leap Motion Core Assets. These rigged hands called LoPoly_Rigged_Hand_Left and _Right and can be found in the LeapMotion/Core/Models/ folder of the Core Assets package.

Humanoid Control

To setup our tracking in the scene, we create a new Empty GameObject with the name Humanoid and we add the Humanoid Control component script.

For this example we are going to use a Leap Motion camera placed on the table, so we enable Leap Motion in the Humanoid Control component. Of course you can use this with any available hand tracking device such as Oculus Touch, Razer Hydra or SteamVR controllers.

Now we add the two LoPoly_Rigged_Hand_… models as a child of our Humanoid.

Unfortunately, we still see the warning that no suitable avatar could be found.

This is because the hands are not recognized by the scripts automatically, so we need to do this manually in the Hand Targets.

Hand Target

The easiest way to do hand configuration is to make the Hand Targets visible in the scene hierarchy. For this, we expand the Targets section in the Humanoid Control script and click on Show for each Hand Target.

Now you will see the Hand Targets in the hierarchy.

Hand Target Configuration

Starting with the Left Hand Target, we expand the Configuration section in the Hand Target component.

You see that all bones are set to None (Transform) because the bones have now been detected automatically.

As we are using detached hands, we do not need to set the Shoulder, Upper Arm and Forearm Bones. Only the Hand Bone is of importance here.

We set this parameter to the L_Wrist transform which is the first child of the LoPoly_Rigged_Hand_Left GameObject.

If we now hit Play you will see that the hand is tracked, but the fingers are not being tracked yet. Next to that, the hand orientation is wrong. This is because the scripts cannot determine the orientation of the hand model. For this it needs the finger configuration too.

Finger Configuration

For the finger configuration we need to expand the Configuration->Fingers section in the Hand Target component.

Here we need to assign the proximal bones of all digits. This is the first bone of a finger which is not inside the hand palm. Some rigged hand models have metacarpal bones which are inside the hand, other rigs do not have these bones.

In the case of the LoPoly_Rigged_Hand models, we do have metacarpal bones. So we need to look for the bone which is at the base of the finger. In case of the index fingers, this is L_index_a which is found as a child of L_Wist->L_Palm->L_index_meta.

We assign this to the Proximal Index Bone of the Hand Target Fingers Configuration. In the same way we assign L_thumb_a to the Proximal Thumb Bone, L_middle_a to the Proximal Middle Bone, L_ring_a to the Proximal Ring Bone and L_pinky_a to the Proximal Little Bone.

If you hit Play now, you will see that the hand is fully tracked.

To complete the setup, you need to do the same for the right hand.