RAY TRACER

For this project, my teammate and I created a Ray Tracer from scratch (Whitted style ray tracer). We worked on different material types, such as diffuse, mirror and glass. Our ray tracer supports triangles, spheres, planes and complex objects (loaded from .obj files). We also created point lights to light up our environment.

We created a camera that the user can move in the 3D world. The camera can move left, right, up, down, inwards and outwards.

After completing the basic ray tracer, we implemented a BVH (Bounding Volume Hierarchy) structure to speed things up. Each split in the BVH tree is determined using the Surface Area Heuristic. The benefit of the BVH is that we only need to construct it once at the start of the program. This made our ray tracer much faster and more efficient. After that, we took it a step further and used CUDA to make use of the GPGPU. This allowed us to have a real-time ray tracer (with up to 100K triangles).

In the images below, the user can toggle the visualization the BVH structure during run time.
BVH visualization OFF
BVH visualization ON
Camera movement