Skip to content

Graphics · Digital Painting

Working prototype

Volume Painter

The canvas only looks flat: every stroke is paint that stands up off it

A desk at night, the iPad’s canvas tipped back so the height of the paint shows. A white stroke runs out of paint, a yellow one of the same shape goes down below it, crimson rides over both, and a Prussian wash pools round the tubes. Then the canvas comes down into the flat default view, where only the light and shadow still say how high it stands. In the app the twist is inspect-only; the film paints tipped so you can watch the height arrive.

What this is

A painting app where a stroke is matter, not pixels: a tube of paint with height, laid down from a finite load, stacking on what is already there. The canvas looks flat and stays flat while you paint. Light it from low and the shadows say how high it stands; twist two fingers and it tips back to show the real stack. A working iPad prototype in Metal, built from the volume, not a picture of it.

The technical shape

Platform
iPad, iOS 17+, Metal · finger or Apple Pencil · Pencil force sets pressure, a finger paints at ~0.75
Source of truth
analytical capsules, not pixels — up to 4,096 in a ring buffer · the height, colour and wetness maps are baked from them, capped near half the screen and at most 1,024 on an edge · incremental stamps along a stroke, a full rebake every 32 stamps and at the stroke’s end
Load
each stroke starts with 3.0 of paint, spent ∝ pressure × length × oil transfer × what remains · the deposit can never exceed the load · when it runs out, the stroke stops depositing; the next one reloads
Stacking
hard body: under a stroke the colour is the new paint exactly, no mixing through · a 1–2 texel feathered skirt only at the edge · heights add — a stroke laid over another rides on top of it
Light
one raking key, default azimuth 40°, elevation 25° · normals from the height map’s finite differences · wet paint carries a higher, cooler sheen that goes matte as it dries; heavier deposits stay wet longer
Proof of volume
the default view is flat orthographic so painting never drifts · a two-finger twist tips the canvas to three-quarters and ray-marches the real baked height map · release and it snaps back flat · inspect only: no painting while tipped
Frame budget
30 fps while painting or while paint is drying · the display pauses when nothing changes

The deep end · full technical outline

Outline v2 · expanding

Paint as matter

Most painting apps treat texture as a trick laid over a flat picture: a bump map, a normal map, a ribbon of pixels. Volume Painter stores the paint itself. Every stroke is a run of capsules, each with two ends, a radius from the pressure, a colour and a mass. That list is the painting. The pictures on screen — a height map, a colour map, a wetness map — are baked from it and can be rebuilt from it at any time, so the picture never becomes the data.

A finite load

A real brush runs dry. Each stroke here starts with a load of 3.0 and spends it in proportion to pressure, distance and how much is left, so a stroke thins toward its end and stops depositing when the load is gone. The total laid down can never exceed what the brush carried. Lift and start again and the brush reloads. That one rule is why the strokes in the film have the shape they do.

Stacking, not blending

Where a new stroke crosses an old one it is a hard body, the way oil impasto is: under the stroke the colour is the new paint exactly, with no pink seeping through from the crimson underneath, and only a texel or two of feathering at its edge. The heights add. A crimson stroke over a white one stands as high as both, and its edge follows the white tube round as it rides over it.

Light and the twist

The canvas is shown flat and straight on, the way you paint. Height has to be read from light: one raking lamp, low at 25°, lights each tube’s near side and throws its shadow across the bare linen, and wet paint carries a cool sheen that goes matte as it dries. To prove the height is real, twist two fingers: the canvas tips back to three-quarters and the display ray-marches the baked height map itself, not a fake bump. Let go and it drops back flat. The film runs this the other way round: it paints on the tipped canvas, so you can watch the height arrive, then brings the finished piece down into the flat view.

Where it is going

The specification goes further than the prototype. Strokes as a signed-distance stream joined by a smooth minimum, so a single viscosity knob decides whether wet paint merges in a fillet or dried impasto stands apart. A crimson knife cutting through wet white that shears the pigments into marbled streaks rather than pink. Glazes whose absorption scales with depth, so a Prussian blue wash slides off the peaks and pools dark in the valleys. And a canvas with no edge: a polyhedron unfolded under the brush, panels pinned up ahead as you pan.

What it is not

Not finished. Built today: capsules with a finite load, hard-body stacking, baked height, colour and wetness, drying, one raking light and the two-finger tip. Not built yet: the smooth-minimum viscosity, the colour shear, the depth-scaled glaze, the palette knife, watercolour and airbrush, the studio-lamp control, the material dock and the infinite canvas. The wash in the film shows what the glaze is meant to do; the app does not do it yet.

Related in the lab

Holographic TV →
Shares volume — treating what is on screen as matter with height and depth — not a picture that fakes them.

Built at this bench

The machine, the instrument, the film that explains it — all designed and built in-house. The same bench works for hire.

Services →