FIELD NOTES — ATMOSPHERE
Weather that comes and goes
One day, four systems: storms that roll in on a shared clock, rain that wets the ground and leans with the wind, birds that keep away from your machines, and air that stacks the far hills into tiers. What the data allowed, what it refused, and the two shader bugs that cost an hour each.
Until yesterday the sky over an Orebound map did exactly one thing: it turned. Day became night, the sun moved, and apart from a bank of ground fog that came and went in the valleys, the weather was whatever the server's admin had dialled in — the same cloud cover, the same haze, every minute of every day. Nothing moved in the middle distance either. Your belts ran, the trees swayed, the sea rolled. Everything further than a hundred meters was a painting.
We sat down with four ideas borrowed from how landscape painters and level designers fake scale — atmospheric perspective, dynamic weather, "the weave of the world" (small things moving far away), and framing — and checked each against what the game already did. Three of the four shipped the same day. Here is what they are, and what the map's own data had to say about the fourth.

FIG. 1 — Fair weather, late morning. The hills behind the lake are the same colour as before; the ridge behind them is not.
A storm nobody has to send
The first rule we set ourselves was that weather must be the same for everyone on a server without the server saying a word about it. Orebound already had a trick for that. The ground fog cuts the shared sky clock into spells of a dozen minutes, hashes each spell's number to decide whether it is foggy, and fades from one spell into the next. Every player's machine does the same arithmetic on the same clock and gets the same answer, so there is nothing to synchronise.
Weather is that trick with four outcomes instead of two. Every eighteen minutes — a game day is thirty — the hash picks clear, fair, overcast or storm by weights the admin sets, and the sky fades over five minutes into the next spell. A kind is nothing more than a set of multipliers on knobs the renderer already had: how much of the sky the clouds cover and how dark their bellies are, how thick the haze is, how bright the sun, how hard the wind blows, how much ground fog is allowed. "Fair" is all ones, so a server that switches the weather off looks exactly as it did last week. "Storm" shifts the cloud cover up by more than half, doubles the haze, cuts the sun to a third and the wind up to more than double — and because the trees, the cloud drift, the sea swell and the lake ripples all read that one wind, a storm builds on the water on its own.
The wind sets the waves' size now, which it never did before. A storm's swell is one and a half times the fair-weather swell, capped there on purpose: push a Gerstner wave's amplitude past that and its crest folds over itself.
Rain, and what it does afterwards
Rain is a sheet of four thousand streaks that lives in a box twenty-eight meters wide around the camera. Each streak is a seed; the shader drops it along the fall direction, leans it with the wind, wraps it back into the box when it falls out the bottom, and turns it to face you. The CPU touches nothing per frame but a dozen numbers. Where the ground under you is snow, tundra or a frozen lake, the same sheet becomes round flakes that fall at a tenth of the speed and sway as they go.

FIG. 2 — The same spot in a storm. The wind leans the rain; the ground is wet and the lake has lost its mirror.
Two things about rain are worth telling. The first is that our rain was invisible for an hour, twice, and the shader was right both times. The first hour went to a word: half is reserved in the shader language the browser speaks, and a reserved word in a variable name does not fail loudly, it fails silently — the sheet just never compiles and the sky stays dry. The second hour went to a triangle. A rain streak is a thin quad stretched along its fall direction, which is downwards, and stretching a quad downwards instead of upwards flips the order its corners are drawn in. The graphics card, which culls any surface facing away from you, decided every streak was the back of something and threw it away. We found that by painting the streaks opaque red and counting red pixels — zero — then bisecting the shader one line at a time in the running game. The fix is a single flag that tells the card to draw both sides.
The second thing is that white rain is invisible against an overcast sky, which is where most of it is. Rain in Orebound is a mid grey-blue, darker than the sky behind it and lighter than the wet ground below.
And the ground does get wet. Rain raises a wetness value that the terrain shader already understood — it is the same darkening and gloss the sea leaves on a beach — over the whole map, and when the rain stops the ground dries over six minutes. Wetness is a pure function of the weather schedule, not a thing that accumulates on your machine, so a friend who joins your Site an hour into a storm sees the same puddles you do.

