I’m finishing off a complex human-figure armature with a lot of “specialty” bones to account for muscle flex effects. It’s all working fine, except for one instance where I used a Copy Rotation constraint on a bone so it would follow an adjacent bone’s rotation on one axis (X).
With the armature oriented at Z rotation = 0, the constrained bone follows the target’s rotation perfectly. However, if I rotate the armature 180deg in Z, the contrained bone flips 180 out of phase with the target bone, which does not show any change in rotation other than being carried along with the armature. After playing with the setup a bit, I found that there’s actuallly only a range of rotations for the target bone, where the constrained bone will flip out of phase, and that range depends on the Z rotation of the armature, e.g., if the armature is at Z=180deg, the constrained bone will flip when the target is at 0 to 40deg, but if the armature is at Z=170deg, the flip only happens at 20 to 60deg target rot’n (figures aren’t actual but illlustrate the point).
So where does the constraint obtain the target object’s rotation, especially for a bone as target? It’s not the bone.quat value (doesn’t exist for bones under IK control, though the constraint still works), and it doesn’t seem to correspond to any of the accessible rotation matrices (ARMATURESPACE, BONESPACE, poseMatrix, or matrixWorld).