Point Attributes
Sets per-element attributes on points, either from a spatial field or a uniform value. Attributes are read by downstream Draw and Clone nodes.
Category: Point Ops Menu path: Point Ops > Point Attributes
Ports
| Port | Type | Direction | Description |
|---|---|---|---|
points_in | points | input | Source points |
field_in | scalarField | input | Spatial field to sample at each point position (also accepts vectorField and colorField) |
out | points | output | Points with attributes set |
Parameters
| Param | Type | Default | Description |
|---|---|---|---|
target | enum | Scale | Which attribute to write: Scale, Opacity, Rotation, Color, or Custom |
source | enum | Field | Field / Value / Index — how the output is computed. See below |
value | scalar | 1.0 | Uniform value (used when source=Value, or as fallback when source=Field with no field connected) |
colorValue | color | white | Color value (used when source=Value, target=Color) |
customAttribute | string | custom | Attribute key name (used when target is Custom) |
indexCurve | curveRamp | 0→1 linear | Source=Index + scalar target. Samples the ramp by each point's normalized index |
indexColorRamp | gradientRamp | black→white | Source=Index + target=Color. Samples the gradient by each point's normalized index |
outputMin | scalar | 0 | Lerp the [0,1] ramp / field output into [outputMin, outputMax]. Hidden for Color and Rotation targets and for source=Value. Default 0/1 is identity |
outputMax | scalar | 1 | See outputMin |
How It Works
PointAttributes evaluates per point. For each point in the input:
- If a field is connected to
field_in, it is sampled at the point's position (in origin-centered comp-pixel coordinates). - If no field is connected, the
valueorcolorValueparam is used uniformly.
The result is stored as a named attribute on each point:
| Target | Attribute key | Read by |
|---|---|---|
| Scale | scale | DrawPoints (radius multiplier), CloneToPoints (uniform scale) |
| Opacity | opacity | DrawPoints (alpha), CloneToPoints (path-level opacity) |
| Rotation | rotation | CloneToPoints (instance rotation in radians), PointDeform (Normal/Tangent local frame) |
| Color | color | DrawPoints (RGBA override), CloneToPoints (path-level color) |
| Custom | user-defined | Available for custom pipelines |
Field type handling:
- ScalarField for rotation uses
v * TAUmapping: [0, 1] maps to [0, 2pi]. - VectorField for rotation uses
eval_bipolar()[-1, 1] for fullatan2range [-pi, pi]. - ColorField writes RGBA directly per point.
Custom target output type: The Custom target follows the field type of the connected input:
- ColorField -> Vec4 (RGBA stored per point)
- VectorField (alone) -> Vec2 (bipolar [-1,1] vectors stored per point)
- ScalarField or uniform value -> Scalar
This lets Custom carry any of the four attribute array types (Scalar, Vec2, Vec4) — whatever matches the field semantics you wired in.
Usage Examples
Basic: Spatially varying size
Grid -> PointAttributes (target: Scale, field: Noise.scalarField) -> DrawPoints. Points near noise peaks are larger, near troughs smaller.
Per-point color from a gradient
Grid -> PointAttributes (target: Color, field: Gradient.colorField) -> DrawPoints. Each point picks up the gradient color at its position.
Rotation for instancing
Grid -> PointAttributes (target: Rotation, field: Noise.scalarField) -> CloneToPoints (shape: small arrow). Each instance rotates based on the noise field, creating a flow visualization.
Curve-aligned rotation
For rotation that follows a curve's tangent (e.g. branches along a stem), use ShapeAttributes with target: Rotation, source: Tangent upstream of ShapeToPoints → CloneToPoints. The Tangent mode on ShapeAttributes computes the angle directly from the shape's geometry, which is cleaner than wiring up a VectorField for the same result.
Tips
- You can chain multiple PointAttributes nodes to set different attributes (e.g., one for Scale, another for Color)
- When no field is connected, all points get the same uniform
value-- useful for setting a base scale or opacity - The
field_inport accepts scalarField, vectorField, and colorField despite showing as scalarField type - Missing attributes in downstream nodes use backward-compatible defaults (scale=1, opacity=1, color=white)
Related Nodes
- ShapeAttributes -- same concept for shape vertices, plus Tangent rotation mode for curve alignment
- DrawPoints -- reads scale, opacity, and color attributes per point
- CloneToPoints -- reads rotation, scale, opacity, and color per point; supports pivot modes and group filtering
- PointDeform -- reads rotation attribute for Normal/Tangent mode local frame
- Noise -- common field source for spatial variation
- DistanceField -- shape-proximity-based field source