The Fog Machine Was a Prop
The volumetric fog system now actually computes volumetric fog every frame, verified against the physics it claims to implement. No new pixels yet, that lands with the compositing pass, but the foundation underneath has stopped being scenery.

Somewhere in Lux there is a fog system: a 160 by 90 by 128 voxel grid, two carefully budgeted 14.7 megabyte volumes, compute shaders implementing proper Henyey-Greenstein scattering with sun transmittance from the atmosphere model, and a per-frame orchestrator with telemetry counters ticking up dispatch counts. Wire a FogField node and the counters counted, the logs logged, everything reported a healthy working fog system.
None of it ran. The orchestrator built its bind groups, threw them away, bumped the counters, and went home. A code comment claimed the real dispatch happened “in the framegraph module”, which would have been a fine arrangement if any such code existed. The shaders, which are genuinely good, sat compiled and idle every frame, like a fog machine wheeled on stage with the cord coiled neatly on top.
Plugging it in
This release records the actual compute work: the inject pass fills the voxel grid with scattering and absorption from your FogField pins, and the integration pass marches every screen column front to back, accumulating in-scattered light and transmittance slice by slice. The work rides the async compute queue alongside the rest of the frame, and the bind groups come from the shared cache, so the steady-state cost of all this honesty is zero allocations per frame.
The telemetry counters survive, but now they only increment when a pass is genuinely recorded. A counter that can lie is worse than no counter.
Tested against physics, not against ourselves
The new gate does not ask the counters anything. It runs the passes on a real device, reads the integrated volume back, and compares the transmittance curve against the Beer-Lambert closed form, the actual exponential the integrator claims to implement, computed independently in the test. Uniform fog has an exact analytic answer, and the GPU now produces it to within half a percent. A system that records no passes reads back zeros and fails instantly; a golden image can be quietly re-baked, but e to the minus sigma t cannot.
What it buys you
Today, candour: your FogField pins drive real GPU work whose output is physically correct, and the performance HUD numbers for it mean what they say. What it buys you next is the point: the integrated volume this work produces is exactly what the upcoming compositing pass consumes to put depth-aware fog into the frame, with geometry dissolving into it at the right distances. The reliability run cleaned up how Lux talks to you; this starts the run on what it shows you.