Skip to content

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

PortTypeDirectionDescription
points_inpointsinput (multi)Two or more point inputs. Use the + button on the node to add more slots.
outpointsoutputSingle 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)MergePointsDrawPoints. Twice as many points without changing count.

Animated grouping

Two Grid chains with different counts feeding MergePointsPointAttributes (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.
  • 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 sourceIndex or any attribute.
  • DrawPoints — rasterizes the combined stream.