Divide a square into four, recurse, and drop one random quarter-arc into every cell that is left.
Divide, recurse, mark
Subdivision.QuadSubdivide(
new Vector2(0f, 0f), Size, iterations,
(center, halfSize) => DrawMark(canvas, paint, center.X, center.Y, halfSize, rng));
A square is split into four quadrants; each quadrant is split again; and so on for
Iterations levels. Nothing is drawn on the way down. Only the leaves — the cells
that are never subdivided further — receive a mark, and every leaf receives exactly
one.
At depth n there are 4ⁿ leaves, each 2⁻ⁿ of the original size. The total ink
therefore stays roughly constant while the detail quadruples, which is why the piece
reads as the same texture at every depth rather than as a growing or thinning one.
No subdivision. One leaf, one mark, at the full size of the square. This is the
whole rule with the recursion removed.
What the mark is
Direction chooses between five mark sets:
| Direction | Marks | Chance |
|---|
| 0 | vertical or horizontal bar | 1/2 each |
| 1 | one of the two diagonals | 1/2 each |
| 2 | one of four quarter-circle arcs | 1/4 each |
| 3 | one of four semicircle arcs | 1/4 each |
| 4 | a filled dot | always |
Mode 2 is the canonical one. The four arcs are quarter circles of radius 2s
centred on the cell’s four corners, so each one enters the cell at the midpoint of
one edge and leaves at the midpoint of an adjacent edge.
That is the Truchet condition. Because every arc meets its cell boundary at an edge
midpoint, and every neighbour’s arc does too, arcs join across cell edges into
continuous curves — and the curves are not stored anywhere. They are what the eye
does with a hundred independent quarter-turns.
One division. Four marks, and already two of them may be continuing into each other.
Sixteen. Long curves have appeared, running through several cells each, and none of
them was drawn as a curve.
Each depth is a fresh drawing
The stages here do not nest, and it is worth saying why. Subdividing a leaf does not
add detail inside an existing mark — it deletes that leaf and replaces it with four
new ones, each of which draws its own mark from the next values in the random
sequence. So the mark that occupied a cell at depth two is simply gone at depth
three.
The progression is therefore the same rule at five depths, not one drawing being
refined. That is what recursive subdivision actually is; a depth-three drawing is
not a depth-two drawing with more in it.
Sixty-four marks.
Two hundred and fifty-six. At this size the individual arcs are small enough that the
eye stops resolving them and reads only the paths they form.
Eight renderings
The variants push past recolouring: each changes how the rule is applied, and some
change the rule itself.
| Rendering | Cells | Direction | What it does |
|---|
| Truchet | 256 | arcs | The canonical piece: neon cyan on black. |
| Reef | 1024 | arcs | Two passes layered — sixteen large, faint currents under a reef of fine threads. |
| Tangle | 256 | arcs | A four-colour palette: each of the four arc orientations draws in its own colour, laying the curve families bare. |
| Zigzag | 1024 | diagonals | Diagonals meet at cell corners, chaining into sharp zig-zags instead of smooth curves. |
| Weave | 1024 | bars | Axis bars in a two-colour palette: every vertical one thread, every horizontal another, woven into a plaid. |
| Scales | 256 | scallops | Semicircle marks bulge into corners instead of through them; ink on warm paper. |
| Stardust | 1024 | dots | Dots nudged off their grid points into a loose constellation of gold. |
| Window | 256 | arcs | The same arcs pulled in from the edge and framed — a window into the pattern. |
The same Truchet mechanism produces a completely different surface each time: arcs
join at edge midpoints into curves, diagonals join at corners into zig-zags, and the
jittered dots join into nothing at all.
The museum plate
The gallery ends with the piece the way it would hang on a wall. MuseumFrame
is a presentation layer, not a generative one: it takes any ISkiaArt piece,
clears to a gallery wall, and draws a frame, a mat with a bevel rule, and the
artwork contain-fitted into the opening behind them. The lead preset, Truchet,
appears in the gallery twice — once as the raw plate, once framed — because
the frame is a way of showing the work rather than a rendering of it, and none
of the other variants gets a framed copy.
The proportions are fixed: the opening is 65% of the canvas, the mat 32 pixels
and the frame 16 pixels around it, and the rest is wall with a soft drop shadow
under the frame. The artwork is clipped at the mat edge, so the piece’s own
margins stay inside the opening instead of bleeding onto the wall.
Determinism
The generator is Xoshiro256StarStar by way of SeededRandom, seeded from the
preset, and consumed once per leaf in the subdivision’s own traversal order — a
jittered preset consumes two more values per leaf, and a layered one runs a second
seeded stream for its underlay. It is one of the project’s stable generators, so the
same seed produces the same marks on any machine and any runtime.