Susegad UI
Register
Theme
Palette
Looking down into a pool at noon: pale tiles under a moving net of light, a laterite edge, and a frangipani flower afloat.

Scenes Volume II

Plate IX

The pool at noon

Tollem · Konkani: a pond or tank; here, the pool at noon

The sun is straight overhead and the water throws a moving net of light over the tiles. A frangipani leans over one corner. Now and then it lets go of a flower, which lands with a ring and drifts. In the playful register, touch the water: the rings bend the tiles and the light, and push the flower along.

Drawn from Goan pools with their laterite coping, and the frangipani (champa) that leans over so many of them.

The prompt

the prompt

Look straight down into a Goan pool at noon, painted by a WebGL fragment shader with no image files. Lay a floor of pale blue-green tiles with white grout, and draw the grout as slightly wavering ink. Compute the bright net of caustics from an iterated sine pattern, warp it gently so it never repeats across the pool, sample it three times with small offsets so its edges split softly into colour, and quantise the light a little so it reads as painted rather than photographed. Let a gentle swell bend the tiles and the light, as if seen through a moving surface. Put the soft shadow of a frangipani in one corner and let it drop a champa flower now and then; it falls, lands with a ring and drifts until the current carries it out of view. When the viewer touches the water, or moves a ring with the arrow keys and presses Enter, keep the last ten touches as uniforms and add expanding, damped ripples to the surface slope, so the tiles and caustics bend around them and the flowers are nudged away when a ring reaches them. Where text sits over the water, flatten the swell and the light so the words rest on quiet water, and steer the flowers round them. Give it three registers. Quiet: a still of the tiles under a soft net of light, with no flower and no motion. Warm: a slow swell and a flower every 15 to 24 seconds. Playful: a livelier swell, a flower every 7 to 11 seconds, and water that answers touch and the keys. Add a progress attribute from 0 to 1: when it is set, one flower sits that far along an arc across the pool, time never moves it, a small ring answers each change, and the percentage is said in text for screen readers. With reduced motion, show the finished still: the first flower down, its ring a second old. Keep the pool itself pure: a function of time, seed and touches that returns plain numbers and runs in Node. Ink laterite coping along the top edge, lay paper grain over everything, and paint the whole pool on a canvas when WebGL is missing, its context is lost, or frames stay too slow.

How the words become code
the bright net of caustics from an iterated sine pattern
the gpuEvery pixel runs the same small program on the graphics card. It folds its position through five rounds of sines and cosines, and where the folds bunch up the light gets bright. That is the net.
warp it gently so it never repeats
smooth noiseThe folding repeats every 390 units. Four slow sine waves at mismatched frequencies push each pixel’s lookup around by up to 70 units, so the repeat never lines up where the eye can catch it.
sample it three times with small offsets
perceptual colourRed, green and blue each read the net from a slightly different spot, so the bright lines get soft warm and cool fringes, like sunlight split by real water.
keep the last ten touches as uniforms
interactionEach touch stores where and when it happened. The shader turns that into a ring that travels outward at 150 units a second and fades with age, and uses the ring’s slope to shift where each pixel looks at the floor.
falls, lands with a ring and drifts
easing and timelinesThe fall is closed-form: an eased drop from the tree with a sway and a spin. On landing the flower makes its own ring, then a slow noise current carries it. After a while, or when a third flower settles, the current takes the oldest off the nearest open edge.
flatten the swell and the light
calm zonesThe page reports where its text sits. The shader measures each pixel’s distance to those boxes and, close to them, turns down the waves and rings and blends the net into an even glow. The flowers feel a gentle push away from the same boxes.
one flower sits that far along an arc across the pool
real stateWith progress set, the flower’s place comes from the number alone, and time never moves it. Each change sends out one small ring, so a real step is visible, and the same number is read out as text.
a function of time, seed and touches
a pure modelThe flowers step forward in fixed sixtieths of a second from the start, memoised so a playing scene only pays for new steps. The part of a step past the last boundary is extrapolated and never stored, so the same seed and the same touches always give the same pool, whatever order frames arrive in.
lay paper grain over everything
paper and grainThe shader adds a fixed speckle and soft blotching per pixel, and the coping is inked on a canvas above, so the GPU picture sits on the same paper as the rest of the book.
paint the whole pool on a canvas
fallbacksThe floor, grout and shade are inked once and cached. The net is computed on the CPU at 120 by 80 pixels a dozen times a second and stretched over the water; rings are drawn as circles of light. When the context comes back, or the page asks for webgl, the shader returns on a fresh canvas.
frames stay too slow
the quality governorThe element’s governor lowers the water’s resolution when frames run long, down to 30%. If frames still take over 90 ms at the floor, or over 180 ms at any level, for four seconds, the water switches to the 2D painting.

npx susegad add scene-tollem