|
 |
1.4.3.5 What is Photon Mapping?
Photon mapping uses forward raytracing (ie. sending rays from light sources) calculate reflecting and refracting
light (aka. caustics).
The following is from the homepage of the developer (Nathan Kopp):
"My latest fun addition to POV is the photon map. The basic goal of this implementation of the photon map is
to render true reflective and refractive caustics. The photon map was first introduced by Henrik Wann Jensen. It is a
way to store light information gathered from a backwards ray-tracing [sic] step in a data structure independent from
the geometry of a scene."
It is surprisingly fast and efficient. How is this possible when forward raytracing is so inefficient? For several
reasons:
-
Photon mapping is only used to calculate illumination, ie. lighting values, not to render the actual scene.
Lighting values do not have to be as accurate as the actual rendering (it does not matter if your reflected light
"bleeds" a bit out of range; actually this kind of "bleeding" happens in reality as well (due to
light diffusing from air), so the result is not unrealistic at all).
-
Photon mapping is calculated only for those (user-specified) objects that need it (ie. objects that have
reflection and/or refraction).
-
The rays are not shot to all directions, towards the entire scene, but only towards those specified objects. Many
rays are indeed shot in vain, without them affecting the final image in any way, but since the total amountof rays
shot is relatively small, the rendering time does not get inacceptably longer.
-
The final image itself is rendered with regular backwards raytracing (the photon mapping is a precalculation step
done before the actual rendering). The raytracer does not need to use forward raytracing in this process (it just
uses the precalculated lighting values which are stored in space).
As you have seen, for the photon mapping to work in an acceptable way, you have to tell the program which objects
you want to reflect/refract light and which you do not. This way you can optimize a lot the photon mapping step.
|
 |