Skip to content

Point Delete

Removes points or shape vertices where a mask value exceeds a threshold. Polymorphic — accepts either a Points or a Shape stream, outputs the same type.

Category: Point Ops Menu path: Point Ops > Point Delete

Ports

PortTypeDirectionDescription
inpointsinputPoints or shape to filter (shape vertices are treated as points)
mask_inscalarFieldinputOptional scalar field sampled at each element's position to drive deletion
outpointsoutputFiltered stream (type mirrors input)

Parameters

ParamTypeDefaultDescription
attributestringselectionName of the per-element scalar attribute read when mask_in is disconnected
thresholdscalar0.5Cutoff value — elements with mask above this are deleted (binary 0/1 masks behave intuitively)
invertbooleanfalseWhen true, delete elements with mask ≤ threshold instead

How It Works

PointDelete resolves a per-element scalar mask, then keeps elements whose mask value is at or below threshold (or above, when invert is set).

Mask resolution priority:

  1. If mask_in is connected, sample the scalar field at each element's position.
  2. Otherwise, read the named scalar attribute from the element stream. Missing attribute → mask = 0 → element kept.

Shape handling: when a vertex is deleted, adjacent segments are rewired as straight-line bridges across the gap. Original bezier segments whose endpoints are both kept preserve their control points. Paths with fewer than 2 remaining vertices are dropped. PointIds are preserved, so downstream cache keys remain stable for elements that survive.

Per-vertex / per-point attributes (color, scale, opacity, custom, etc.) are filtered in parallel with the element list, so a downstream DrawShape or DrawPoints continues to render per-element variation correctly.

Usage Examples

Delete points inside a shape

Grid → PointDelete (mask_in: DistanceField from some shape, threshold: 0.5) → DrawPoints. Points inside the shape's distance field get removed, leaving only those outside.

Attribute-driven subset

Grid → PointAttributes (target: Custom, customAttribute: "selection", field: Noise.scalarField) → PointDelete (attribute: "selection", threshold: 0.7) → DrawPoints. Points where the noise field exceeds 0.7 are deleted.

Sparse cloned shapes

Grid → PointDelete (mask_in: Random.scalarField, threshold: 0.8) → CloneToPoints (shape: Circle) → DrawShape. Randomly thin out the grid to about 20% of points before cloning.

Tips

  • Binary masks (scalar values of exactly 0 or 1) work as hard on/off switches with the default threshold of 0.5
  • Smooth fields give soft cutoffs — raise or lower threshold to control how aggressive the deletion is
  • Use invert when you want to keep the selected region and delete everything else
  • For shapes, deletion can split a closed path into disconnected pieces if enough interior vertices are removed — use ResampleShape upstream to densify first if you need smoother results after deletion
  • No per-path deletion yet; this node works at the vertex/point level. A future ShapeDelete node may add path-level filtering
  • PointAttributes — write the selection attribute (or any named scalar) that PointDelete consumes
  • ShapeAttributes — write per-vertex attributes on shapes
  • AttributeToField — bridge per-element attributes into field space for FieldMath composition
  • FieldMath — combine multiple fields before feeding mask_in (e.g. multiply by a distance field to restrict the deletion region)
  • DistanceField — common mask_in source for "delete inside/outside this shape" workflows