Generator node
Points Visualize
Renders any point structure as an image on the GPU — hundreds of thousands of points in a single instanced draw call. Feed it a point cloud from the Points node family, Vision landmarks, or any structure containing coordinates, and it draws every point as a crisp analytic shape (circle, ring, square, diamond, triangle, cross, star) or a custom image sprite. Gradient coloring, additive glow, and seeded per-point variance turn raw coordinates into starfields, bokeh clouds, and scatter art.
Inputs
| Port | Type | Default |
|---|---|---|
| PointsThe cloud to draw — cable any point structure, Vision landmarks, JSON or nested x/y/z values. Only the first 200000 points are rendered. | structure | — |
| EnableTurns the cloud off and clears its image. | bool | true |
| ShapeThe sprite stamped at every point: circle, ring, square, diamond, triangle, cross, star, arrow or a custom image. The arrow points UP at rotation 0 — cable Direction to Rotation's output into Rotation and it aims along any direction. Values outside the list fall back to a circle. | int | 0 |
| ImageCable a generator or an Image node to use as the sprite; only read when Shape is Custom Image. An Image node's original pixels are sampled, so proportions stay correct. | image | — |
| SizeRadius of one sprite in Grafit units. At least 0.0005, no upper limit; past about 0.3 the sprites overlap into a solid field. ALSO accepts an ARRAY: cable per-point sizes and each index drives its own instance (short arrays clamp to their last value). | float | 0.03 |
| RotationTurns every sprite, in degrees, clockwise. Any value works; the shapes just keep spinning. ALSO accepts an ARRAY of per-point degrees — pair with Direction to Rotation for aimed arrows. | float | 0 |
| Fill ModeWhether the shape is solid or drawn as an outline. Rings and image sprites ignore it. | int | 0 |
| Outline WidthThickness of the outline as a fraction of the sprite, and the ring's wall thickness. Clamped to 0.02…1, where 1 fills the shape completely. | float | 0.25 |
| SoftnessFeathers the sprite edge into a bokeh-like falloff. Clamped to 0…1. | float | 0 |
| ColorFlat colour of every point, used when Color Mode is Single Color. | color | — |
| GradientCable a Gradient node here; it is read whenever Color Mode is not Single Color. Without it the gradient modes fall back to the flat colour. | structure | — |
| Color ModeWhat the gradient is sampled by — index, depth, a screen direction, radius or a per-point random value. Values outside the list are coloured randomly. | int | 0 |
| Size ModeLets depth, index or distance from centre scale each sprite instead of one constant size. Values outside the list keep every sprite the same size. | int | 0 |
| OpacityOverall transparency of the cloud. Clamped to 0…1. ALSO accepts an ARRAY of per-point opacities (0–1 each). | float | 1 |
| AdditiveOverlapping sprites add up instead of covering each other — the dense-glow look. Best with dark backgrounds. | bool | false |
| Star PointsHow many arms the star has; only used with the Star shape. Clamped to 3…16. | int | 5 |
| Size VarianceHow much sprite sizes scatter around the base size, from a fixed per-point hash. Clamped to 0…1. | float | 0 |
| Rotation VarianceHow much each sprite's angle scatters from the base rotation. Clamped to 0…1. | float | 0 |
| Opacity VarianceHow much each sprite's transparency scatters, so the cloud gets natural depth. Clamped to 0…1. | float | 0 |
| Color VarianceHow far each sprite's hue drifts from its assigned colour. Clamped to 0…1. | float | 0 |
| JitterRandomly nudges each point off its true position, in Grafit units. Negative values are treated as 0; keep it small, around the sprite size, or the structure dissolves. | float | 0 |
| SeedFixes every per-point random value — size, rotation, opacity, hue and jitter. Any whole number works, and the same seed always draws the same cloud. | int | 0 |
Outputs
| Port | Type |
|---|---|
| ImageCable a generator or an Image node to use as the sprite; only read when Shape is Custom Image. An Image node's original pixels are sampled, so proportions stay correct. | image |
| Width | float |
| Height | float |
| Count | int |
Live Preview
How It Works
Each frame the node resolves its Points input and flattens it into a flat list of 3D positions. The extractor is universal: it accepts live point arrays, arrays of [x, y] or [x, y, z] number tuples, and nested structures or JSON where any dictionary with numeric x and y keys (z optional) counts as one point. Up to 200,000 points are accepted; anything beyond that hard ceiling is truncated.
The entire cloud renders in one instanced GPU draw call — one quad per point, expanded in the vertex shader. There is no CPU loop over points at draw time; the CPU only uploads positions into a per-node double-buffered MTLBuffer and computes cloud statistics (bounding box, centroid, maximum radius) that the color and size modes need. All per-point math — size, rotation, jitter, color, opacity — runs in the vertex shader.
Positions are in Grafit units: origin (0,0) at the viewport center, shorter viewport edge mapped to [-1, 1]. Shapes are drawn as signed-distance fields in the fragment shader, edge-feathered by the global AA multiplier (or by Softness when it is above zero, which replaces AA feathering with a wide artistic falloff). The output texture is premultiplied alpha, ready for a Canvas node. Width/Height report the full viewport-fit size, Count reports how many points were actually drawn. When Enable is false or the cloud is empty, the texture is cleared — Canvas shows nothing, never a stale frame.
Shape selects the sprite drawn at every point:
| Value | Shape | Notes |
|---|---|---|
| 0 | Circle | Filled disc (default) |
| 1 | Ring | Annulus; Outline Width sets ring thickness |
| 2 | Square | Area-matched to the circle |
| 3 | Diamond | 45° rotated square |
| 4 | Triangle | Equilateral |
| 5 | Cross | Plus sign |
| 6 | Star | Star Points arms (3–16) |
| 7 | Custom Image | Samples the Image input; proportions preserved |
For Custom Image, an Image node source is sampled from its raw pixels so the sprite keeps its true proportions; any other generator's texture is used as-is. The sprite quad's geometry is stretched by the source aspect ratio while the tint (Color × Opacity) still applies.
Color Mode maps each point to a color. Mode 0 uses the flat Color; every other mode samples the connected Gradient (up to 16 stops) at a parameter t derived from the cloud's own statistics:
| Value | Mode | Gradient parameter t |
|---|---|---|
| 0 | Single Color | — (uses Color) |
| 1 | Gradient: Index | Point index 0…N−1 normalized |
| 2 | Gradient: Depth | Z position across the cloud's Z range |
| 3 | Gradient: Left → Right | X across the cloud's bounding box |
| 4 | Gradient: Right → Left | Inverted X |
| 5 | Gradient: Top → Bottom | Y from top of the bounding box down |
| 6 | Gradient: Bottom → Top | Inverted Y |
| 7 | Gradient: Radial | Distance from cloud centroid / max radius |
| 8 | Gradient: Random | Deterministic per-point hash |
Size Mode scales each point's size on top of the base Size (all variable modes span ×0.35 at the low end to ×1.65 at the high end via 0.35 + 1.3·t):
| Value | Mode | Behavior |
|---|---|---|
| 0 | Constant | Every point uses Size |
| 1 | By Depth | +Z (closer) points larger, −Z smaller |
| 2 | By Index | Later points larger |
| 3 | Radial Falloff | Large at the centroid, small at the rim |
All variance parameters (Size Variance, Rotation Variance, Opacity Variance, Color Variance, Jitter) are computed on the GPU from deterministic PCG hashes of (point index, Seed). The same Seed always produces the exact same cloud — no per-frame flicker, no CPU random state, fully reproducible patches.
Parameters in Depth
| Port | Default | Meaning |
|---|---|---|
| Points | — | Point structure to visualize (structure input; arrays, {x,y,z} dicts, JSON) |
| Enable | true | Off clears the output texture |
| Shape | 0 | Sprite shape, 0–7 (see table above) |
| Image | — | Sprite source for Custom Image shape (shown only when Shape = Custom Image) |
| Size | 0.03 | Point radius in Grafit units (floored at 0.0005) |
| Rotation | 0 | Sprite rotation in degrees, positive = clockwise |
| Fill Mode | 0 | 0 = Fill, 1 = Outline (hidden for Ring and Custom Image) |
| Outline Width | 0.25 | Stroke thickness in shape space (0.02–1); also the Ring thickness |
| Softness | 0 | 0–1; feathers the edge into bokeh-like discs, overriding AA feathering |
| Color | (1, 1, 1, 1) | Flat tint; also tints gradient results' alpha and custom sprites |
| Gradient | — | Gradient stops (connect a Gradient node); used by Color Modes 1–8 |
| Color Mode | 0 | 0–8 (see table above) |
| Size Mode | 0 | 0–3 (see table above) |
| Opacity | 1 | Global opacity 0–1, multiplied per point |
| Additive | false | Additive blending — overlapping points sum toward white glow |
| Star Points | 5 | Arms of the Star shape, clamped 3–16 (shown only for Star) |
| Size Variance | 0 | 0–1; per-point random size ±variance (clamped ×0.05–×3) |
| Rotation Variance | 0 | 0–1; per-point random rotation up to ±180° |
| Opacity Variance | 0 | 0–1; per-point random dimming |
| Color Variance | 0 | 0–1; per-point random hue rotation up to ±360° |
| Jitter | 0 | Random positional offset radius in Grafit units, random direction per point |
| Seed | 0 | Reseeds every variance hash; same seed = same cloud, forever |
Interactions worth knowing: Softness > 0 replaces the AA edge entirely, so it also dominates Outline Width visually at high values. Fill Mode = Outline converts any shape to a stroked version of thickness Outline Width — except Ring (which is inherently a stroke) and Custom Image. Gradient color modes fall back to plain white if no Gradient is connected while a gradient mode is selected.
Use Cases
- Point-cloud portrait: Image node → Geometry to Points → Points Visualize (Additive on, small Size) → Canvas — an image rebuilt from glowing dots.
- Animated particle constellations: Geometry to Points → Point Animation → Points Visualize → Canvas, with
Color Mode = Gradient: Depthso points shift color as they move in Z. - Bokeh backdrops: any sparse cloud → Points Visualize with
Softness ≈ 0.8, highSize Variance,Opacity Variance, and Additive — layer behind the main scene on a lower Canvas layer. - Hand/body tracking dots: Camera Input → Vision tracking node → Points Visualize (
Shape = Ring) → Canvas — live landmark overlays. - Custom sprite scatter: Image node (a snowflake PNG) → Points Visualize
Imageinput,Shape = Custom Image,Rotation VarianceandJitterup → falling-snow fields when the cloud is animated. - Star field: Point Density or a random cloud → Points Visualize,
Shape = Star,Color Mode = Gradient: Random, tinySizewith highSize Variance.
Tips
- Like every generator, the output only appears on screen through a Canvas node; the
Imageport carries an offscreen texture. - Additive blending plus a dark background is the cheapest "glow" there is — overlaps brighten naturally without any post-processing.
- Variance is deterministic: animating
Seedwith a Counter or stepped Time value re-rolls the whole cloud in discrete jumps, which reads as intentional shuffling rather than noise. - Directional and radial color modes are computed from the cloud's own bounding box and centroid each frame — a moving cloud renormalizes its gradient continuously.
- Performance: 200,000 points is the hard cap and one draw call handles all of them; the per-frame CPU cost is only the O(n) upload and statistics pass. Prefer trimming the cloud upstream (Point Density) over pushing the cap.
- For connecting the same cloud with lines instead of dots, use Lines Visualize; for proximity meshes use the Plexus family.
Open Points Visualize in the interactive catalog →
Points Visualize is one of 381 nodes in Grafit Pro.
Free download. Every feature for 7 days, no card. Then €99.99 once — or keep playing your projects as a Player.