My understanding is that the local-to-parent TRS for a bone in the rest pose is determined by the head/tail/roll of its edit bone
- T is determined by the difference between its head and its parent's head.
- R is determined by the direction of the bone (giving the direction of the local Y-axis) and the roll (giving the direction of, say, the Z-axis). The length of the bone does not appear to have any effect.
- S is always the unit scaling.
Then when the bone is posed, its final local-to-parent transform is calculated as
(edit bone TRS) (pose bone TRS)
where the pose bone has normal translation/rotation/scaling properties. (Please correct me if any of this is wrong.)
I have data that has a tree of joints with their local-to-parent transforms in TRS format that I want to import into Blender. I have the following questions about converting this to head/tail/roll
- How can I set the scale property? Since the local-to-parent for an edit bone has AFAICT always a unit scale.
- Can I choose the way a bone points? Because the direction a bone points appears to be determined by the local-to-parent I want it to have (only the length can be chosen freely), and I might want the make eg. a shoulder bone point to an elbow, regardless of whether this is the direction of its +Y-axis.
How, for example, does the COLLADA importer do it? I know COLLADA joints can have scalings, and the importer lets you choose which way bones point.
Should I be setting properties on the Bone instead of the head/tail/roll on the EditBone? Also any clarification on the Bone/EditBone/PoseBone distinction would be appreciated.