Luminids water pass with river and terrain
A grove river just after sunrise

For a while, the water in Luminids had a strange problem: the checks were green and the screenshots were bad. In the game, rivers vanished, lakes behaved strangely, and whole areas fell apart the moment you moved through them.

I spent well over 100 hours on it. Getting out of that hole took an architecture change and fixing three blockers, and by the end average frame time had dropped from 1461 ms to 9.08 ms.

Two water systems at once

Before touching the architecture, I wrote down what water needed to do: rivers in their channels, lakes sitting cleanly in their basins, ocean where it should be, and all of it holding up in real play across the biome rings, not just in isolated tests.

That cut through the noise. I had two overlapping versions of the water system. The old authored path was still hanging around, the new field runtime was only partly in place, and validation could go green while what players actually see still looked wrong.

Water pass showing channel readability
Clear enough to see the bed
Water pass showing terrain and water shape
Looking up from a riverbed

One source of truth

So I stopped patching and changed the architecture. The hydro field got one job: be the source of truth. Instead of separate water bodies and the terrain bake pulling against each other, the field owns the truth, the renderer reads from it, and the rest of the game hooks into it.

It also made the right debugging questions obvious:

  • Is the field correct?
  • Is the renderer reading it properly?
  • Is the shader helping the world read better?
  • Is the validation actually testing what the player sees?

What was actually blocking it

Even after the switch, the first pass still looked broken, because three smaller problems had stacked up in a nasty way:

  • a legacy sweeper in the world runtime was hiding the new renderer
  • the mesher was taking an expensive sampling path and burning huge amounts of frame time
  • the custom shader was turning the water into a dark ribbon

Once those were out of the way:

Before
1461 ms
average frame time
After
9.08 ms
average frame time
Result
110 FPS
estimated from 0.7 FPS

At 1461 ms, the game was drawing a new frame roughly every second and a half. Now the water was actually on screen and the world was responsive again. It was the first time this felt like a real breakthrough rather than another temporary fix.

Making it look like Luminids

Then came a long run of smaller passes.

Biome-aware styling was a big one. Rivers and lakes pick up some of the identity of the ring they run through, so a meadow river looks different from a tundra or volcanic one. Around that came softer carving, cleaner shore bands, stronger banks, and better lake floors. Rivers in the harsher outer biomes were too small to read from standing height, so I widened and deepened them, and pool and riffle variation gives riverbeds more shape without breaking the surface.

One of the stranger bugs was the lakes. Some lake surfaces were effectively sloping by tens of metres across their own footprint, which is not a thing lakes do. Flatter terrain hid it for a while, but in the highland, tundra, and volcanic rings it broke the illusion instantly. Giving each basin a true level waterline changed those areas overnight. Outlet corridors, baked into the carve, then started connecting lakes to the wider water system.

Biome-aware water styling pass
Biome-aware styling
Water carving and shore band pass
Softer carving and cleaner shorelines
Lake basin and waterline pass
A lake sitting level in its basin
River depth and bank material pass
Bank materials along a grove river
Water mood and surface pass
Stone banks, with a cascade upstream
Clear shallow water over a stone bed in rocky terrain
Clear water over a stone bed

Underwater is now its own visual layer, with biome-aware colour, depth, and density: calmer in the plains, clearer and colder in the tundra, heavier in the volcanic highlands. Going under feels like entering a different part of the world.

For rapids and foam, I wanted movement only where the land earns it: soft meadow rivers, more whitewater on mountain, tundra, and volcanic drops, and foam that reads as flowing patches and streaks rather than noise.

Where it landed

What I like most is that water isn’t an isolated feature any more.

Terrain
Settled into the land

It sits in the terrain, not on top of it.

Biome identity
Matches the biome

Meadow and volcanic rivers no longer look alike.

Atmosphere
Soft where it should be

Meadow and plains water stays calm.

Movement
Rapids where the land drops

Whitewater only where the land drops.

Readability
Clear from every view

It reads well from above, on foot, and underwater.

Diagnosis
Built to inspect

Easier to test, debug, and improve without guessing.

That last one matters more than it sounds. Better probes and a much healthier split between truth, rendering, and polish make every future pass easier.

A sandy beach with palm trees and turquoise shallows shelving into open ocean
Shallows shelving into open ocean
Ground-level water readability
A Luminid on the beach
Open sea in the Coastal Belt with the seabed visible below the surface
Open sea in the Coastal Belt
Deep blue open ocean under a long bank of cloud
Deeper water further out
A Luminid floating over shallow green water with the sun on the surface
A Luminid over the shallows
Green shallows fading into deep blue ocean under a bright sun
Shallow to deep
Water final readability pass
Low sun over open water
The ocean under a pink sky, with the sun on the horizon and glowing motes over the water
Where it landed, as of April

What comes next

Waterfalls and rapids can go further, lake outlets can keep evolving, and shorelines and distant water both need more polish. But the foundation is right, and for the first time the water looks like part of the world rather than a layer on top of it.

More soon.

Nick

Later note: in August 2026 this ring-based world was replaced by a single island, water included. See Dev Log 18.