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

  1. How can I set the scale property? Since the local-to-parent for an edit bone has AFAICT always a unit scale.
  2. 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.

Thank you.


Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.