Raster Brush
Paint directly onto images with a brush.
What it does
Raster Brush stamps a brush shape onto a canvas at a position. It takes a position and an active signal each frame, usually wired from Pointer, and lays down a stamp at the size, rotation, opacity and Color set on the node. With Surface disconnected, a blank canvas is created at project resolution and the painting persists on the node. Wire a canvas into Surface and the paint goes onto that instead, so a Raster Brush inside a Feedback Loop accumulates strokes over time.
Brush defaults to a soft round dot shaped by Hardness. Any image can be wired in as a custom stamp: a white brush plus a Color tint gives tinted painting, a full-colour brush gives decals or sprite stamping. Wire Surface into a 3D geometry's UV space rather than a flat canvas and the paint lands on that mesh's texture, Albedo or Emissive.
When to use it
Interactive painting: Pointer.position into Position, Pointer.left_button into Active, the node inside a Feedback Loop.
Stamping decals, sprites or scattered marks onto an image.
Painting a texture directly onto 3D geometry, Albedo or Emissive.
Erasing paint using the brush shape.
Spawning material into a simulation by drawing it in.
| Parameter | Type | Default | What it does |
|---|---|---|---|
surface | Raster | — | Surface texture to paint onto. Leave disconnected to auto-create a blank canvas at project resolution |
brush | Raster | — | Brush shape texture — any raster image. White brush + color tint = painting. Full-color brush = decals/sprites |
position | Vec3 | (0.5, 0.5, 0) | Paint position in normalized coordinates (X, Y, Z) (wire from Pointer node) |
size | Number | 20 | Brush size in pixels |
rotation | Vec3 | (0, 0, 0) | Brush rotation in degrees (X, Y, Z) (wire from expression for random scatter) |
opacity | Number | 1 | Brush opacity per stamp. Wire Pointer.pressure here for pressure-sensitive painting |
color | Color | rgba(1.00, 1.00, 1.00, 1.00) | Color tint multiplied with brush texture. Use with a white/grayscale brush for colored painting |
active | Boolean | false | Enable to paint — wire from Pointer button output for interactive drawing |
stroke_id | Number | 0 | — |
stroke_points | String | "[]" | — |
blend_mode | String | "Over" | Blend mode for compositing brush onto canvas. One of: Over, Add, Multiply, Screen, Overlay, Subtract, Difference, Darken, Lighten, Soft Light, Hard Light, Vivid Light, Linear Light, Pin Light, Hard Mix, Exclude, Color Dodge, Color Burn, Linear Burn, Divide, Under, Atop, Inside, Outside, Xor, Hue, Saturation, Color, Luminosity, Glow, Reflect, Average. |
uniform_scale | Boolean | true | Lock aspect ratio. Disable for non-uniform brush scaling |
scale_x | Number | 1 | Horizontal scale multiplier |
scale_y | Number | 1 | Vertical scale multiplier |
paint_target | String | "Albedo" | Which PBR texture map to paint into when painting on 3D geometry. One of: Albedo, Emissive. |
paint_resolution | String | "1024" | Resolution of the paint texture in pixels (square). Higher = more detail, more GPU memory. One of: 512, 1024, 2048, 4096. |
erase | Boolean | false | Erase mode — removes paint using the brush shape |
hardness | Number | 0.500 | Brush hardness: 0 = very soft edges, 1 = hard/sharp edges |
canvas_position | Vec3 | (0, 0, 0) | — |
canvas_rotation | Vec3 | (0, 0, 0) | — |
canvas_zoom | Number | 1 | — |
canvas_scale | Number | 1 | — |
Gotchas
Active paints only while it is true. Paint persists across frames only when the output is looped back into Surface, most often inside a Feedback Loop. Without that loop, each cook starts from a blank or freshly wired canvas and previous stamps are gone.
Uniform Scale locks brush width and height together. Turn it off to reveal Scale X and Scale Y for a stretched or squashed stamp.
A fast, curved pointer gesture still lays down a smooth stroke. Every pointer sample between cooks is recorded and a curve is walked through them, rather than one stamp per frame.
Worked example
Add a Raster Brush. Leave Surface disconnected to paint on a fresh blank canvas.
Wire Pointer.position into Position and Pointer.left_button into Active.
Wrap the node in a Feedback Loop, feeding its output back into its own Surface, so strokes accumulate as you draw.
Raise Size for a bigger stamp, lower Hardness for a softer edge, and set Color to change the paint tint.
Enable Erase to remove paint with the same brush shape instead of adding it.