Merge Points
Combines two or more point streams into a single Points output, remapping IDs and tagging each stream's origin for downstream selection.
Category: Point Ops Menu path: Point Ops > Merge Points
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
points_in | points | input (multi) | Two or more point inputs. Use the + button on the node to add more slots. |
out | points | output | Single Points stream concatenated in slot order. |
Parameters
None.
How It Works
MergePoints is the points-side analog of MergeShapes — a pure structural combine, no math. Each input contributes its points verbatim to the output, with PointIds re-keyed to fresh values so downstream nodes that rely on stable identity still work.
Stream order matches slot order: slot 0 comes first, the last slot comes last. The output point indices [0 .. n-1] follow this concatenation order. Drag inputs in the node graph to reorder.
sourceIndex
A sourceIndex per-point attribute is always emitted, renumbered densely so nesting keeps original sources distinct — Merge(Merge(A,B), C) yields 0/1/2, not 0/0/1. Useful for routing branches downstream:
PointAttributes (color from sourceIndex via Remap)→ color each origin differently.PointAttributes (scale from sourceIndex)→ make stream A bigger than stream B.PointDelete (threshold on sourceIndex)→ drop a specific stream after a downstream branch already used it.
Attributes (union merge)
An attribute present on any input survives the merge. Points from inputs that lack it fill with that attribute's registered default — scale, opacity and strokeWidth fill 1 (so merged-in points stay visible and full-size), color fills white, and unknown names fill 0.
That zero-fill for unknown names is what makes named groups work: tag one branch group1 and the other group2 before merging, and both tags come through intact — a point from the other branch simply reads 0, "not a member". Feed the merge into ConnectPoints (From: group1, To: group2) to bridge the two sets without webbing either one, or AttributeToField("group1") to turn a group into a 0/1 mask field.
index renumbers across the merged stream (an order with two points both claiming slot 0 is not an order). The one thing still dropped: a name carried with different array types on different inputs — coercing between scalar and vector data would invent values.
Disconnected slots are skipped. A MergePoints with only one connected input is a no-op passthrough.
Usage Examples
Combine procedurally-generated and shape-derived points
Grid → MergePoints slot 0 + Rectangle → ShapeToPoints → MergePoints slot 1 → DrawPoints. You get the grid plus the rectangle corners in one stream, with sourceIndex available for later routing.
Two scatter passes with different seeds
Rectangle → PointScatter (seed=0) + Rectangle → PointScatter (seed=42) → MergePoints → DrawPoints. Twice as many points without changing count.
Animated grouping
Two Grid chains with different counts feeding MergePoints → PointAttributes (color from sourceIndex via Colorize ramp) → DrawPoints. Each stream gets its own color, but they all animate as one population.
Tips
- MergePoints does not deduplicate — coincident points from multiple streams stay coincident. Use a downstream filter (e.g.
PointRelax,PointDelete) if you want to thin them. - Reach for MergePoints when you want streams to coexist; reach for a dedicated boolean/relaxation node if you want them to interact.
- The node grows additional input slots on demand via the
+button. - Empty / disconnected slots are silently ignored.
Related Nodes
- MergeShapes — the shape-side analog when you want to combine shape geometry instead of point streams.
- PointAttributes — set or normalize attributes before merging if you need them preserved.
- PointDelete — thin a merged stream using
sourceIndexor any attribute. - DrawPoints — rasterizes the combined stream.