Spatial Nodes
Distance calculations, coordinate transformations, and spatial operations for 3D effect positioning.
Distance calculations, coordinate transformations, and spatial operations for 3D effect positioning.
This category contains 10 nodes.
Nodes
Exponential Falloff
Brightness fades quickly at first then slowly. Good for natural-looking glow and light decay.
Inputs: Distance and decay rate.
| Name | Type | Range | Default |
|---|---|---|---|
| Distance | Number | ≥0 | 0 |
| Decay Rate | Number | any | 1 |
Outputs: Decay value (1 at center, approaching 0 far away).
| Name | Type | Range |
|---|---|---|
| Number | Number | any |
Is Within
Checks if a value falls between a minimum and maximum (inclusive).
Inputs: Value to test, minimum, and maximum.
| Name | Type | Range | Default |
|---|---|---|---|
| Value | Number | any | 0 |
| Min | Number | any | 0 |
| Max | Number | any | 1 |
Outputs: True if value is within the range.
| Name | Type | Range |
|---|---|---|
| Result | Boolean | bool |
Is Within 3D
Checks if a 3D position falls inside a rectangular box region.
Inputs: Position and box bounds for each axis.
| Name | Type | Range | Default |
|---|---|---|---|
| Position | Vector | vec | [0, 0, 0] |
| Min X | Number | any | 0 |
| Max X | Number | any | 1 |
| Min Y | Number | any | 0 |
| Max Y | Number | any | 1 |
| Min Z | Number | any | 0 |
| Max Z | Number | any | 1 |
Outputs: True if inside the box.
| Name | Type | Range |
|---|---|---|
| Result | Boolean | bool |
Linear Falloff
Brightness decreases steadily with distance. Simple and predictable fade effect.
Inputs: Distance and maximum range.
| Name | Type | Range | Default |
|---|---|---|---|
| Distance | Number | ≥0 | 0 |
| Max Distance | Number | any | 1 |
Outputs: Decay value (1 at center, 0 at max distance).
| Name | Type | Range |
|---|---|---|
| Number | Number | any |
Phase Offset
Turns a fixture's position into a per-fixture phase, so a wave sweeps across the rig instead of pulsing everywhere at once. Feed the phase into Oscillate or a wave node. Direction sets which way the chase travels, Spread how many cycles fit across the rig.
Inputs: Position (usually Pixel Position), the travel Direction (normalized internally; a zero-length direction yields a flat phase of just Offset), Spread as cycles across one unit of distance, and a constant Offset.
| Name | Type | Range | Default |
|---|---|---|---|
| Position | Vector | vec | [0, 0, 0] |
| Direction | Vector | vec | [1, 0, 0] |
| Spread | Number | any | 1 |
| Offset | Number | turns | 0 |
Outputs: Phase in turns: 1.0 is one full cycle. Feed it straight into Oscillate.
| Name | Type | Range |
|---|---|---|
| Phase | Number | turns |
Polar Position
Splits a position into radius, angle, and height around an axis. The building block for rings, spirals, pinwheels, and anything that sweeps around a center. Polar SDF does the same maths but packs the result into one vector for the SDF chain.
Inputs: Position (usually Pixel Position), the Center to measure from, and the Axis to rotate around.
| Name | Type | Range | Default |
|---|---|---|---|
| Position | Vector | vec | [0, 0, 0] |
| Center | Vector | vec | [0.5, 0.5, 0.5] |
| Axis | Vector | vec | [0, 1, 0] |
Outputs: Radius is distance from the axis. Angle is in TURNS (0-1 for a full circle), matching Oscillate. Height is the signed distance along the axis, measured from Center: dot(position - center, normalize(axis)). With the default Axis of [0, 1, 0] that is the Y offset, so an effect that wants a Z offset must pass [0, 0, 1] and read Height as z - center.z.
| Name | Type | Range |
|---|---|---|
| Radius | Number | ≥0 |
| Angle | Number | turns 0-1 |
| Height | Number | any |
Radial Phase
Turns distance from a center point into a per-fixture phase, so a wave ripples outward instead of sweeping in a straight line. Feed the phase into Oscillate or a wave node.
Inputs: Position (usually Pixel Position), the Center to ripple from, Spread as cycles across one unit of distance, and a constant Offset.
| Name | Type | Range | Default |
|---|---|---|---|
| Position | Vector | vec | [0, 0, 0] |
| Center | Vector | vec | [0.5, 0.5, 0.5] |
| Spread | Number | any | 1 |
| Offset | Number | turns | 0 |
Outputs: Phase in turns: 1.0 is one full cycle. Feed it straight into Oscillate.
| Name | Type | Range |
|---|---|---|
| Phase | Number | turns |
Smooth Falloff
Full brightness at the center fading smoothly to nothing at Radius. Smoothstep cannot do this on its own because swapping its edges does not invert it, so this replaces the usual one-minus-smoothstep pair.
Inputs: Distance from the center, the Radius where it reaches zero, and Softness (0 = hard edge at the radius, 1 = fades the whole way in).
| Name | Type | Range | Default |
|---|---|---|---|
| Distance | Number | ≥0 | 0 |
| Radius | Number | ≥0 | 1 |
| Softness | Number | 0-1 | 1 |
Outputs: 1 at distance 0, 0 at or beyond the radius, smooth in between. At the default Softness of 1 this is exactly 1 - smoothstep(0, radius, distance); at 0 it is a hard edge at the radius.
| Name | Type | Range |
|---|---|---|
| Number | Number | 0-1 |
Smooth Is Within
Like Is Within but with soft edges. Fades in and out at the boundaries instead of hard cutoffs.
Inputs: Value, range, and edge softness.
| Name | Type | Range | Default |
|---|---|---|---|
| Value | Number | any | 0 |
| Min | Number | any | 0 |
| Max | Number | any | 1 |
| Tolerance | Number | any | 0.01 |
Outputs: Smooth value from 0 to 1.
| Name | Type | Range |
|---|---|---|
| Result | Number | any |
Smooth Is Within 3D
Like Is Within 3D but with soft edges. Fades in and out at box boundaries.
Inputs: Position, box bounds, and edge softness.
| Name | Type | Range | Default |
|---|---|---|---|
| Position | Vector | vec | [0, 0, 0] |
| Min X | Number | any | 0 |
| Max X | Number | any | 1 |
| Min Y | Number | any | 0 |
| Max Y | Number | any | 1 |
| Min Z | Number | any | 0 |
| Max Z | Number | any | 1 |
| Tolerance | Number | any | 0.01 |
Outputs: Smooth value from 0 to 1.
| Name | Type | Range |
|---|---|---|
| Result | Number | any |