Track 1 of 7

Global Materials, Spline Rivers & The World Takes Shape

Seth Blakely
manabat dev-log prototype world-generation pangea

Two weeks of world generation work — each one a distinct shift. Here’s what happened.


Week 1 — Global Materials & The World Takes Shape

Up until now, each biome was rendering through its own isolated material, which meant hard edges, mismatched textures, and no visual continuity at biome borders. This update fixes that at the foundation.

What shipped:

  • Single global world material — the entire world mesh now renders through one master material (WorldGen_Mat_World), giving us real shader-level control over biome blending
  • Biome texture array system — all biome textures are baked into arrays the shader can sample per-voxel, so transitions between biomes are driven by data instead of seams
  • Underwater biome — shallow and deep water variants, each with their own heightmap pass; the ocean floor is now a real biome, not a void
  • Global hydrology pipeline — precipitation, flow accumulation, and erosion now run once across the entire world instead of per-biome in isolation (this was quietly causing rivers to end abruptly at biome borders and restart misaligned on the other side — squashed)
  • World Tree placeholder — dropped a placeholder prefab into the scene; more to come on that
  • General biome settings tuning across the board

The texture bake artifact is ~1.7GB so it stays out of the repo — regenerable from the editor in one step. Pipeline is clean.


Week 2 — Scrapping Flood Rivers, Going Spline-Based

The flood and erosion river system had to go. Water accumulating from precipitation, carving downhill, forming rivers organically — it kept producing stair-step artifacts, deep canyon cuts, and rivers that read more like geological trauma than natural waterways. Tuning parameters wasn’t closing the gap. Scrapped it and rebuilt from scratch.

How the new system works:

Rather than simulating water physics across the whole heightmap, rivers are now traced as paths. A walker starts at a source point and steps downhill toward the sea, sampling the terrain at each step with a forward cone scan. It picks the best direction — lowest destination height, with a small turn-penalty to keep paths natural — plus a bit of random angle jitter so no two rivers look identical.

When the walker gets stuck, it doesn’t give up. It has a climb allowance to push over small ridges, a stagnation limit to catch plateau-circling, and a “leap mode” that doubles step length when really stuck, jumping past cliff seams to find downhill on the other side.

Every river logs why it ended — reached the sea, stagnation limit, boxed in, walked off the world edge — so failures are diagnosable straight from the console.

Where things stand:

This is Pass 1 — splines are traced and visualized (smooth Catmull-Rom curves, color-coded by termination reason) but terrain hasn’t been carved yet. Next passes: stamp depth along the spline, slope the banks, smooth the channel, retire the old flow system.

After that: spill detection. Rivers that hit a natural basin currently terminate — the next pass implements a priority-flood spill finder to route them over the basin rim or turn them into endorheic lakes. Mountain basins over cave systems get flagged as drain points — waterfall-into-cave territory once the cave carve pass ships.

Foundation is solid. The world is starting to feel like one coherent thing.

Stay Updated

Get development updates, behind-the-scenes insights, and be the first to know about ManaBat progress.

No spam, unsubscribe anytime.