Alternate photometric functions
Posted: 29.07.2006, 20:50
One of the irritating shortcomings of Celestia has been it's use of the Lambert model to calculate the illumination for the surfaces of all planets. This simple function gives fraction of reflected light at a point on a surface as:
f(w_i, w_o) = cos(theta_i)
where w_i is the direction of the incoming light and the outgoing direction, and theta_i is the angle between the surface normal and incoming light. The function doesn't depend upon the outgoing light direction. Very few surfaces are purely Lambertian. One obviously non-Lambertian surface is the Moon--even though it's nearly spherical, it appears as a flat disc in the sky. The function above says that if the Moon is Lambertian, the apparent brightness of the Moon should fall off near the edges--although this is how Celestia currently draws the Moon, a quick look at a full Moon will show that it's not correct.
The Lommel-Seeliger model is frequently used in planetary photometry. It's slightly more complex than the Lambert model:
f(w_i, w_o) = cos(theta_i) / (cos(theta_o) + (cos(theta_i))
And here's a series of images from Celestia to demonstrate the difference. There are two sets of three images showing the moon at phases of 0, 90, and 140 degrees.
Lambert model:
Lommel-Seeliger model:
Note that the full Moon looks (incorrectly) like a ball with the Lambert model, but like a flat disc with Lommel-Seeliger. Also notice how the crescent Lambertian moon almost disappears, but the Lommel-Seeliger model produces a beautiful, bright sliver.
The Lambertian model is more accurate for the gas giants, where limb darkening is apparent in telescope and spacecraft images. But, the dustiness of the surface of the Moon gives it strong non-Lambertian characteristics. I'm not sure yet how to expose alternate photometric models in Celestia, or exactly which ones to use. Other candidates for lunar-type surfaces are the Oren-Nayar and Hapke models. I've already experimented with Oren-Nayar; the Hapke model seems the most realistic model, but it's complex enough that using it in Celestia might hurt performance even on high-end graphics card.
--Chris
f(w_i, w_o) = cos(theta_i)
where w_i is the direction of the incoming light and the outgoing direction, and theta_i is the angle between the surface normal and incoming light. The function doesn't depend upon the outgoing light direction. Very few surfaces are purely Lambertian. One obviously non-Lambertian surface is the Moon--even though it's nearly spherical, it appears as a flat disc in the sky. The function above says that if the Moon is Lambertian, the apparent brightness of the Moon should fall off near the edges--although this is how Celestia currently draws the Moon, a quick look at a full Moon will show that it's not correct.
The Lommel-Seeliger model is frequently used in planetary photometry. It's slightly more complex than the Lambert model:
f(w_i, w_o) = cos(theta_i) / (cos(theta_o) + (cos(theta_i))
And here's a series of images from Celestia to demonstrate the difference. There are two sets of three images showing the moon at phases of 0, 90, and 140 degrees.
Lambert model:
Lommel-Seeliger model:
Note that the full Moon looks (incorrectly) like a ball with the Lambert model, but like a flat disc with Lommel-Seeliger. Also notice how the crescent Lambertian moon almost disappears, but the Lommel-Seeliger model produces a beautiful, bright sliver.
The Lambertian model is more accurate for the gas giants, where limb darkening is apparent in telescope and spacecraft images. But, the dustiness of the surface of the Moon gives it strong non-Lambertian characteristics. I'm not sure yet how to expose alternate photometric models in Celestia, or exactly which ones to use. Other candidates for lunar-type surfaces are the Oren-Nayar and Hapke models. I've already experimented with Oren-Nayar; the Hapke model seems the most realistic model, but it's complex enough that using it in Celestia might hurt performance even on high-end graphics card.
--Chris