On this page

Constraints create relationships between controls, where the constrained (driven) control is affected by the position or movement of the driver control. The following types of constraints are available in the animate state:

There is also a special type of constraint called a transient constraint, which is only active within a frame range. All of the above constraints can be added as transient constraints.

Offset constraint

Offset constraints keep an offset between the driver and driven controls. In this example, we constrain a guitar (driven) to Electra’s cog (driver). We start with a scene that contains animation only on Electra:

Original animation. Guitar model from KitBash3D.
  1. In the animate state, bring up the parameters HUD (press G over the viewport).

  2. In the Constraint tab, set Constraint to Offset.

  3. Select the guitar’s control.

    Note

    The two parameters below the Constraint parameter show the order in which to select the controls. For offset constraints, select the driven control, then the driver. If you select more than two controls before pressing H, the last selected control is the driver, and all the other controls are driven controls.

  4. Hold ⇧ Shift and select Electra’s cog control.

  5. Hover over the viewport and press H. A constraint is added and the driven control turns gray. A dotted line appears with an arrow pointing from the driver to the driven control, and you will not be able to move the guitar control because it is now constrained to Electra’s cog.

    Guitar constrained to Electra’s cog
  6. We want to constrain Electra’s left hand to the neck of the guitar. To do this, first create a locator on the neck of the guitar:

    • Enter the locator tool.

    • Press H over the viewport to create the locator.

    • Position the locator at the neck of the guitar.

      Note

      If you are working with animation layers, the locator needs to be added to the current layer before you can move it. Select the locator, go to the animation layers pane, click the layer, and select Add Selected Controls to Layer.

    • Exit the locator tool.

    Locator on the neck of the guitar
  7. Constrain the locator to the guitar so that as the guitar moves, the locator stays at the neck of the guitar. Select the locator, hold ⇧ Shift, select the guitar control, and press H over the viewport.

    Locator constrained to the guitar
  8. Constrain Electra’s hand to the locator - select Electra’s hand, hold ⇧ Shift, select the locator, and press H over the viewport.

    Electra’s hand constrained to the neck of the guitar
  9. Rotate Electra by setting keys on her cog control.

    Note

    If you are working with animation layers, the cog control needs to be added to the current layer before you can set keys on it.

    Rotate Electra
  10. The strumming hand doesn’t follow the guitar after rotating Electra, so constrain Electra’s hand to the guitar control with a parent constraint. This way, as the guitar (driver parent) moves, Electra’s strumming hand (driven child) moves with it:

    • Select Electra’s right hand control.

    • Hold ⇧ Shift and select the guitar control.

    • In the parameters HUD, Constraint tab, set Offset to Parent.

    • Press H over the viewport.

    Electra’s strumming hand follows the guitar

We now have the following constraints added to the scene:

  • The guitar is constrained to Electra’s cog.

  • The locator on the neck of the guitar is constrained to the guitar.

  • Electra’s left hand is constrained to the locator.

  • Electra’s strumming hand is constrained to the guitar.

    Offset constraints

Animate the offset between the driver and driven controls

When you create an offset constraint, a control named <control>__Offset is created. This control represents the driven control’s offset from the driver, and it can be animated. The offset control is positioned at the driven control, but is a separate control from the driven control. The offset control is represented as a green sphere:

Locator offset control on the neck of the guitar

In this example, we want Electra’s hand to move along the neck of the guitar, so we set keys on the locator offset control (Electra’s hand is constrained to the locator, so moving the locator also moves Electra’s hand).

The locator is constrained to the guitar, so the locator offset control represents the offset between the guitar and the locator. In our example, the locator offset control is named Locator_0__Offset, and it appears in the selection sets under All Controls ▸ constraints ▸ Locator.

  1. Select the locator constraint in the selection sets, All Controls ▸ constraints ▸ Locator. Making this selection “focuses” on the constraint so that keys can be set on the constraint’s offset control.

  2. Set keys to move the locator offset control up and down the neck of the guitar.

    The animation on the offset control lives on the constraint and not on the locator’s control. Any animation that was originally on the locator is overridden by the constraint. If you turn off the constraint, you are left with the original animation on the locator.

    Note

    If you are working with animation layers, the offset control needs to be added to the current layer before you can set keys on it. In the animation layers pane, click the layer and select Add Selected Controls to Layer.

    After animating the offset control
  3. To blend between the offset control animation and the original animation:

    • Select the locator constraint in the selection sets, All Controls ▸ constraints ▸ Locator.

    • In the parameters HUD, Constraint tab, adjust the Blend value.

    Note

    If Blend is set to 0, you can move the driven control.

Add keyframes on the driven controls

At this point, all the added motion on the guitar and Electra are driven by the constraints. If the constraints are removed, we are left with the original animation on Electra.

