Painterly fills
Each fill creates a region as described in the Fills overview, then shades it like pigment. Thick paint uses a height field that lighting renders as relief; washes sample the canvas beneath and pull it along like water.
Textured paint
open full size ↗Opaque paint with surface relief: dry and scratched, flat with gentle undulations, or thick oil applied with a knife.
The height field combines a dome-shaped rise along the edge with noise in the interior. The dome uses a smoothstep function of distance, and its analytically derived slope ensures a smooth transition into the flat interior without a crease. Low-frequency noise creates broad swells, while high-frequency noise adds fine detail. For the knife-painted oil, straight-cut segments create sharp creases and steps.
Each paint blends two colors in mottled patches, like a brush loaded with multiple colors. Thick oil keeps the transition sharp: the colors meet along a distinct boundary shaped by low-frequency noise, as if two paints had been laid side by side without blending.
Washes
open full size ↗Watercolor fills layered over the background, ranging from watery washes through medium washes to gouache.
A single renderer handles all three. The paint interacts with the background in two ways: a min operation darkens it like layered pigment, while a mix covers it like an opaque layer. Water controls the balance: more water favors darkening the background over covering it. With less water, the edge sharpens and coverage increases until the fill resembles gouache. Water also creates uneven opacity, leaving nearly transparent patches.
Rather than sampling the background at a single point, the renderer samples it along a direction that shifts with position, so the pigment appears to flow with the water. This is not a fluid simulation: the drag direction simply comes from a noise field. Gouache covers the most and pulls the background the farthest, evoking a brushstroke.
Try drawing
open full size ↗Try drawing freely with the tools on this page.