FIG. 3 — Nine in the evening, same storm, and the ground here is cold enough that the storm snows. Lightning goes with it, but a flash lasts a fifth of a second and the screenshot missed every one.
Lightning is the last piece. In a storm, every second and a half there is a one-in-seven chance of a flash: a fifth of a second during which the sun, the sky light and the undersides of the clouds all jump, with a flicker in the middle. At night a flash more than doubles the brightness of the whole frame and then it is gone. Thunder is owed; the sound bank has no clip for it yet.
Birds that keep away from your factory
Orebound has had birdsong since the sound system went in. How often a bird calls depends on the ground around you — a forest at dawn calls every second and a half, a desert at noon every forty seconds — and the calls thin out near loud machines, so a factory goes quiet. None of that had a body.
Now it does. Flocks of six to sixteen birds spawn on a ring a hundred and ten meters out, cross the sky on a wandering path at the height of the treetops, and leave. How many are in the air comes straight from the audio's own rules: the biome mix around you, the time of day, the noise of the loudest machine nearby, and now the weather, which grounds them in a downpour. A flock already in the air finishes its pass when the number drops; nothing vanishes mid-flight. Each flock is one draw call, the birds a hand-built silhouette whose wing tips the shader flaps on a timer. They read as what they are: dark specks against the sky that are not there when you build a smelter under them.

FIG. 4 — Three flocks over the headland. "Birds retreat from industry" was a rule in the audio; now you can watch it happen.
Waterfalls, and what the map said about them
The third moving thing on our list was waterfalls. A river that drops over a lip, a sheet of white water, mist drifting off the pool — visible from the next valley, the kind of landmark a vista needs. The plan was to find them in the map's own water heights: wherever a river's surface steps down more than a meter between neighbouring cells, hang a falls there.
So we scanned the reference map's forty-two thousand river vertices. Across one meter, three of them drop more than a meter. Across two meters, a hundred and thirty-eight. Across four, nine hundred and forty-one, of which a hundred and twenty-two drop more than two. There is no vertical step anywhere on the map; the river generator grades its beds smoothly, and the steepest places are short chutes of a meter or two over a couple of meters' run, which the water shader already paints as rapids.
That is a hard no on waterfall sheets without changing the generator, and changing the generator makes a new world, which is not a thing we do in an afternoon. What the data does support shipped instead: the chutes are detected at load — eighteen of them on the reference map, clustered where they sit together — and the nearest ones breathe mist, a few dozen soft puffs rising and fading over the plunge. It is subtle, as mist should be, and it is honest. The step pass that would make real falls is written down as the way to get them, with the detector already knowing where they would go.
Air you can see through
The last change is the one in the first picture, and it is two numbers. Fog in Orebound was one blend: the further a thing was, the more it became the colour of the sky at the horizon, at one rate. Real air does two things at different rates. It takes a surface's light away — distant things go dark and lose contrast — and it adds the sky's light in front of them, and the blue part of that light arrives first. The ground fog, the height fog and the drift all still produce one transmittance per pixel; the blend at the end now raises it to one power for the darkening and a slightly different power per colour channel for the sky's light. The horizon is unchanged, because at infinite distance both terms give you the sky. The middle distance is cooler and flatter than it was, and a ridge in front of a ridge in front of a ridge finally reads as three.
What it costs, and what is still rough
Everything above is cheap by design. The weather is arithmetic on a clock and a dozen uniform writes. The rain is one draw call of eight thousand triangles; the birds one draw call of at most a hundred and sixty; the mist one draw call of a few hundred points; the fog split two power functions per fogged pixel. Rain and snow are off on the low graphics tier, as the ground fog and the god rays are; the birds stay on it with three flocks.
Still rough: overcast skies are a darker blue, not grey, because the kinds only scale what the time-of-day palette gives them, and a grey key per kind is the next step if that reads wrong on a dull afternoon. Rain falls through a roof you look at from outside; only the roof over your own head holds it off. Machines and belts stay dry while the ground around them soaks. There is no sound for rain or thunder, and the cascades do not roar. And framing — the cave mouth and the tree-lined road that open onto a view — is still on the list, waiting for a world generator session of its own.