← Learn library

Maya & Python Scripting / Character FX & Animation / Maya / Python

Creating FK Controls for Skeleton in Maya with Python

Channel: TD Superheroes ·

Written guide

Original TD Superheroes video thumbnail
Creating FK Controls for Skeleton in Maya with PythonTD Superheroes · Video hosted on YouTube

Playing loads YouTube content. YouTube processes data after activation.

Watch on YouTube

If the player is blocked or unavailable, use Watch on YouTube.

Software: Maya, Python

This lesson adds usable FK controls to the joint copy prepared in the preceding auto-rig work. It creates a circle for each included joint, places that circle through a zero/offset hierarchy, constrains the joint and parents the controls so that upstream rotations carry downstream controls with them.

The starting tool already creates a proxy, a base skeleton and IK/FK skeleton copies. The new work depends on their existing names and orientation. The demonstration has no character mesh for final control sizing, and the exact Maya release is not established.

Align through the target’s transform space

During 01:01–04:00, the instructor shows why copying a joint’s displayed translation values directly to a new circle does not place it correctly. The values belong to different parent contexts.

The alignment helper instead parents the object being aligned beneath the target, sets its local translations and rotations to zero, and later unparents it to world. In the demonstrated setup, this makes the object inherit the target’s placement and orientation before preserving that result outside the joint hierarchy.

Inspect the resulting position and axes, not just the zero values while temporarily parented. The source does not test arbitrary nonuniform scale or complex pre-existing control hierarchies, so this helper is a scoped alignment method for the generated rig.

Create only the intended controls

Around 04:00–10:02, the script selects the FK pelvis hierarchy and stores the selected joints. It creates a circle per item, replaces the joint suffix with a control suffix and sets the circle normal along X.

The circle command returns more than one item in the recorded test. Printing that result lets the instructor extract the actual control transform before aligning it. A list containing a construction node is not the same reference as the control object a later parenting command needs.

End joints initially receive circles too. The instructor excludes their name pattern before collecting the work list, preventing unnecessary end controls. This is a selection filter for the rig’s established naming convention; it does not infer a joint’s role from its geometry.

Put placement on the zero group

From approximately 10:02–14:01, a helper groups each control inside an offset group and then a zero group. It returns the zero group to the caller. The alignment stage is moved so that it aligns this parent group rather than the control curve itself.

The resulting structure has three responsibilities. The zero group holds the joint-aligned placement, the offset group offers an additional transform layer, and the control retains zeroed local channels for direct manipulation. The instructor checks that hierarchy before adding constraints.

A circle at the right location is only the first checkpoint. Inspect the parent levels and the control channels as well; otherwise a later animator may have to remember arbitrary nonzero values to return to the reference pose.

Drive each joint, then connect the control hierarchy

At approximately 14:01, an orient constraint uses the control as target and the corresponding FK joint as the constrained object. Rotating a control now rotates its joint in the test.

The controls themselves still need to follow their upstream controls. The instructor places a child’s zero group beneath the appropriate parent control. This retains the child’s local zero structure while making the control hierarchy reflect the FK chain.

He corrects one lower-chest parenting choice during the demonstration. The parent should be the appropriate control, not an unrelated zero group or the wrong preceding landmark. Inspect both the control hierarchy and the driven joints when a pose does not propagate as intended.

The repetitive remainder of the parenting list is completed in a time-lapse section. The final list can be inspected on screen, but the transcript does not narrate every parent-child pair. This article therefore explains the rule without inventing an exhaustive executable mapping.

Remove the palm control and attach fingers to the wrist

Around 20:18–23:02, the instructor decides that this rig does not need a palm control. He changes finger-control parents from the palm control to the wrist control, removes the palm-parenting statements and excludes palm names from control creation.

All three changes belong together. Excluding a control while leaving references to it in later parenting code would create a new failure. The palm joint’s earlier reference purpose is separate from whether it needs an animator-facing FK circle.

The subsequent bend test shows the FK controls moving the skeleton. The source suggests editing curve components to fit a character’s geometry, but does not carry out that fitting pass because no character mesh is present.

Organize the finished FK controls and check visibility

In the final minutes, the control hierarchy is organized in a controls group, kept separate from the joints group. The script then hides the controls in preparation for later work and clears selection. A future visibility or IK/FK switch is discussed, not built here.

An invisible final control group is therefore not evidence that creation failed. Inspect the Outliner and the group’s visibility state when reviewing the result. Test the FK chain before that deliberate hiding stage, or inspect it with visibility restored in a review copy.

The completed work is the FK-control portion of a developing rig. Review joint/control association, zero-group alignment, constraint direction, parent propagation and excluded end/palm controls. IK control creation, blending between systems, character-specific sizing and deformation validation remain outside this lesson’s demonstrated result.