Point Deform
Displaces point positions using a vector field or uniform value. Stateless -- applied fresh each frame.
Category: Point Ops Menu path: Point Ops > Point Deform
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
points_in | points | input | Source points |
field_in | vectorField | input | Spatial field for displacement (also accepts scalarField) |
value_in | vec2 | input | Uniform displacement vector (also accepts scalar) |
amplitude_in | scalar | input | Override for the amplitude parameter |
out | points | output | Displaced points |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
mode | enum | XY | Displacement mode: XY, X, Y, Normal, or Tangent |
amplitude | scalar | 50 | Multiplier applied to the displacement |
source | enum | Field | Whether to use Field or Value when both are connected |
How It Works
PointDeform moves each point's position by a displacement vector, scaled by amplitude. It is stateless -- the displacement is computed fresh each frame from the current field/value, not accumulated over time (unlike PointAdvect).
Modes:
- XY: Full 2D displacement from the field or value.
- X / Y: Displacement restricted to a single axis.
- Normal / Tangent: Uses the per-point
rotationattribute (set via PointAttributes) as a local coordinate frame. Normal displaces perpendicular to the point's facing direction, Tangent displaces along it.
Signal paths:
- Field: Evaluates the connected vectorField (or scalarField) at each point's position using
eval_bipolar()for [-1, 1] range. - Value: Applies the uniform vec2 (or scalar) from
value_into all points equally.
When both field_in and value_in are connected, the source param chooses which one to use.
Usage Examples
Basic: Noise displacement
Grid -> PointDeform (field: Noise.vectorField, amplitude: 30) -> DrawPoints -> Transform2D -> Output. Points jitter based on the noise field.
Animated wobble
Connect a Time.seconds output through Math (Sin) into amplitude_in. The displacement pulses over time.
Normal-based push
Grid -> PointAttributes (target: Rotation, field: Noise.scalarField) -> PointDeform (mode: Normal, field: DistanceField.vectorField). Points push outward along their individual facing directions.
Tips
- PointDeform changes positions, which affects bounding box computation -- the engine runs the full deformation in its pre-pass for accurate overscan
- For accumulated motion over time, use PointAdvect instead
- Normal/Tangent modes require a
rotationattribute on the points -- set it upstream with PointAttributes - The
field_inport accepts both vectorField and scalarField;value_inaccepts both vec2 and scalar
Related Nodes
- PointAdvect -- stateful accumulation through a field (vs. stateless displacement)
- ShapeDeform -- same concept for shape vertices
- PointAttributes -- set rotation attribute needed for Normal/Tangent modes
- Noise -- common field source
- DistanceField -- shape-proximity field for push/pull effects