So a node can be of type=NODE or type=JOINT.
For an importer I am using type=JOINT to create a specific bone class when traversing the <visual_scene>.
However it also seems to be allowed to specify nodes of type=NODE and refer to them in the joints array (example TurbochiFromXSI.dae).
It even seems to be allowed to build a joint hierarchy with nodes of type=JOINT and type=NODE mixed (astroBoy_walk.dae).
So what is the use of specifying type=JOINT for a node?
As far as I am aware, the purpose of specifying the type value of JOINT for a node is to represent the joint structure used in a skeleton for skinning.
// rant start …
I have noticed myself when trying to export from max that animated skeletal meshes alone (without skinning) do not cause the skeletal structure using the JOINT type to be created (instead, only named nodes are represented in visual scene).
I do think you’ve got a good point regarding the use of the JOINT node. It woud be nice to see support for the <skeleton> element (thus, use of JOINT nodes) in <visual_scene> without the requirement of a skinned mesh.
// … rant end
The <node> type attribute is meta data used by DCC tools for UI purposes. I.e. they want to render the joint space using axis annotations or attach controls to it.
A <node> element is always a local coordinate system and the transformations are always processed uniformly. A <node> is not a “thing” rather it’s a “place”.