Constrain

Apply copy, limit, distance, floor, pivot, aim, and parent constraints to a transform, camera, points, mesh, or skeleton.

What it does

Constrain drives one object's transform from another. The modes are Copy, Limit, Distance, Floor, Pivot, Aim and Parent. Output is a constrained Transform, plus separate position, rotation and distance outputs, wirable into any node's transform input. Source and Target each accept a point, a full transform, a camera, points, or a mesh; meshes and cameras use their object placement, so a viewport camera or a light can be parented to a Cube or a Null. Influence blends between the unconstrained and fully constrained result. Owner Space and Target Space evaluate either side in World or a Local frame, and a connected Space Parent input supplies that Local frame.

With a skeleton connected to Source, Copy, Limit and Aim gain joint awareness: pick a Joint (and a Source Joint for Copy) and the constraint solves per bone, producing a modified skeleton on the skeleton output.

When to use it

ParameterTypeDefault
sourceOneOf([Vec2, Vec3, Transform, Camera3D, Collection, GpuGeometry])
targetOneOf([Vec2, Vec3, Transform, Camera3D, Collection, GpuGeometry])
modeString"parent"
influenceNumber1
space_parentOneOf([Vec3, Transform, Collection, GpuGeometry])
owner_spaceString"world"
target_spaceString"world"
copy_posVec3(1, 1, 0)
copy_rotVec3(0, 0, 0)
copy_sclVec3(0, 0, 0)
copy_offsetVec3(0, 0, 0)
mix_modeString"replace"
limit_channelString"location"
minVec3(-1000, -1000, -1000)
maxVec3(1000, 1000, 1000)
limit_axisVec3(1, 1, 0)
distance_modeString"clamp_inside"
distanceNumber100
floor_axisString"y"
floor_valueNumber0
floor_relative_to_targetBooleanfalse
radiusNumber100
azimuthNumber0
elevationNumber0
orbit_axisString"z"
aim_axisString"+x"
aim_up_axisString"+z"
aim_up_refString"+z"
track_kindString"damped"
lock_axisString"+z"
aim_stretchBooleanfalse
aim_stretch_rest_lengthNumber100
parent_keep_offsetBooleantrue
parent_bind_inverseString""
jointString""
source_jointString""
min_rotationVec3(-180, -180, -180)
max_rotationVec3(180, 180, 180)

Gotchas

Target appears only for Copy, Distance, Pivot, Aim and Parent. Limit and Floor constrain Source against fixed values, so Target stays hidden and unused in those modes.

The Joint and Source Joint dropdowns populate only once a skeleton (Points carrying joint names) is connected to Source. Until then they show "(connect skeleton)".

Parent mode's keep-offset bind is captured once, automatically, the first time the constraint engages, then frozen. It does not follow later changes to Target. If the parented object jumps back to a stale offset after Target moves, disconnect and reconnect Source to re-capture the bind.

Worked example

  1. Add a Constrain node. Wire the object to drive into Source, and the object to follow into Target.

  2. Set Mode to Copy, then enable Copy Position (and Rotation or Scale as needed) to pick which channels transfer.

  3. Wire the transform output into the driven object's transform input, and dial Influence down from 1.0 to blend the constraint in gradually.

See also

Mirror · Spring · Transform · Scene values