One rounded rectangle per cell, at a random fraction of the cell — so the sizes come from the grid, not from a list.
Divide, then inscribe
The subdivision is the same quad-split the rest of the family uses: split a
square into four, recurse to a fixed depth, and hand every leaf to a draw
function. What this one draws is a single rounded rectangle, centred in the
cell, scaled by one random number:
var u = MinScale + (1f - MinScale) * (float)rng.NextDouble();
var size = s * u;
s is the cell’s half-size, so the rectangle is somewhere between a point and the
inscribed square — uniformly, with no bias, above whatever floor the rendering
sets. The lead rendering keeps the floor at zero, so its sizes are the raw
uniform draw.
One cell, one rectangle. The only thing decided here is how much of its cell the
rectangle claims.
Sizes without a size list
There is no distribution of shape sizes written anywhere in this piece. Sizes come
out of the structure: a cell at depth d has half-size Size × 2⁻ᵈ, and its
rectangle is a uniform fraction of that.
So the finished drawing has rectangles at five discrete scales — one per depth —
each of which is then smeared uniformly downward by its own random factor. That
combination is what makes the field look like a considered composition rather than a
scatter: the large gaps are the large cells whose rectangles happened to come out
small, and they exist at every scale.
One division. Four quadrants, four independent scalings.
Sixteen cells. The size variation is uniform, but the eye reads variation in size as
variation in distance, so a flat drawing acquires depth it was never given.
The corners
var r = RoundCorner / 100f;
path.ArcTo(r * size, r * size, 0, SKPathArcSize.Small, SKPathDirection.Clockwise, …);
The corner radius is a fraction of the rectangle’s own size, not a constant. At
RoundCorner = 40 every rectangle rounds off two fifths of its half-width,
regardless of how big it is — so a tiny rectangle is exactly as round as a large
one, and the whole field is self-similar in its corner treatment as well as in its
layout.
Push it to 100 and every rectangle becomes a circle; drop it to 0 and they are all
squares. The renderings use both ends and the middle: sharp chamfers in the quilt,
moderate rounding in the lead, and full circles wherever a rendering wants bubbles
or dots.
Sixty-four cells.
Four levels: 256 cells. Individual rectangles are still readable, but the field is
starting to dominate.
Five levels: 1,024 cells and 1,024 rectangles. None of them overlaps, because each
one is inscribed in a cell and the cells tile the square exactly. All the apparent
overlap in the drawing is adjacency.
Six renderings
| Rendering | Structure | Ink |
|---|
| Bubble Cyan | stroked grid, moderate corners | cyan on black |
| Mosaic | the same grid filled instead of stroked | cream and cobalt tiles on slate |
| Aurora | the same grid, ink sampled by cell row | rose → orchid → indigo ramp on plum |
| Limelight | circles, lattice cropped by the canvas | lime on near-black green |
| Constellation | large amber rings under fine dots | periwinkle and amber on indigo |
| Diamond Quilt | the grid rotated 45° | near-black ink on warm paper |
None of the six is a recolor of another. Each rendering moves a different
structural lever — fill, color-by-position, extent and crop, layering, rotation —
while the subdivision underneath stays the same, which is the point: the variety
is what the one algorithm does when its parameters are pushed around.
Every rendering fills its canvas the same way: the root cell of the subdivision
is the canvas, so the field runs edge to edge and the outermost cells touch the
frame of the picture. The one exception is the quilt, whose rotated lattice
inscribes the canvas instead — its tips reach the edges and the four corner
triangles stay paper, the composition’s deliberate whitespace.
The finished piece, framed
The gallery closes with one plate that is not another rendering: the lead work
hung the way it would be at the gallery — behind a mat and a thin frame, on the
wall. The framing is pure presentation. It renders the lead exactly as the other
plates do, then places that picture on the wall with MuseumFrame in the
sources, so nothing about the generative design changes between the raw plate
and the framed one.
Determinism
SeededRandom — the project’s stable PCG32 — is seeded from the preset and
consumed once per leaf in the subdivision’s traversal order, plus one extra draw
per leaf when a rendering picks its ink per cell. Row-sampled ink consumes
nothing. The underlay lattice draws from its own stream, offset from the preset
seed by a constant, so its parameters never shift the main lattice. Same seed,
same field.