I’ve read a tutorial that states it is the first item listed in a <skeleton> element, but that doesn’t seem to be the case (OpenCOLLADA exporting from Maya simply lists skin affecting bones alphabetically…)
What is currently the accepted method of identifying the root bone of a skeleton - is it the first SID found in the joint name array? (Seems usable in the sample files I have seen and am able to generate, but doesn’t seem to be something 100% reliable.)
Roots can be any node from the (set of) JOINT inputs. It can be indicated by id, sid, or name attributes, e.g. sid=“Root”, or positionally as the base node of each independent node hierarchy that comprises the total skeleton.
That was what I expected except that in COLLADA’s own sample files, astroboy_walk.dae, the skeleton base node is named “deformation_rig” and the immediate child of that node is named “root” - so initially I had figured it was just a joint of type ‘NODE’ instead of type 'JOINT" and didn’t affect the skin; however, it didn’t contain translation information, just orientation data (unlike all the other joints of type ‘NODE’ or type ‘JOINT’) so it seems to be a special case.
Am I supposed to treat “deformation_rig” as the root node of the skeleton (even though its child is named “root”) and compute its inverse bind pose matrix…?
It’s confusing that the joints in the skeleton affecting the skin have inverse bind pose data, but the joints that make up the hierarchy that don’t affect the skin don’t, but they have to have that data anyhow so presumably we calculate it ourselves…
Is this something that was addressed in 1.5 COLLADA? All joints in the hierarchy must have inverse bind pose data whether they affect the skin or not?
No. If a node is not referenced by the skin controller as a joint, then it’s not an influence on the skin.
All node transforms are local so it doesn’t matter if the parent node is an influence on the skin or if its in its bind pose or not. I think the confusion is regarding the local coordinate systems of COLLADA nodes vs world space skinning. The specifications try to explain this (e.g. pg 39 in the 1.5 spec) topic.
No, it’s the same. Why do you make that last assertion?