Two thousand coins, each weighted by where it lies, and an outline drawn around whatever came up.
A coin per cell
Every cell of the lead’s 48 × 48 grid holds one independent coin flip, tested against a
threshold that depends on where the cell is:
buffer[i] = rng.NextDouble() > p(x / (float)bufferSize, y / (float)bufferSize) ? 1 : 0;
p is a probability surface — a function of position, not a constant. That is
the whole difference between this and a field of noise: the coins are fair, but they
are not weighted the same everywhere.
if (Shape == 0) p = directionalGradient; // any angle
else if (Shape == 2) p = (x, y) => 1 - 3 * Math.Pow(…, 0.75); // radial
else if (Shape == 3) p = repeatingWave; // bands of density
else if (Shape == 4) p = twinVoids; // two radial foci
else p = saddle; // opposing corners
The surface applied at a fifth of its strength. Only the cells where the threshold is
lowest have come up filled, so this stage is a picture of where the surface is
smallest.
The outline is the drawing
Nothing is filled. What is drawn is the boundary of the filled region — for every
filled cell, an edge is drawn on each of its four sides where the neighbour is empty
or off-grid:
if (y == 0 || buffer[i - bufferSize] != 1)
DrawLine(…, x, y, x + 1, y, …);
Two adjacent filled cells therefore share no line at all: the edge between them is
skipped by both. Which means an isolated cell is a small square, a pair is a
rectangle, and a large blob is a single ragged outline — the marching-squares result
without the marching, because the grid is axis-aligned and only the four cardinal
neighbours matter.
Two fifths. Cells switch on as the surface strengthens and never switch off, so the
progression is a strict revealing rather than a re-roll: each stage contains the one
before it.
Three fifths. Filled cells have begun to meet, and where they do the outline stops
drawing squares and starts drawing regions.
Five surfaces
Shape selects a probability surface. Direction, aspect ratio, rotation and an
optional second field turn those surfaces into five different compositions:
| Rendering | Cells | Surface | Composition |
|---|
| Cyan Drift | 48×48 | directional gradient | a cyan square tilted against the frame |
| Magenta Halo | 35×35 | radial void | a coarse, centered ring |
| Amber Current | 64×28 | repeating wave | a wide field of alternating density |
| Ivory Divide | 32×58 | saddle | a tall field with opposing dense corners |
| Cobalt Binary | 58×34, twice | twin voids | two translucent fields crossing at an angle |
The gradient surface is the clearest one to look at, because density varies
continuously across the frame and the eye reads it as depth or light — a spatial
signal carried entirely by how often a coin comes up. The wave and saddle make that
signal periodic and opposing; the twin-void field repeats the radial idea around two
foci, then overlays a second seeded draw to produce interference without changing
the grid algorithm.
The radial surface, 1 − 3·r^1.5, goes negative away from the centre. A negative
threshold is always exceeded, so every cell outside a certain radius is filled
unconditionally: the piece becomes a solid field with a decaying speckled hole in the
middle rather than a fading disc.
Four fifths.
The surface at full strength. Grid extent and row/column counts are independent,
so resolution, aspect ratio and physical scale can all vary without changing the
boundary algorithm. What varies with the preset is how the extent meets the
canvas: every preset sets the same 40-pixel margin, and the field is scaled so
its rotated outline fits exactly inside it. Nothing lands by accident, and
nothing touches the edge of the frame.
On the wall
The gallery’s last plate — Museum Frame — is the same field hung rather than
rendered: the lead behind a mat and a dark molding on a wall, a soft shadow
lifting the frame off the wall, and a single rule in the field’s own colour
tracing the opening. The framing is MuseumFrame, the presentation layer from
SkiaSharp.Extensions: it wraps a preset and knows nothing about what it
frames beyond “draw into this opening”. One frame, any composition; the piece
supplies only its palette, the mat continuing its ground.
Determinism
SeededRandom — the project’s stable Xoshiro256StarStar — is seeded from the
preset and consumed exactly once per cell in grid order, before any line is drawn.
An echo uses a fixed offset from that seed. Same preset, same fields.