<style> /* Overriding max-width for #doc within .ui-content.comment-panel */ .ui-content.comment-panel #doc, body.pretty-comment-panel #doc { max-width: 95%; /* Sets the maximum width to 100% of its parent */ } </style> # Bone and Pose Transforms ## Distinct Spaces * <font color="#9C693A">**World Space**</font>: duh. * <font color="#4A8BF2">**Object Space**</font>: Armature object space. * <font color="#D3B531">**Rest Pose**</font>: Orientation and offset based on bone head/tail positions alone. * <font color="#BD5557">**Transform Space**</font>: _Unconstrained_ pose based purely on loc/rot/scale in `bPoseChannel` * <font color="#56D3BB">**Pose Space**</font>: Final bone pose after applying constraints and drivers. ## Redundant space definitions "Bone Space" (`DNA_armature_types.h`) same as Rest Pose, but relative to parent bone. "Channel Space" was suggested as alternative to "Transform Space", but its legacy naming and easy to confuse with `bPoseChannel::chan_mat` which is Pose space (see below). ## Transforms between Spaces |DNA|RNA|Transform|Computed by| |-|-|-|-| |`Bone::bone_mat`|`Bone.matrix`|<font color="#D3B531">**Rest Pose**</font> rotation to parent <font color="#D3B531">**Rest Pose**</font> (i.e. "Bone Space")|`BKE_armature_where_is_bone`, recursively from root to children| |`Bone::arm_mat`|`Bone.matrix_local` (yeah it makes no sense)|<font color="#D3B531">**Rest Pose**</font> to <font color="#4A8BF2">**Object Space**</font>|`BKE_armature_where_is_bone`, recursively from root to children| |`bPoseChannel::chan_mat`|`PoseChannel.matrix_channel`|<font color="#56D3BB">**Pose Space**</font> to parent <font color="#56D3BB">**Pose Space**</font>|`BKE_pose_where_is_bone` initial value, `BKE_pose_where_is` finalized relative transform| |`bPoseChannel::pose_mat`|`PoseChannel.matrix`|<font color="#56D3BB">**Pose Space**</font> to <font color="#4A8BF2">**Object Space**</font>|`BKE_pose_where_is_bone`| |N/A :warning:|`PoseChannel.matrix_basis`|<font color="#BD5557">**Transform Space**</font> to parent <font color="#56D3BB">**Pose Space**</font> (?)|`BKE_pchan_to_mat4` calculated ad-hoc (same function used in `BKE_pose_where_is_bone`)| ## Constraint spaces See `BKE_constraint_mat_convertspace`. - World Space `CONSTRAINT_SPACE_WORLD`: <font color="#9C693A">**World Space**</font> - Pose Space `CONSTRAINT_SPACE_POSE`: <font color="#56D3BB">**Pose Space**</font> - Local Space `CONSTRAINT_SPACE_LOCAL`: <font color="#D3B531">**Rest Pose**</font> relative to parent (i.e. "Bone Space") - Local With Parent `CONSTRAINT_SPACE_PARLOCAL`: <font color="#D3B531">**Rest Pose**</font> relative to parent's parent - Local Space (Owner Orientation) `CONSTRAINT_SPACE_OWNLOCAL`: Custom object bone <font color="#D3B531">**Rest Pose**</font> - Custom Space `CONSTRAINT_SPACE_CUSTOM`: Custom object <font color="#9C693A">**World Space**</font> ## Driver transform spaces - `World Space`: <font color="#56D3BB">**Pose Space**</font> to <font color="#9C693A">**World Space**</font> - `Transform Space`: <font color="#BD5557">**Transform Space**</font> to <font color="#9C693A">**World Space**</font> - `Local Space`: <font color="#56D3BB">**Pose Space**</font> to <font color="#D3B531">**Rest Pose**</font>(uses constraint space conversion)