Atmospheric Scattering Effects

2010, Dr. Lawlor, CS 481/681, CS, UAF

Light interacts with large masses of air in one of two ways:landscape shading to blue sky in the distance
Eventually, you can't see the difference between distant geometry and the sky, because all the geometry's light has been scattered out, and replaced with scattered-in sky light.

Numerically, the fraction of geometry light remaining after travelling a distance t, which we'll call G(t), starts off with G(0)=1.0, and drops off at some rate until G(infinity)=0.0.  We have to assume something about the rate at which the atmosphere scatters light.  For example, if we assume the geometry light gets darker by 10% for every unit distance, or:
    d G / d t = -0.1

Then we can integrate to find G(t)=1.0-0.1*t.  The only problem with this is that G(10)=0.0, and then G goes negative!

A better choice is to assume that the sky scatters out 10% of the *existing* light per unit distance, or:
    d G / d t = -0.1*G(t)

The solution to this is a function that is its own derivative, G(t) = e-kt.   Then
    d G / d t  = -ke-kt
so we can read off that the scattering rate k=0.1.

In a raytracer, if a ray travels a distance t, then we need to darken the geometry at the end of the ray by G(t) = e-kt.  The fraction of atmosphere light scattered into the ray is 1.0-G(t).  See the example code for how this is implemented!

Typical scattering rates for the real atmosphere are a few percent per mile for clear air; in foggy conditions this reach to several percent per foot!