The goal of this project was to implement a basic raytracer that can handle shadows, reflections and refractions. The basic technique was to cast rays into the scene and return the first object that was intersected by this ray through collision detection. In this project different kinds of rays were casted to achieve the different functionalities implemented – shadow rays, reflection rays, refraction rays. The challenge in this assignment was to render the scenes with the least visual artifacts.
Optimization Techniques

To improve the raytracer and to render faster, some optimizations were implemented. Spatial data structures and bounding volumes were both considered but due to deadlines, only bounding volumes were used. However, they seemed to have a huge impact on the efficiency of the algorithm. Bounding spheres were implemented for faster collision detections and the rendering became much faster.