Caustics Photon Map

05 Jun 2010

While working on my thesis I added the treatment of caustics to my CUDA-application. A caustic results from light that undergoes specular reflexion/transmission at a curved surface. Scattered light rays travel in different directions and create interesting patterns at nearby surfaces.

To handle caustics, I added another photon map for photons that were scattered using specular reflection or specular transmission only. This is the caustics photon map. The other photon map, the global photon map, stores all other photons that hit a nonspecular surface (surface that can scatter light in a nonspecular way). On the one hand these are the direct photons which hit some surface right after emission from a light source. On the other hand these are indirect photons that underwent nonspecular scattering at least once.

I used Blender to construct some simple test scene for my implementation. It contains an orange, reflective sphere and a green, transmissive sphere with refraction index of 1.7. The smooth shadows are the result of an area light source. Bump-mapping is used to improve the quality of the brick walls.

MNCaustics scene.

Light is transmitted using the law of refraction. This leads to the focussed light below the green sphere (caustic). Approximately 100,000 photons were stored in the caustics photon map as well as in the global photon map. Both photon maps are visualized in the following images.

MNCaustics scene. Caustics photon map visualization.

MNCaustics scene. Global photon map visualization.

It should be noted that I did not apply any acceleration techniques (e.g. adaptive selection of final gather points) to speed up the calculations.


Please note that it's not possible to submit additional comments. The comment form did not make it into this version of my site.

By: lihaimei 28 May 2011

I have a question.
When you get Caustics photon map , how to get the final result?

By: Mathias 28 May 2011

Hi lihaimei,

for the results in this article, I just performed a direct density estimation on the caustics photon map and added it’s result to the non-caustic part.

You might want to check some literature on this topic, e.g. “Realistic Image Synthesis Using Photon Mapping” by Henrik Wann Jensen or “Physically Based Rendering” by Matt Pharr and Greg Humphreys. The describe how to decompose the rendering equation. Free information is also available, for example in Jensen’s paper.