Clouds rolling through valleys in the Luminids world

Two things went in this month, and they turned out to be the same problem wearing different hats: the terrain pass, and a complete rebuild of the clouds.

The problem in both cases is that generated things look generated. You can glance at a landscape and know a computer made it, and you usually can’t say exactly why. Most of this month went on working out why.

Terrain that looks shaped, not sprayed

The first version of the terrain was correct and lifeless. Elevation changed, biomes existed, nothing was broken, and there was no reason to walk in any particular direction.

What was missing turned out to be flow. Real landscape has direction in it. Water has been somewhere, mass has gathered somewhere, a valley leads somewhere. Noise has none of that. It’s locally plausible and globally meaningless, so you get terrain that looks fine in a screenshot and feels like static when you move through it.

So this pass is less about detail and more about legibility:

  • Slopes soften instead of stepping, so the eye can follow a hillside all the way down
  • Elevation, texture and lighting are decided together rather than layered independently, which is what stops a snowline landing halfway up a green hill
  • Biome edges get room to transition, because the boundary is where a generated world usually gives itself away
  • Shapes are allowed to gather mass, so a ridge looks like one ridge rather than a row of bumps

The test I keep coming back to is a simple one: stand still, look at the horizon, and see whether anything makes you want to walk towards it. If the answer is no, the terrain has failed, however good the material work is.

This was only a first pass, and I didn’t solve it in one go. It took several more months and eventually became a formal layered process, which I wrote up in Dev Log 6.

Clouds in daylight flowing through valleys in Luminids
Morning. The clouds sit in the valley rather than above it.

Why the old clouds had to go

The old clouds were a sky texture. They looked acceptable, and they were basically wallpaper: they sat above the world and had nothing to do with it.

The tell is parallax. If clouds sit at an infinite distance, walking towards a mountain doesn’t change your relationship to the weather, and part of your brain registers that the sky is a painted backdrop even if you never consciously think it.

So the rebuild had one rule: clouds have to exist in the same space as the terrain.

Now they flow through valleys instead of over them. They catch on ridgelines. They pass between you and a hillside, which is the single most convincing thing weather can do.

Clouds at night thickening along mountain slopes in Luminids
Night. Thicker, lower, and sitting on the slopes.

Clouds that know what time it is

The other half is that the clouds behave differently through the day, and not just by changing colour.

In the morning they’re thin and high and moving, and light comes through them. By night they thicken and settle low against the slopes, and they stop transmitting light and start blocking it. The same system produces both. What changes is density, height and how much light gets through.

That matters more than it sounds. Luminids has no combat and no timers, so the sky does a lot of the work of telling you what time it is and what kind of evening this is.

Why bother

None of this makes the game more efficient to play, and that’s fine. I want a world that holds up when nothing important is happening, because in Luminids, most of the time, nothing important is happening. That’s by design.

Next month is trees, which I’ve been putting off because procedural vegetation is where a lot of generated worlds go to look obviously generated.

Nick