Ben Traje
← Back to houdini

Chaining Transforms and Gimbal Control in Houdini

11 Aug 26 (1mo ago)

So, you want to chain different transforms on top of each other in Houdini.

You set up three of them. The first one rotates the X-axis perfectly. But when you get to the next transform, it’s still acting on the world transform. It isn't inheriting the previous transformation's orientation, leaving you without the proper gimbal control you need.

If you're coming from Cinema 4D or Maya, this is how you'd typically zero out a parent-child hierarchy to reset transforms. But in Houdini, you’ve just hit one of the classic "gotchas."

The Core Problem: SOPs vs. Objects

In Maya and C4D, you stack Nulls to create a parent-child hierarchy, which inherently gives you that clean, isolated local rotation for gimbal control.

But in Houdini, if you are chaining Transform nodes inside a Geometry network (SOP level), you are just pushing raw point coordinates (P) around in world space. Points don't inherently have an "orientation" or a memory of what happened upstream. To the second Transform node, the first one just moved some points; it has no idea that the local axes were supposed to tilt with them.

Here are the four ways to get that proper parent-child, local-rotation behavior in Houdini, depending on what you are trying to achieve:

1. The Maya/C4D Way: Object Level Hierarchy (OBJ)

If you are building a mechanical rig or just need standard gimbal control, you should step up one level out of your Geometry node to the Object (/obj) level.

At the Object level, Houdini behaves exactly like C4D and Maya. Objects have their own transform matrices.

  1. Create a Null object.
  2. Create a second Null object.
  3. Wire the output of the first Null into the input of the second Null.
  4. Wire the second Null into your Geometry object.

Now, rotating the parent Null updates the local coordinate space of the child Null, just like you expect.

2. The Native SOP Way: Packed Primitives

If you want to keep everything contained inside a single Geometry node but still want objects to have an inherent transform matrix (a pivot and orientation), you need to use Packed Primitives.

  1. Drop down a Pack SOP after your geometry. This converts your mesh into a single point with an embedded 3x3 transform matrix.
  2. When you use a Transform SOP on a packed primitive, it updates that local matrix rather than just pushing points.
  3. You can use nodes like Transform Pieces to copy transforms from one hierarchy of packed primitives to another.

3. The Modern Houdini Way: KineFX

If you are doing actual rigging inside SOPs, you should use Houdini's KineFX toolset. KineFX brings true joint hierarchies right into the SOP level.

  1. Drop down a Skeleton node. Click in the viewport to draw a root joint, then a child joint, then a grandchild joint (representing your 3 transforms).
  2. Plug your geometry and the Skeleton into a Bone Deform or Capture node (if deforming a mesh) or a Transform By Attribute node (if moving hard-surface pieces).
  3. Drop down a Rig Pose node and plug your Skeleton into it.

When you select joints in the Rig Pose node, they perfectly inherit parent rotations, giving you exact, predictable gimbal control.

4. The Quick Viewport Fix (Handle Alignment)

If you aren't trying to build a rig and just want the visual transform handle to align to the geometry you just rotated (rather than snapping back to World Space), Houdini has a quick shortcut.

  • With your second Transform node selected, hover over the viewport and press M.

This cycles the Handle Alignment through World, Local, and Viewport spaces. You can also right-click the transform handle in the viewport and go to Align Handle > Local.

Note: This only changes how the visual handle is oriented for you to click and drag; it doesn't create a true mathematical parent-child hierarchy upstream.