Drivers can't read local space properly (like constraints can)?

In 2.55 beta:

When setting up constraints in an armature, I sometimes prefer to use drivers to return values rather than the usual constraint ranges – this allows me to use asymmetrical range values for the target bones, among other benefits.

When constraint targets are set for Local Space, their values can be read and used even when they are also under constraint. For example, the Local Space rotation of a bone under IK constraint can be used to constrain another bone’s location, using a Transform Constraint.

But if you want to use a driver for one of the Transform Constraint’s owner values, you can’t use the target’s Local Space if it’s under constraint – when “Local Space” is enabled in the driver and a rotation transform channel is read via a variable, the driver returns a value of zero for all rotations of the constrained target bone (such as the IK-constrained bone mentioned before).

This seems like a discrepancy – the Constraint can read a Local Space rotation of a constrained bone, but the Driver cannot, yet both are used in similar fashion to return values for use by the constraint owner. Should this be considered a bug? It definitely limits & complicates use of drivers in constraints; using World Space means that you have to compensate for the entire rig’s orientation when calculating the target bone’s rotation, rather than using the rotation relative to the armature (Local Space).


That was helpful, thanks. Using the same label with different definitions is confusing, however – “Local Space” in one context should have the same meaning as in another context, rather than “Local Space [after certain evaluations]” and “Local Space [before certain evaluations]”. Unless you know the innards very well, it’s all too easy to get confuzzed.

The Rotational Difference variable type seems more useful for my purposes than Transform Channel. Thanks for explaining that and the other types, the info is very useful.

Very handy info that… still is a bit confusing. Been setting up car rig. I rotate the wheels via a driver using a custom speed property and adding the delta rotation to the wheels. After reading this i changed the driver to atan(tan(rot+drot)) which confined the rotation to between ± 180 degrees, works a treat. Thanks.