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
| Port | Type | Direction | Description |
|---|---|---|---|
in | points | input | Points or shape to filter (shape vertices are treated as points) |
mask_in | scalarField | input | Optional scalar field sampled at each element's position to drive deletion |
out | points | output | Filtered stream (type mirrors input) |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
attribute | string | selection | Name of the per-element scalar attribute read when mask_in is disconnected |
threshold | scalar | 0.5 | Cutoff value — elements with mask above this are deleted (binary 0/1 masks behave intuitively) |
invert | boolean | false | When 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:
- If
mask_inis connected, sample the scalar field at each element's position. - 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
thresholdto control how aggressive the deletion is - Use
invertwhen 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
ResampleShapeupstream 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
ShapeDeletenode may add path-level filtering
Related Nodes
- PointAttributes — write the
selectionattribute (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_insource for "delete inside/outside this shape" workflows