Photon Mapping

 

            For my second required project, I implemented a basic photon mapper. Its pretty much the basic photon mapper Jensen provides in his photon mapping book, but also allows for photons to be rejected based on how close they are to the normal of the surface struck (its basically the compressed disc in the direction of the normal that Jensen talks about in his book, but I used an even simpler approach which compresses it to a box). This method still seems to be extremely sensitive to how many photons are used in the irradiance estimate, and the box surfaces started to become black when I compressed the box too tightly around the normal. I may have made a mistake with not re-attempting to find more photons after some have been rejected. I’ll check this during the Christmas break, and present new images if I make the photon mapper more accurate.

 

Also, I use Russian roulette with a maximum of 5 bounces.

 

Here’s the final images:

4 million photons, with 100 in the estimate (note how the boxes appear darker than they should be, caused by the box rejection method)

 

4 million photons with 600 in the irradiance estimate, the bounding box has a size of 20 in the direction of the normal (notice the obvious bounding errors at corners)

 

 

8 million photons with 1000 in the estimate. The box is only 10, but still creates errors.

 

 

As in the path tracer, I also created a model for the photon mapper:

 

This uses only 100,000 photons, with 200 in the estimate.

 

This one uses 4 million photons, with 500 in the estimate. Note how the models features show up much better than above. However, the wingtips, quite noticeable in the path tracer, don’t show very well with the photon mapper. This is because it requires a “lucky” hit to light them, and when the irradiance estimate is flattened in the direction of the normal, the rapidly curving wingtips start missing photons that are still relatively close to them. Using a LOT more photons would likely fix this.

This image still took only about 1/100 the time of the path traced model, but uses more memory.

The views and opinions expressed in this page are strictly those of the page author.
The contents of this page have not been reviewed or approved by the University of Minnesota.