So, Photon Mapping: What is it, and how does it work?
Optics, Radiometry and Light
First, lets look at the basic physics of Light that lay as a foundation to the physical rendering techniques we are exploring. The Optics subfield Radiometry is the physics of measuring electromagnetic radiation, including visible light that we are concerned with:
Flux is radiant energy per unit time, or radiant power, denoted by . It’s the amount of energy flowing across a surface over time and is expressed in terms of watt:
Irradiance is the amount of incident radiant power that hits a surface per unit surface area:
Radiance is the amount of light from within some solid angle :
The Bidirectional Reflectance Distribution Function (BRDF), , is a function describing how light is reflected as some surface point x. It returns the ratio of reflected radiance along from the incident radiance from :
The Rendering Equation is our last piece of the puzzle. Intuitively, this equation describes how much light some surface point x will receive and reflect in the eye direction. One particularly useful form of the equation is the hemispherical formulation:
where is integration over the hemisphere above point .
Lets go on and look at the Photon Mapping algorithm! The algorithm is done in two stages: the photon tracing simulates the emission of photons and how they bounce in the scene, and (2) the photon gathering is the process of calculating a radiance estimate in some point with help of photons in the neighborhood of .
In this step, a number of photons is emitted from each light, the direction and intensity dependent on the light source itself and the total number of photons that are emitted. Furthermore, a method of storing the photons that are bounced in the scene is needed. This data structure is called the photon map and is typically a Point Hash-Grid or a KD-Tree.
If we have photons that should be emitted. The probability, , that a photon is emitted at some emitter, , is proportional to the relative power of :
where is the radiant flux of of emitter averaged over all frequencies.
The power, , of the emitted photon, , is:
The photon is put at position and is sent along the ray:
Each photon, , is emitted from some light source along . The photon will now be traced through the scene and bounce, , times. At each surface a copy of the photon is stored in the photon map. It will then either scatter or be absorbed, using the principle of Russian Roulette.
If the photon in scattered, a new direction is calculated with importance sampling with respect to the surface BRDF.
Consider we are looking at a point from the (eye) direction . The goal of the photon gathering is to use the photons stored in the photon map to calculate an radiance estimate at ; we want to approximate the rendering equation at . The radiance can be estimated with the following radiance estimate:
The photon map is used to find the photons in the neighborhood of . One way to do this is to always look at a constant neighborhood, for instance a sphere, and see how many photons we found. Another, better, way is to iterate outwards until we find photons. The photons that are found are used for the radiance estimate.
//Philip & Axel