Skip to content

Discussion: Bone orientation including bone roll #4

@aaronfranke

Description

@aaronfranke

In sufficiently complex implementations, it is completely reasonable to expect a skeleton to be retargeted on import. Doing this operation has a variety of benefits, and is recommended for implementations to do.

However, that said, not all implementations are able to do this. Very simple metaverse implementations may lack the capability to retarget. To support these cases, we should, as part of Reference Canonical Skeleton Framework, define not only the names and positions of bones, but also the rotations of those bones. This allows simple implementations to only worry about setting bone rotations without performing complex retargeting. However, aside from supporting such applications, it is still a generally useful concept to define a single recommended set of bone orientations.

In every application I have seen, bones "point" in their local +Y direction. Runtimes often don't really have this concept cemented inside them, because they just deal with transforms, but any time a tool does care about bone direction, it's +Y. This is even consistent across coordinate systems, in Y-up applications unrotated bones point up, but in Z-up applications, bones still point in the +Y direction, so they're horizontal.

For the hips/spine/chest/neck/head/eyes, the bone orientation is straightforward: these already point up, so they match up perfectly with an unrotated glTF node. For the rotation matrix of these bones, +X can point in the +X direction, +Y can point in the +Y direction, and +Z can point in the +Z direction, with minor perturbations to make the bones point in slightly different directions.

What I have seen as more conflicting is the roll orientation of the arm and leg bones. Mixamo and Ready Player Me skeletons have their arms rolled such that their local +Z direction points down towards the hips, and have their legs rolled such that their local +Z direction points forward. Thus, for the upper arms, upper legs, and lower legs, the rotation around the local X axis serves as the primary rotation.

Image

However, I have also seen avatars which do the polar opposite, with for example the legs having their local +Z direction pointing back, and I believe I've seen other rolls as well. One interesting fact is that, relative to a glTF-unrotated bone (pointing up), the Mixamo/RPM leg bones are effectively rolled 180 degrees around the Z axis, thus flipping the X and Y axes, while if the Z was pointing back as I've seen on some other avatars, those bones are effectively rolled 180 degrees around the X axis, thus flipping the Y and Z axes.

Which system is better, or the most common, or worthy of becoming the standard? I don't know, thus I am opening this as a discussion rather than a proposal. Is there any existing standard which these avatars follow, or are we just witnessing a wild west of character/avatar bone rolls because nobody has defined a standard yet? I'm not sure, but it would be worth doing research into this. I have not yet found evidence of a commonly accepted industry standard for bone roll.

Regardless, there is just one statement I want to declare, which is that we should define something as the recommended roll orientation for all the bones. If we do not standardize bone roll now, it becomes harder later, because it invalidates previously-compliant existing models which don't match up with the new specification.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions