Separate
Filter collection rows by mask or attribute comparison.
What it does
Separate splits a collection of shapes, points, or any table of rows into a Pass group and a Reject group. In Mask mode an external mask input decides row by row: a number array is compared against Threshold, an integer array passes on non-zero, a single number broadcasts to every row, and with nothing wired every row passes. In Attribute mode one attribute column is compared against another attribute or a plain number, using an operator (>, <, >=, <=, ==, !=). Both modes give two outputs to route downstream, plus a count of how many rows landed in each. Invert swaps them.
When to use it
Keeping only the points or shapes above a threshold from an upstream mask: crowd culling, particle life-based kill, weight-driven selection.
Comparing two attributes on the same row, such as age against life, and splitting on the result.
Both halves of a split needed at once: Pass wired one way, Reject another, instead of chaining two filters.
Inverting a filter without rewiring: flip Invert rather than swapping Pass and Reject downstream.
| Parameter | Type | Default |
|---|---|---|
input | OneOf([Collection]) | — |
mode | String | "Mask" |
mask | OneOf([NumberArray, IntArray, Number]) | — |
threshold | Number | 0.500 |
attribute | String | "age" |
operator | String | ">=" |
compare_to | String | "life" |
invert | Boolean | false |
bake_target | String | "" |
strength | Number | 1 |
Gotchas
Mode changes which inputs matter. Mask mode reads the Mask input and Threshold; Attribute mode reads Attribute, Operator, and Compare To. The other group's parameters are hidden but still present, so switching modes back and forth does not lose settings.
In Attribute mode, Compare To is checked as a number first. If it parses as one (100), it is used as a literal; otherwise it is read as another attribute name. An attribute named to look like a number is treated as the literal, not the column.
With nothing wired into Mask, every row passes and Reject is empty. If a cull is expected and nothing changes, check that the mask is connected.
Bake Target lets an out-of-band Recorder capture the Pass collection on every frame Separate filters, without wiring Pass back into the Recorder and creating a cycle in the graph.
Worked example
Add a Separate node and wire your collection (points, shapes, or a table) into Input.
Leave Mode on Mask, wire a number array or bool array into Mask, and raise or lower Threshold until the split looks right.
Wire Pass into whatever should keep those rows, and Reject into a separate branch, or a Delete/discard path, for the rest.
To split on an attribute instead, set Mode to Attribute, choose the Attribute column, an Operator, and a Compare To value or column.
Toggle Invert if Pass and Reject were wired backwards, rather than rewiring the graph.
See also
Sort · Partition · Mutate · Attributes