Bone orientations don't match mesh

I am working on adding animation support to our GLTF loader. In this model, the starting positions of bones are shown with blue spheres. I recognize the pose as part of the running animation. (The character is leaning forward and holding a gun.) The model loads and animates correctly in the Windows 3D object viewer.

anim

Why doesn’t the starting bone orientation match the model pose?

How was the model created? This seems like a question (or perhaps a bug) related to that software. The glTF file format doesn’t specify “all bones must begin in a running position” or anything like that. :wink:

I used the Facebook FBX to GLTF converter. As I said, the model loads fine in the Windows 3D object viewer, so I am assuming the model is correct.

Can you tell what the initial positions of the bones are in the Windows 3D viewer? When you say “starting positions of bones” I assume that means when ignoring any animations in the model, and not displaying, for example, the first frame of the first animation? Note that the animation playing back correctly doesn’t necessarily mean the bone starting positions aren’t the same in that viewer.

This question seems to depend mostly on the model and perhaps the software… By all appearances, yes, the bones are starting in a non-tpose position. Without knowing how the model was made, I can’t tell you how the bones got there… maybe it’s the same in the FBX? Made it’s a bug in the FBX2glTF converter? Maybe a bug in your viewer? There’s a lot of missing information needed to debug this sorry.

I said that the Windows 3D object viewer application animates it correctly, so we can assume there is nothing wrong with the model. The question is why would the default position of the bones (without animation) not be in a T-pose to match the mesh? I have written importers for probably a dozen different model file formats, and have never seen anything like this. There must be something “clever” GLTF does here that no one is telling me.

By Jove I’ve got it.

tpose

In plain English, the skin inverse bind matrices are the bone global matrices for the weighting pose, inverted.

Thanks for trying to help.

Just for completion, this is the pose I was trying to load, now working.