next up previous
Next: The Two-Pass Algorithm Up: Photon mapping Previous: Introduction

Photon Map Data Structure

A photon, as utilized in our system, will be described by:

Storing power of a photon is more general that storing radiance, since it permits the calculation of the radiance for different BRDFs, depending on the surface it falls on.

For efficiency reasons the photons are stored in a KD-tree taking into account the positions (photons which are close in the scene will also be close in the data structure). This data structure, very popular in computational geometry algorithms, is a good choice because:

The main operation we want the KD-tree to perform is a distance-bounded knn query. This is easily achieved by a recursive procedure that works over the KD-tree.

However, some issues have to be taken into account. For example, when querying for the photons stored on a surface, only photons on that same surface should be considered. This is not generally a problem in scenes with enough separation between surfaces, where a bounding sphere will naturally be also a bounding disk on the surface. But even in this constrained set of scenes, objects will have corners, and the photons on neighbor walls will cause noise in the power estimation. In order to avoid this problem, the query's bounding sphere is compressed over the normal of the sampled point.

Giving a set of photons in a disk of radio $r$ we can compute the radiance as:

$L_{r}=\frac{1}{2\Pi r^{2}}\sum_{p}f_{r}(x,\omega',p.d)*p.\phi$ where

$p$ is a photon

$p.d$ is its incoming direction

$p.\phi$ is its power

$f_{r}$ is the BRDF

$\omega'$ is the outgoing direction.


next up previous
Next: The Two-Pass Algorithm Up: Photon mapping Previous: Introduction
Francisco Luis Adarve Martín 2004-12-08