Because Contour Rig Tools does some things in ways that are non-standard for Maya, there are a few caveats that you’ll need to bear in mind when using Maya’s tools with Contour.

Overrides and constraints

Constraining to a joint with rotation overrides

Rig Tools joints, bones, and bone CVs are all custom transforms that calculate their own matrices. This allows features like Override Rotation, where instead of using the rotate values from the transform’s rotate attribute, the joint uses a different set of rotation inputs to calculate its matrix. This greatly simplifies some aspects of rigging.

This does, however, introduce an additional complexity—Maya’s constraints do not use the matrix of the transform constrained to (which is generated using the input values), but instead uses the values of the transform’s rotation attribute. So if you constrain to a Rig Tools joint, the constraint will use the rotation values present in the channel box, not the joint’s actual rotation.

In Maya 2020 and later, the simplest solution is to avoid constraints and use matrix nodes instead, plugging the result into the target node’s Offset Parent Matrix attribute. For users who are using earlier versions of Maya, or who aren’t familiar with Maya’s new matrix-based rigging workflow, there are a couple of simple workarounds.

One option is to constrain to a null that has been parented to the joint, instead of constraining to the joint itself.


Figure 1

This workaround is easy to set up, but adds an additional transform to the rig. A slightly more complex solution is to pipe the joint’s matrix into a decomposeMatrix node to extract its actual rotation. This rotation value can be plugged into a constraint, or used to drive the rotation of another node directly.


Figure 2

Connecting the output of a constraint into Override Rotation

Override Rotation is normally used to receive rotation values from Rig Tools IK systems, but you can drive it with any other source of rotation values. However, driving the Override Rotation attribute with the output of a Maya constraint causes Maya’s cycle check to incorrectly identify the result as a circularity. Since you don’t get the same error when connecting the output to the joint’s rotation attribute (which would be just as circular), this appears to be a problem with Maya’s cycle check.

To work around this, just create a null in the same parent space as the joint, constrain it normally, and connect its rotation to the joint’s Override Rotation attribute. This has the same effect, but does not cause a cycle check error.


Figure 3