|
|
So you basically did a long ray trace?
There is more to it than that. Path tracing in itself is basically a long (in fact infinite unless modified--see below) ray trace. Instead of spawning multiple rays at intersections you always follow a single path unless probabilistic splitting is used. When a ray intersects a surface a reflection direction is chosen stochastically based on the BRDF of the surface. After each reflection, the power of the ray is reduced. Russian roulette is often used to terminate rays at random to end an otherwise infinite process. The probability of a path terminating is inversely proportional to its power. This basically solves the rendering equation.
Photon mapping is a set of algorithms that both speed up the typical path tracing process as well as make a lot of interesting effects much easier to model (primarily caustics and participating media). There are two phases in photon mapping. First we generate the photon map. Light emitters fire photons (light particles) into the scene. When a photon hits a surface the intersection point and the power of the photon at that point is stored in a kd-tree. We also store whether this was a caustics hit (specular-diffuse transport), a first hit (direct hit) or not (indirect/shadow hit). The caustics hits are often stored in a seperate kd-tree for easy access in the following phase. The photon power is reduced and it is reflected according to the BRDF of the surface. Again, Russian roulette is often used to terminate the photon tracing.
In the second phase, the photon map is used for direct rendering of caustics as well as accelleration of path tracing. In the case of caustics the caustics map is directly rendered, basically. Henrik Wann Jensen, the inventor of photon mapping, distinguishes between accurate and approximate lighting. Caustics aside, photon maps are primarily used for approximate lighting. As I mentioned above, it can be used for accellerating shadow testing by looking at the neighboring photon hits.
Another accelleration technique for path tracing is irradiance caching. This technique is quite simple. First we define a threshold radius which is directly related to the accuracy of the lighting process. We then set our path tracer into motion as usual. When a ray intersects a surface, we see if there are entries in the irradiance cache which are within the threshold radius. If not, the irradiance is computed using regular path tracing and an entry is inserted into the cache at that location. If there is, a weighted sum of the cached irradiances are used to compute the irradiance for the point in question.
I hope anyone found this interesting. You should go look in Jensen's and Ward's papers for more detailed discussion.
[1] Jensen. Global Illumination using Photon Maps
[2] Ward, et al. A Ray Tracing Solution to Diffuse Interreflection
|