To keep the added motion on the guitar even if the constraint is removed, set keyframes on the guitar:

  1. Select the guitar control.

  2. Press Ctrl+G to bring up the settings HUD.

  3. In the Bake tab, click Bake Keys. If Bake to New Layer is turned on, the keys are added to a new animation layer. If Bake to New Layer is turned off, the keys are added to the current animation layer.

See the baking settings for descriptions of the available options in the Bake tab of the settings HUD.

Lookat constraint

A lookat constraint allows an object to follow the path of another object. In this example, we add a lookat constraint to keep Electra looking at Flip.

  1. Aim Electra’s head toward Flip.

  2. Bring up the parameters HUD (press G over the viewport).

  3. In the Constraint tab, set Constraint to LookAt.

  4. Select Electra’s head control.

    Note

    The two parameters below the Constraint parameter show the order to select the controls. For lookat constraints, select the driven control (Electra’s head), then the target (Flip).

  5. Hold ⇧ Shift and select Flip’s control.

  6. Hover over the viewport and press H. A constraint is added and the driven control turns gray. A dotted line appears with an arrow pointing from the target to the driven control.

    Create a lookat constraint
  7. A control named <driven_control>__Target is created, and this is the control that the driven object looks at. You can move the control away from the target object, which provides more flexibility on where Electra is looking:

    Electra looks at the target control

    The <driven_control>__Target control appears in the selection sets under All Controls ▸ constraints. The control is parented to the target object and can be animated.

Multidriver constraint

You can set a control to be driven by multiple drivers using a multidriver constraint. In this example, we constrain Flip to both of Electra’s hands:

  1. Bring up the parameters HUD (press G over the viewport).

  2. In the Constraint tab, set Constraint to MultiDriver.

  3. Select Flip’s control.

    Note

    The two parameters below the Constraint parameter show the order to select the controls. For multidriver constraints, select the driven control (Flip), then the driver controls (Electra’s hands).

  4. Hold ⇧ Shift and select Electra’s two hand controls.

  5. Hover over the viewport and press H. Constraints are added between Flip and Electra’s hands.

    Create a multidriver constraint

Pin constraint

A pin constraint allows you to keep a control at a certain position. A pinned control will not move, even if you move its parent control.

  1. Bring up the parameters HUD (press G over the viewport).

  2. In the Constraint tab, set Constraint to Pin.

  3. Select the control(s) to pin.

  4. Hover over the viewport and press H.

    Create a pin constraint

Transient constraints

A transient constraint is a special type of constraint that is only active within a frame range. Transient constraints differ from regular constraints in the following ways:

  • When a transient constraint is created, keyframes are automatically written out for the driven object within the constraint frame range. A bookmark is also created on the playbar timeline to identify the frame range during which the constraint is active.

  • The driven object can be moved around freely.

  • Transient constraints only apply in the animation layer in which they are created. Regular constraints apply regardless of the layer you're on.

In this example, we transfer the ball from one hand to another. The original animation is shown below:

Original animation
  1. Constrain the ball to the hand:

    • Select the driven control (ball), hold SHIFT, then select the driver (hand).

    • On the timeline, select the range of frames to make the constraint active (hold SHIFT and drag along the timeline).

    • Hover over the viewport and press H.

    A constraint is created between the ball and the hand, and keyframes for the ball are added to every frame in the selected frame range.

    Note

    The constraint behavior is only active within the transient constraint frame range.

    Constrain the ball to the hand

    An arrow visualizer shows the constraint relationship between the ball and hand:

    Transient constraint visualizer
  2. Fix the position of the ball on the hand.

    Once the transient constraint is created, the driven object (ball) can be moved around and the changes are automatically applied to the entire frame range that the transient constraint is active. Make sure you are currently within the frame range that the transient constraint is active, or the changes will not be applied to the entire frame range.

    Note

    If the changes are not applied to the entire transient constraint frame range, make sure that Auto Update Follow Ranges is turned on in the settings HUD, Constraint tab.

    Move the driven object (ball)
  3. Constrain the ball to the other hand:

    Ball contrained to both hands at different frame ranges
  4. Fix the ball on the second hand:

    Fix the ball on the second hand
  5. Fix the pop on the animation as the ball transitions from one hand to the other:

    Animation pop
    • Select the ball (driven object).

    • Click in the timeline so that the current frame is within the frame range of the first transient constraint.

    • In the settings HUD, Constraint tab, click the button. This updates the offset on the ball to match the frame after the current constraint range so that there is a smooth transition between the current range and next range.

    Smooth out the transition between constraint ranges
  6. Fix the hand (driver) in the first constraint range without moving the ball. Select the hand, hold ⇧ Shift + H, and adjust the hand:

    Adjust the hand

Constraint parameters and settings

Constraint parameters

The following parameters are in the Constraint tab of the parameters HUD. Certain parameters are only available for specific constraints.

The buttons at the top of the parameters HUD are available when a constraint is selected (through the selection sets), or a driven control is selected as the first selected control.

Parameter / Option

