The thing your eyes keep catching
You're deep into an open-world RPG, riding across a grey plain, and something about the horizon feels slightly off. Not broken. Not ugly, necessarily. Just theatrical. The fog sits on the world like a stage flat, a clean gradient that fades geometry into uniform murk at a suspiciously consistent distance. Real fog doesn't do that. Real fog is rude and uneven and has opinions about valleys.
This is one of the oldest optical lies in interactive graphics. Most players sense it without being able to name it.
Let's name it.
Depth fog versus actual scattering: two completely different physical ideas
Real atmospheric haze is the result of light bouncing off suspended particles, water droplets, dust, and aerosols, before it reaches your eye. The technical name is Mie scattering. What it produces is genuinely complex: distant objects shift toward the ambient sky colour, contrast drops, saturation drains. Critically, this happens at different rates for different wavelengths. Reds travel further than blues through dense haze. Mountains photographed at distance go purple-blue at their peaks and warm amber at their bases, because the light path through the atmosphere isn't uniform across their surface.
Game engines, especially before the current generation, handled this with something called linear or exponential depth fog. The mechanic is almost embarrassingly simple: every pixel gets blended toward a single fog colour based purely on how far it is from the camera. Past a set distance, everything fades uniformly toward, say, RGB (200, 200, 210). No wavelength bias. No variation by height. No difference between a pixel in a shadowed gorge and one on an open ridge at the same camera distance.
The game doesn't care. The math is cheap, and cheap matters when you're rendering sixty frames per second.
That uniform blend is exactly what your eye keeps catching. Real haze respects topography. Game depth fog does not.
A worked example: two pixels, thirty metres apart
Imagine a scene with exponential depth fog kicking in hard at 400 metres. There's a lake at 380 metres and a cliff face at 410 metres directly behind it.
In the game, both get almost identical fog coverage. The cliff barely exceeds the threshold, so it ghosts slightly more than the lake, but both sit inside a thin uniform veil at roughly the same saturation level.
In real life, the lake sits in a low depression where cold air pools. Actual haze density is highest there, not at the cliff behind it. The cliff, elevated and exposed to wind, might be almost crisp by comparison. A photographer at that same position would see the lake half-dissolved in pale murk while the cliff reads with sharp edges above it.
That inversion, haze thickest in the low spots, is something exponential depth fog literally cannot produce. It has no concept of altitude. It knows only one number: distance from the camera.
What modern engines do to close the gap
The industry has been aware of this for years, and the solutions are genuinely interesting.
Height-based fog layers are now standard in engines like Unreal Engine 5 and Unity's HDRP pipeline. Instead of a single fog value, the renderer stacks at least two: one layer that accumulates in low areas, simulating the cold-air-pooling effect, and a thinner atmospheric scatter applied globally by altitude. The difference is immediately visible. Valleys fill with milky white mist while hilltops stay relatively clear.
Volumetric fog goes further. It treats the air itself as a participating medium, a volume that scatters and absorbs light differently depending on where you sample it. A torch carried through volumetric fog in Metro Exodus or Red Dead Redemption 2 actually illuminates the particles around it, creating a visible cone of scattered light. Physically closer to real behaviour. Also expensive: volumetric fog in a modern AAA title can consume two to four milliseconds per frame at 1080p, which is a meaningful chunk of a 16ms frame budget.
Even so, wavelength-dependent scattering is almost always faked. Engines don't actually simulate Mie scattering per wavelength in real time. Instead, artists hand-tune fog colour at different distances and heights, essentially painting the effect that physics would produce. Talented environment artists can get remarkably close. But it's craft, not calculation, and the difference matters more than the results sometimes suggest.
What people assume that isn't quite right
The common assumption is that more realistic fog is purely a hardware problem: faster processors, better simulation, done. That's only partially true, and honestly it misses the more interesting argument.
Physically accurate atmospheric scattering would make a foggy forest look correct, but it would also mean the art director loses the ability to say "I want the player to see that tower from here, even though real physics would hide it." Fog in games is a storytelling instrument. Silent Hill's fog was a hardware limitation on PlayStation 1 that became the defining aesthetic of a horror franchise. Developers have spent thirty years learning to use that instrument, and they are not giving it up.
Physical accuracy and artistic intent are genuinely in tension. A renderer that perfectly simulated real haze would strip designers of a tool they've refined across an entire medium's history. So the gap between game fog and real haze isn't entirely a failure to solve a technical problem.
Part of it is a deliberate trade, kept open on purpose.
Found yourself squinting at a distant mountain in a game and thinking something looked painterly? That's the trade you're seeing. The engine knows the real answer.
It just chose a different one, and the best game environments don't try to replicate atmospheric optics so much as produce the feeling of atmosphere. Which is a subtly different ambition, and, if you think about it, occasionally a more interesting one than getting the physics right.