Painter

Explore

Generation Order

Three ways to fan out from the seed tile, and what each one trades off

Building the map layer by layer

Tiles can't all generate at once \u2014 each one needs at least one finished neighbour to read edges from. Generation goes in waves: wave 0 is the seed tile, wave 1 is its immediate neighbours, wave 2 is the next ring out, and so on. Tiles in the same wave are independent of each other and can generate in parallel. Think of it like a construction crew: foundation first, then walls, then roof.

Theory: DAG Scheduling → Playground: Spiral Simulator →

Why this matters for your map

A 20x20 grid has 400 tiles. At about 8 seconds each on one GPU, that's nearly an hour if you generate them one at a time. Running independent tiles in parallel across four GPUs cuts the same map down to about 12 minutes \u2014 the difference between "wait for lunch" and "ready before your coffee cools."

|

Click a tile to set the spiral seed.

(0,0) W4
(0,1) W3
(0,2) W2
(0,3) W3
(0,4) W4
(1,0) W3
(1,1) W2
(1,2) W1
(1,3) W2
(1,4) W3
(2,0) W2
(2,1) W1
(2,2) W0
(2,3) W1
(2,4) W2
(3,0) W3
(3,1) W2
(3,2) W1
(3,3) W2
(3,4) W3
(4,0) W4
(4,1) W3
(4,2) W2
(4,3) W3
(4,4) W4
All waves shown

Wave Timeline

W0
1
W1
4
W2
8
W3
8
W4
4

Click a tile to see its wave assignment and dependencies.

Wave Legend

Wave 0 (1 tiles)
Wave 1 (4 tiles)
Wave 2 (8 tiles)
Wave 3 (8 tiles)
Wave 4 (4 tiles)

Strategy

SPIRAL — BFS outward from the seed tile. Each ring becomes a new wave. Maximizes context from completed neighbors.

Strategy trade-offs

StrategySeam coherenceMax parallelismMemory pressureBest for
SpiralHighest — every tile has the most finished neighboursLow — one ring at a timeLow — neighbours written before targetQuality-first maps, rivers crossing many tiles
Row scanMedium — one finished left neighbour, none aboveHigh — all tiles in a row can run in parallelMediumSpeed-first drafts, simple terrain with no cross-row features
Anchor fillHighest at anchors, lower at fill tilesHighest — all non-dependent tiles run togetherHigh — multiple anchors held in memory simultaneouslyLarge grids on multi-GPU setups where throughput matters most