All projects

Systems & Graphics

Strata

A voxel engine in Rust

A world built from blocks, rendered from scratch.

Role
Engine design and development.
Status
Early build, private repository
Year
2026
Demo coming soonPrivate repository
First-person view in Strata of a shoreline made of blocks, with grass, sand and water under a bright sun.
In-game screenshot captured from the running engine.

01

The problem

Voxel worlds look simple and hide a lot of work. Terrain, lighting and meshing are all expensive per chunk, and every block edit has to ripple through its neighbours fast enough to feel instant.

I wanted to build one from scratch to learn where the time goes, and to measure how well that work spreads across CPU cores instead of assuming it does.

02

My contribution

I designed and built the engine: the job system, world and chunk storage, terrain generation, lighting, greedy meshing, fixed-tick player physics, the wgpu renderer, UI, saves and the benchmark harness.

It is an original project. The art, UI, blocks and world design are its own, and it loads no assets from any other game.

  • Rust
  • wgpu
  • Rayon
  • Procedural generation
  • Game engine

03

How it works

  1. Generate

    Seeded terrain, seven biomes, caves, ores and trees are generated per chunk on a bounded priority job system.

  2. Light

    Sky and block light are flood-filled per chunk. An edit remeshes the affected chunk and its neighbours.

  3. Mesh

    Chunks are meshed from immutable snapshots with greedy merging, so workers never need to lock the world.

  4. Draw

    A wgpu renderer streams the meshes to the GPU with ambient occlusion, water and a day and night sky.

  5. Simulate and save

    Fixed-tick player physics and raycasting drive mining and building, and worlds persist to disk.

04

Engineering details

  • A job system built for measurement

    A bounded priority queue on a dedicated Rayon pool, with backpressure, panic handling and per-job metrics, so scaling can be measured rather than guessed.

  • Immutable meshing snapshots

    Meshing reads a snapshot of chunk data, which keeps workers independent. Greedy meshing is tested face-for-face against the unmerged output.

  • Palette-compressed chunks

    Chunk storage uses palettes and is property-tested against a simple dense model.

  • Benchmarks that check themselves

    The headless benchmark rotates worker counts every round, reports the median of 7, and hashes blocks and mesh vertices to prove every worker count produced identical output.

  • A roadmap with evidence

    Each system is marked not started, in progress, implemented, tested or verified, with the evidence or the gap written next to it.

05

Results & limitations

Chunk generation, lighting and meshing all scale well past the physical core count on the one machine I measured, with workers about 98 to 100% busy, so the job queue is not the bottleneck. The numbers are one laptop, one seed and one session, and the benchmark doc says what they do not show.

  • 6.7x

    chunk generation speedup at 12 workers

    Ryzen 5 5500U (6 cores, 12 threads), seed 12345, median of 7 rounds across three runs. Identical output at every worker count.

  • 7

    biomes

    Ocean, shore, highlands, dunes, frostland, woodland and meadow.

  • 4.8x

    meshing cost once lighting was added

    About 0.7 ms to 3.3 ms per chunk on one worker. Light solving is now the largest per-chunk cost and the next target.

Limitations and honest caveats

  • This is an early build. There is no hunger, tools, creatures or crafting yet.
  • It is an original engine, not an AAA engine and not a Minecraft replacement.
  • Benchmarks are one laptop CPU, one seed and one session. Low worker-count speedups varied between runs and should not be quoted precisely.
  • Some systems are verified by scripted runs rather than hand-testing. The roadmap says which.
  • The repository is private for now, so there is no public source link. Screenshots are captured from the running game.