Lodestar Atlas

Generated samples and design decisions for a Voronoi-volume base-building sandbox

View the Project on GitHub Glyphcore/lodestar-atlas

Procgen mechanisms

Each section is one mechanism, one figure, and the numbers it produced. Reliability: measured unless noted. Prior art is Shardfall’s 2D Voronoi field (self-reported factors); the factors are reused, no code is.

1. Index-keyed sites

Every site is a pure function of (seed, integer index): a lattice point plus a hashed offset. Any window of the world can be rebuilt alone and neighbours agree exactly, so there is nothing to stitch.

jitter

Cell-area variation (CV, mean over seeds 0-3) at jitter 0 / 0.5 / 1.0 / 1.5 is 0.002 / 0.123 / 0.25 / 0.332. Jitter 0 is a plain grid; around 1.0 the lattice stops being readable but cells stay similar in size.

2. Cluster dropout (the sprawl)

Sites vanish in noise-shaped patches, with the lowest-hash site of every 2x2 (3D: 2x2x2) index block always kept. That guard bounds the largest empty region and keeps the function local.

dropout

Jitter 1.0 alone: area CV 0.25. With dropout: 0.503, so cell sizes spread out about twice as much, which is what gives the sprawling look. In the 3D volume sample the CV goes from 0.248 to 0.689.

3. Nested partition

Cells group into sectors and sectors into regions by repeated power diagrams (weights), with an optional warp for a “loose” outline.

nested

Seed sample: 401 cells -> 37 sectors -> 6 regions; plain and loose give the same counts, only the borders move.

4. Convex-corner softening

Opening with a disk rounds convex corners only; concave corners stay sharp, so overhang undersides keep their edge.

soften

On the seed shown the rounding removed 0.4% of solid pixels.

5. Moving to 3D

The same keyed sites in three dimensions; a vertical cut drifts, splits and loses cells as z rises. No height map.

slices

6. From solid/open cells to a smooth surface

Density is a softmax-weighted average of the 8 nearest cells’ solidity (+1 solid, -1 open); k is the softness.

density

An earlier two-nearest bisector blend never moved the zero surface at any k, so it was dropped. Solid share of the cut stays ~0.51-0.52 for k = 0.02 / 0.5 / 1.2: smoothing changes shape, not volume.

7. The volume

Same field, same softness, only the site distribution differs. Floors, overhangs and caverns come from one field.

volume

Numpy ray-march, not a production mesher. Surface extraction options (marching cubes, Transvoxel, dual contouring, surface nets) are listed in research; none is chosen yet.

8. Structure on the adjacency graph

Solid cells are nodes, Delaunay neighbours (edge < 1.7) are edges. Support is 1.0 at bedrock (z < 1.6), -0.09 per hop, one priority-queue pass, no physics solve.

support

Seed 3: 1318 cells, 465 solid, 114 anchors, 6365 edges. Digging a radius-2.0 pocket (32 cells) at the weakest mid-support site left 10 more cells unsupported. Caveat: that count depends on graph density; a looser edge threshold made the graph so redundant a 1.5 pocket cost only 2 cells. Treat this as a demonstration of the mechanism, not a tuned rule.

Raw numbers: images/metrics.json.