A while ago I played around with atmospheric scattering in my webgpu renderer.
The results were generally positive, but I didn’t like the traditional approach of marching rays through the atmosphere for every pixel. It works, but it’s a lot of calculations.
At the time, I read a paper by Sebastian Hillaire of Epic Games, called "A Scalable and Production Ready Sky and Atmosphere Rendering Technique”.
There was a small burb in there about creating a LUT for volumetrics. In the grand scheme of things, for the sky - it’s not the most important part.
A few weeks ago, I came back to it, and my goal was to add both the atmosphere, as well as volumetric lighting to the engine.
What I mean by that are things like light shafts
Volumetric fog
And local light scattering events
Somewhat unsurprisingly, this was achieved years ago, the first reference I could find dates back to 2014, SIGGRAPH paper titled “Volumetric Fog: Unified compute shader based solution to atmospheric scattering” by Bartlomiej Wronski, Ubisoft.
The paper/presentation had basically the same goals
The funny thing to me, is that I found this paper in a reverse order. I read everything from 2020s, then papers from 2017-19, then 2016 and only later did I get to this one.
I highly recommend the paper, it’s quite easy to read and has pretty much everything you need, the tech has changed surprisingly little since then.
The first thing I was going for were light shafts (aka “God Rays”), and with a bit of effort, here’s what I got:
The basic idea is quite simple, you pre-integrate scattering and transmission to a froxel texture (3d texture aligned on NDC view frustum, FRustum VOXEL)
The tricky part for me was the physics, but after a bit of reading it turns out to be way simpler than it seems at a first glance, it’s all about scattering and transmission
For now I put a pause on it, as I hit a point where denoising is necessary and other unpleasant parts of turning theory into production-ready technique. But I’m super excited about it in general. The whole thing takes sub-1ms time to compute even on 10 year old hardware, and during shading it’s basically free (1 texture lookup).
Other interesting paper I would recommend is:
- “Physically Based and Unified Volumetric Rendering” by Sebastien Hillaire, from SIGGRAPH 2015, back when he was at EA
This is a recurring theme for me, both in graphics research and other technical areas:
Something doesn’t work, I don’t understand why, so I read a dozen papers and write a few prototypes and suddenly it all makes sense.


































