Conclusion

In this post I summarise my progress towards interactive global illumination and explain why I have reached the end of the line with this project.

In my previous post I showcased the implementation of an interactive ray tracer on the GPU. I was hoping to add photon mapping in order to be able to simulate caustics and indirect diffuse reflection. I was also hoping that it would be viable to generalise the possible shapes by using NURBs (I have been using spheres and cubes).

The following video demonstrates the work in progress photon map implementation I achieved.

As you can see it includes quality 2nd and 3rd order diffuse reflection.

My next step was to add cuboids in a move towards replicating the scene achieved with my interactive ray tracer (see previous post). The problem is that by adding two different types of shape to the ray tracing and photon mapping shaders we exceed the allowed number of instructions for the shaders, which can only be solved by reducing its parallelism and thus proportionally reducing performance.

I looked into replacing cuboids and spheres with NURBs but it seems overly complex.

In summary this project has served as a great learning experience in both C++, DirectX, and general graphics programming, and I am quite proud of the GPU based interactive ray tracer I was able to implement, which you can see in the following video.