I've always been interested in Computer Graphics, especially global illumination. And among all the existing global illumination algorithms, photon mapping is the one I like best. So for the final project of GPU programming course, I'm planning to implement photon mapping on GPU with the help of hardware to do the accelerating work. My goal is to make photon mapping “real-time” somehow, and interactive so that it could be used in game industry.
By searching for papers related to my idea, I found one really attractive paper, and the real time photon mapping result represented in the demo is exactly what I want.
The paper I would refer to is "Hardware-Accelerated Global Illumination by Image Space Photon Mapping". Basically, the method used here, Image Space Photon Mapping (ISPM), is an extension of traditional photon mapping, tuning its most expensive steps to be amenable to GPU acceleration. It treats the whole photon mapping process as photons emitted from light source and bouncing several times into the pinhole camera. The most time-consuming procedure is the first bounce and the last bounce, which stands for direct illumination and final gathering respectively. And the method used is to use bounce map for light source in calculating on GPU the result of first bounce, which contains the most photons in photon spraying. Also it changes the gathering process by scattering, making it suitable to be executed on.
Honestly speaking I’ve not understand all the details in the paper, but the main idea is innovative enough to astonish me. My plan for implementing the paper could be conclude in steps as follows. First is to understand the whole procedure of the paper in detail, and design a corresponding framework capable to show the result. As mentioned in the paper the demo was based on a game engine, which is hard for me to build upon, so designing a good framework is significant. Next step would be implementing the algorithm based on the framework. And in my anticipation, C++, CUDA programming, OpenGL and GLSL would be languages and tools used here for implementation. The last step would be tuning and testing the performance.
If available time is possible after these, I would also like to make a comparison of performance between GPU accelerated version and the CPU version to see how much performance enhancing could be achieved.
Here is the paper and the demo attached: