Photon Mapper
CIS561: ADVANCED RENDERING, Penn Engineering - SPRING 2020
C++
OVERVIEW
The Photon Mapper is a Path Tracer model that starts with elements of Monte Carlo Path Tracing and augments the rendering model by calculating the contributions of photons energy. The photon mapper starts with a preprocessing pass where n photons are emitted from the light sources, bounced around the scene, and finally stored in a global illumination and caustics photon map. In the rendering step, we cast p x p + 1 ray samples per pixel, where p is the square root of the number of samples. The first p x p rays are used in calculating the Multiple Light Sampling contribution, and the final ray cast is used in calculating photon contributions. For accuracy, we only use the k closest photons to calculate the indirect and caustic contributions of photons. We use the k-d tree volumetric data structure to store the photons and optimize searching.
1 million photons and and search radius of 0.3
1024x1024 pixels, 400 samples / pixel, depth 8 recursion
Progressive Build up
Here is a visualization of what each photon mapping feature adds to the overall render.
1 million photons and and search radius of 0.05
1024x1024 pixels, 400 samples / pixel, depth 8 recursion
Render Time: 1 hours
Basic Renders
Here, I show a comparison between the Full Lighting Integrator from the Monte Carlo Path Tracer and the Photon Mapper. The photon mapper takes significantly less time to create a converged image and appears less noisy. While the Full Lighting Integrator creates a more accurate render, the photon mapper creates a higher perceptual quality since the blur of the Photon Mapper is visually preferred over the noise of the Full Lighting Integrator.
1 million photons and and search radius of 0.3
Further Optimizations
Below are some optimizations discussed in class that I did not implement.
Cylindrical Search - This project currently uses a spherical search radius, utilizing a cylinder to search for photons would make sure that only photons on surfaces with similar surface normals will be used to contribute to each others illumination
Gaussian Blur - When calculating the photon energy contribution, the program currently calculates the average color value. Changing this to a gaussian blur would increase the influences of the photons closest to the intersection point.