<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)