Fills
Every demo runs the tight blob pipeline from Stroke processing: the gesture is closed into a loop, offset, and smoothed. The region is a signed distance field in the fragment shader, so a renderer can push the boundary, texture the interior, or shade it as a surface without new geometry.
Blob fills
open full size ↗Three flat fills: the blob as it is, a spiky one, and a wobbly one.
Details
Spikes: An integer count of spikes runs around the boundary's arc, so the profile meets itself at the seam in a valley. Each spike hashes its height and lean from its index. Spikes only stick out: every valley returns to the base contour, so the fill always covers its region.
Wobble: The bump offset is a noise of world position rather than arc, so it cannot show a seam at all.
Textured paint
open full size ↗Opaque paint with relief: dry and scratched, flat with a gentle rise and fall, and thick oil laid with a knife.
Details
Height: An edge dome plus interior noise. The dome is a smoothstep of distance with an analytic slope, so the rise eases into the flat interior with no crease, and the noise mixes a low frequency for broad swell with a high one for detail.
Dry brush: A tooth like the dry media's, only denser, erodes both the edge and the interior, leaving rough transparent speckle where the paint ran out.
Two pigments: Every paint mixes two colors in smooth patches, the way a loaded brush lays down more than one. The thick oil sharpens the mix instead: its colors meet on a hard boundary shaped by low-frequency noise, two paints laid side by side without blending.
The knife: The thick oil's height is flat patches, each with its own drag direction and striations along it, meeting at hard steps. The rim does not trace the edge: a noise varies it around the boundary, tall and steep in some stretches, scraped nearly flat in others. The edge is straight cut segments, offset piecewise-linearly along the boundary's arc.
Washes
open full size ↗Watercolor fills over the background: watery, medium, and gouache.
Details
Water: One renderer spans the three. The paint meets the background two ways: a min that darkens like pigment layered over it, and a mix that covers like body. Water decides the balance, and the more of it, the more the paint darkens instead of covering; less sharpens the edge and covers, until the fill reads as gouache. Water also pools the opacity, leaving patches where the fill is nearly bare.
Flow: The background is not read at one point but dragged along a direction that wanders with position, so the pigment looks carried by water. The gouache covers most and drags hardest, which is what implies the brush.
The edge: The boundary wanders by a noise of world position, as a wet edge does, and pigment collects just inside it.
The gouache: It stays flat and covers nearly fully, and its edge grows brush marks, streaks elongated along directions that wander with position.
Materials
open full size ↗The blob shaded as a surface: metal, smooth glass, and faceted glass.
Details
Metal: The metal reflects an assumed chrome environment: a dark ground, a mid sky, and narrow bright bands with hard edges. Sharp features in the reflection are what read as metal (a plain gradient shades like matte paint), and the ridged relief streaks the band edges into liquid highlights. The smooth glass keeps a low-frequency wave surface instead.
Glass: The background is sampled through the normal, bent hardest where the surface tilts most, with a Fresnel lightening at grazing angles.
Facets: The faceted glass takes one random tilt per triangle of a lattice warped by low-frequency noise, so it breaks into irregular triangular panes that each displace the background their own way.
Stones
open full size ↗The blob shaded as stone: rock, marble, and sand.
Details
Rock: The relief folds its noise into creases, valley side down, so the surface reads as fractured rather than bumpy. Two colors mottle the face in patches, the creases darken as crevices do, and the boundary breaks on the same crags.
Marble: Veins are a sine band warped by noise and raised to a high power, so they run as thin wandering lines over a near-white ground. The surface stays smooth and glossy.
Sand: The normal jitters per pixel from a hashed grid, so every grain catches the light its own way, and the brightest few glint. The edge dissolves into loose grains instead of cutting.
Try drawing
open full size ↗Paint with every fill on this page, in the drawing tool: the settings panel picks the fill, its colors, and its parameters exactly, the floating dials reroll the palette, set the width, and walk a trail of rolled fills, and Clear, Replay, and recording work as on the Drawing Tool Demo page. Each released gesture becomes one blob, appearing once its direction settles (fills never split at sharp turns; that is a stroke behavior), and the washes and glasses read the canvas itself, so they bleed and bend what is already painted. With a pen tablet, pressure scales the blob around its set size, light smaller and heavy larger; a mouse draws at the set size.