Description

/

Locks the menu options to the currently selected constraint.

/

Enables or disables the constraint.

/

Toggles the visibility of the constraint.

/

- The constraint is selected in the selection sets.

- The constraint is not selected in the selection sets.

If a constraint is selected in the selection sets, the channels for its parameters are added to the animation editor.

/

Toggles the visibility of any controls defined by the constraint, for example, the green dot of the offset constraint control.

/

Toggles the visibility of the driven control.

Constraint

The type of constraint to create.

Driven Control

The driven control of the constraint.

Driver / Target

The driver/target of the constraint.

Blend

Blends between the motion of the constraint and the original animation on the driven control. If Blend is set to 1, the driven control follows the driver/target - the driven control’s animation is overridden by the motion of the constraint. If Blend is set to 0, the driven control doesn’t follow the driver/target, and you can move the driven control freely.

Use Tilt

When turned on, tilting the lookat constraint’s target control tilts the driven control. This option is available for lookat constraints.

Component

The translate, rotate, scale components of the driver that the driven control follows.

Offset

The type of offset between the driver and driven control. This option is available for offset constraints.

None

The driven control matches the driver’s control.

Static

Maintains the offset between the driver and driven control when the constraint was created.

Parent

Treats the driver as the parent of the driven control. The driven control’s animation is still applied, but any change to the driver is also applied to the driven control’s animation.

Constraint settings

The following settings are in the Constraint tab of the settings HUD:

Setting / Option

Description

Copies all the transient constraints currently visible on the playbar timeline. Use to paste the transient constraints to another animation layer.

Pastes transient constraints into the current animation layer:

  1. Click to copy all the transient constraints currently visible on the playbar timeline.

  2. Select another animation layer.

  3. Click to paste the transient constraints into the current layer.

Updates the offset on the selected driven control to match the frame before the current transient constraint range. This results in a smooth transition between the previous range and the current range.

  1. Select the driven control.

  2. Click in the timeline so that the current frame is within the frame range of the transient constraint you want to adjust.

  3. Click the button.

Updates the offset on the selected driven control to match the frame after the current transient constraint range. This results in a smooth transition between the current range and the next range.

  1. Select the driven control.

  2. Click in the timeline so that the current frame is within the frame range of the transient constraint you want to adjust.

  3. Click the button.

Disable Constraints After Baking

This option applies to regular (not transient) constraints. When turned on, disables the constraint after baking.

Show Preview Visualizer

When turned on, displays a visualizer for the constraint - a dotted line with an arrow pointing from the driver to the driven control.

Auto Update Follow Ranges

This option applies to transient constraints. When turned on, applies any changes made on the driven control to the entire transient constraint frame range.

Bake to New Layer

This option applies to transient constraints. When turned on, adds keyframes to a new animation layer. When turned off, adds keyframes to the base animation layer.

Bake Mode

Options for adding/updating keys when baking. This option is only for transient constraints.

Dense

Adds keys to every frame in the constraint frame range.

Update

Updates the existing keys, but doesn’t add extra keys.

How-to

To...Do this

Remove a constraint

Select the driven control(s) and press ⌃ Ctrl + H.

Turn a constraint on or off

  1. Select the driven control.

  2. Press G to bring up the parameters HUD.

  3. In the Constraint tab, toggle and .

Turn off display of the constraint visualizer

In the settings HUD, Constraint tab, turn off Show Preview Visualizer.

Transient contraints

To...Do this

Add a transient constraint

  1. Select the driven control, hold SHIFT, then select the driver.

  2. On the timeline, select the range of frames to make the constraint active (hold SHIFT and drag along the timeline).

  3. Hover over the viewport and press H.

Remove a transient constraint

  1. Select the driven control.

  2. In the timeline, move within the transient constraint frame range and press ⌃ Ctrl + H.

    or

    click the transient constraint bookmark, and select Delete.

Adjust the driver control

Hold ⇧ Shift + H and move the driver control.

Smooth out the transition between adjacent constraint frame ranges

  1. Select the driven control.

  2. Click in the timeline so that the current frame is within the frame range of the transient constraint you want to adjust.

  3. In the settings HUD, Constraint tab:

    • Click the button to match the previous constraint frame range.

    • Click the button to match the next constraint frame range.

Add keys to every frame in the constraint frame range when adding a transient constraint

  1. In the settings HUD, Constraint tab, set Bake Mode to Dense.

  2. Create a transient constraint.

Only update existing keys (don’t add extra keys) when adding a transient constraint

  1. Set keyframes on the controls you want to contrain.

  2. In the settings HUD, Constraint tab, set Bake Mode to Update.

  3. Create a transient constraint.

KineFX

Overview

Preparing character elements

Rigging with APEX graphs

Building rig graphs with APEX Script

Rigging with rig components

Animating in the viewport

SOP-based animation

Deformation

Animation retargeting

Pre-H20

Panes

Appendix