Humanoid Overview¶
Overview¶
VRM humanoid is compatible with the motion of MotionCapture’s FK (Forward Kinematics).
The motion for one frame has the information described below:
The Translation for Hips bone
The Rotation for each bone
To reproduce the same pose in the Unity Scene (transferring data to a GameObject containing humanoid structure), the following conditions need to be satisfied:
Each bone (hips, spine, chest…) corresponds to its humanoid skeleton in GLTF Node (Unity GameObject)
The Bones’ parent-child relationships are known.
T-Pose must be the initial pose
Note
If the ratio (e.g. crotch - knee - ankle) is uncommon, the same pose cannot be reproduced.
The creation of humanoid avatar is pretty much the same as the original:
https://docs.unity3d.com/Manual/AvatarCreationandSetup.html
In addition, to make it easier to handle in the program, VRM Humanoid has the following features:
For the initial pose, all the Gltf Nodes (Unity GameObject) have no rotation
No scaling changes
.
Note
In particular, scaling is a difficult problem, and creating a program that considers non-origin scales, negative scales, and individual XYZ scales can be a heavy burden.
T-Pose¶

T-Pose example¶
Palm faces downward,
and it is parallel to the ground along x axis
Thumb is parallel to the ground half way 45 degrees between x and z axis (the perspective view from the top)
Unity Humanoid¶
In Unity, there is an object called Avatar
, which can be used to set up the model in humanoid mode.Since the Humanoid Avatar settings are part of fbx importer
, basically the model with Humanoid Avatar from data other than fbx cannot be created.However, we can still create the Humanoid Avatar via program. See humanoid component.
Compatible with BVH¶
Compatible with BVH that has the initial pose as T-Pose
.
Substitute the translation value into hips
Substitute the relative rotation value into its child
Details¶
For the list of human bones, please refer to:
https://docs.unity3d.com/2019.4/Documentation/ScriptReference/HumanBodyBones.html
.
Target nodes not containing skinning (GLTF skin, joint and Unity SkinnedMeshRenderer, etc.) can be selected
All required bones must be included
The Bone’s parent-child relationship follows the humanoid definition (The first ancestor bone found in LowerLeg is UpperLeg etc.)
The parent-child relationships for hips as root are described below. Bones that are in parentheses are non-required bones (optional):
hips - spine - chest - (upper chest) - neck - head
[Branch] from head - left - (eye)
[Branch] from head - right - (eye)
[Branch] from chest or upper chest - left - (shoulder) - upper arm - lower arm - hand - (fingers)
from chest or upper chest - right - (shoulder) - upper arm - lower arm - hand - (fingers)
from hips - left - upper leg - lower leg - foot - (toes)
[Branch] from hips - right - upper leg - lower leg - foot - (toes)
Inserting non-bone objects between humanoid bones is allowable (e.g., LowerLeg’s parent is a Cube GameObject and this Cube’s parent is UpperLeg, etc.)
Non-required bones can be skipped (UpperArm’s parent can be chest instead of shoulder)
Related Issues¶
https://github.com/vrm-c/vrm-specification/issues/87