Page MenuHome

Gimbal/Normal Rotation of bones does not work as expected on bones that have Child Of Constraint
Closed, ArchivedPublic


Version: 2.73 (Linux 64-bit)

How to reproduce:

  1. Open the attached .blend file and inspect the bone chain.
  2. Notice that the root bone is rotated 45 degrees, and that the distal bone inherits its rotation from a Child Of constraint.
  3. Try rotating the distal bone on one local axis, either by pressing R, [XX, YY, ZZ] or by using the rotator widget in gimbal or normal mode.
  4. Notice that the bone does not rotate on one axis as one would expect it to. Sliding the numeric rotation values still works.

It is useful in rigging to use a Child Of constraint to make a bone inherit its rotation from a bone other than its immediate parent (often one further up the bone chain). However It appears that the Gimbal/Normal transform does not take into account the visual transform created by the Child Of constraint. Weirdly, turning on the Location axes for the Child Of constraint seems to solve this problem, however this makes no sense and can cause separate issues for unconnected bones.

How can this be solved?

Example File:



Event Timeline

Sam Brubaker (rocketman) raised the priority of this task from to Needs Triage by Developer.
Sam Brubaker (rocketman) updated the task description. (Show Details)
Sam Brubaker (rocketman) set Type to Bug.

This is caused by rB61d14774150. I don't know much about this rigging stuff, but it seems that the current behaviour is exactly what is wanted and the mentioned commit makes sure this is the case, or this is just one of the corner cases/limitation which can't be handled correctly, as Bastien described in the commit log. So the Oscar goes to @Bastien Montagne (mont29) :) He should know how it's supposed to work.

Julian Eisel (Severin) lowered the priority of this task from Needs Triage by Developer to Normal.
Bastien Montagne (mont29) closed this task as Archived.Feb 23 2015, 7:32 PM

That kind of stuff is just not supported when using partial parenting… Our constraint system needs a complete rework, this is an old known TODO, currently is is just not always possible to get a valid inverse of constraint's transform in complex spaces/transformations (we'd need a dynamic callback, instead of a mere static matrix). As we saw here with rB61d14774150, fixing one case breaks another one…