Skip to content

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

PortTypeDirectionDescription
points_inpointsinputSource points
field_invectorFieldinputSpatial field for displacement (also accepts scalarField)
value_invec2inputUniform displacement vector (also accepts scalar)
amplitude_inscalarinputOverride for the amplitude parameter
outpointsoutputDisplaced points

Parameters

ParamTypeDefaultDescription
modeenumXYDisplacement mode: XY, X, Y, Normal, or Tangent
amplitudescalar50Multiplier applied to the displacement
sourceenumFieldWhether 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 rotation attribute (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_in to 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 rotation attribute on the points -- set it upstream with PointAttributes
  • The field_in port accepts both vectorField and scalarField; value_in accepts both vec2 and scalar
  • 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

Caddis — professional motion design.