Participating media

It's been a while, but I'm back with a render that's crazy delicious. I've recently looked into rendering of participating media like fog and smoke, and applied this to my ray tracer. Currently I've implemented constant density fog and fog that's inverse exponential with respect to height. The fog density affects scattering, where photons bounce off fog particles and continue to travel in other directions, and absorption, where photons are absorbed by a fog particle. To simulate this I use an exponential probability distribution to compute the distance until the next scattering and absorption events for a given ray. If the distance is less than the distance until the ray hits an object the ray is scattered or absorbed depending on the lower distance. Here's the result: