Free Electron Documented Operators
Common Operator Info
FE HobbleOp


The input source's movement is restrained relative to a reference surface.

The envelope is applied using a matrix power operation, so differences in rotations appropriately alter the interpolated path between locations.

This operator is purely spatial, not temporal. However, temporal compensation can be applied by using something like a Houdini TimeShift operator on the reference input.


The Input Surface is expected to match the Reference Surface, if given. If no reference is provided, the origin is used, or an explicit position in a parameter.

An optional Input Joints can be used as an alternative basis for tracking. Without joint tracking, rotational locking requires the Reference Surface.


The parameters on the Restraints page specify how and to what extent the input surface is restrained from moving. The input can be restrained by a Translation Lock and/or a Rotation Lock. The locks can be dialed in with their own sliders or together with the Envelope slider. With translation, the X, Y, and Z axes can also be tuned individually. All this layering of envelopes is done simply by multiplying the appropriate two or three values together.

For rotation locks, the node needs to determine how the cloud of points is orientated. It is best done by finding lever arms from center which are 90 degrees apart, such as to the front and to one side. There are three ways to determine these arms. The arms can be determined automatically with an internal best guess, perhaps finding the points with largest X value and the largest Z value. Specific points can be specified manually by index by turning on Force Arms and providing Index To Front and Index To Side. An index of -1 indicates no forced index, so it is easy to force just one of the two. The arms can also be specified using points in the Forward Point Group, activated with Use Forward Group, and Side Point Group, activated with Use Side Group.

Center points are used for both translational and rotational locks. The center points are computed automatically by default, but both can be manually specified with Source, activated with Force Source, and Destination, activated with Force Destination. Alternatively, the center can be determined by providing a Center Point Group, activated with Use Center Group.

If a joint surface is provided, activating Reference Joint will use the joint chosen by Name for the reference transform. Likewise, activating Input Joint will use the joint chosen by Name for the input transform.

If Update Locator is on, a locator of the given Prefix, if it exists, will be subject to the same transformation as the points in the input. The Output page provides the detected centers and the transform that was applied. They are made available to be wired into parameters of other nodes.


Note that the outputs are only updated each time the node is cooked. It may seem logical to simply connect a HobbleOp to some geometry to track its movement and then use references to the output values elsewhere. In Houdini at least, references alone are not enough to keep an auxiliary node regularly updated. If a node is not set to display or shown as template, the node may not be consistently updated unless it is a dependence of a node that is displayed or templated.

One way to impose a dependency in Houdini is to put a native Point node in the active dependency graph and then wire an auxiliary node, such as a HobbleOp, to the second input. That second input doesn't need to really be used for anything, but this ensures that the auxiliary node is appropriately provoked to update.


tested in Houdini

Web page, Copyright 2008-2021, Free Electron Organization