Multi-threaded ray-traced rendering.

This project implemented a ray-tracer from scratch by casting light rays backwards from the camera to trace where they came from. Figuring out which surface was hit by each ray involved implementing ray-triangle and ray-sphere intersections. Using this algorithm accounted for indirect lighting, which created visual effects such as shadows and diffuse interreflection. To achieve reasonable run times, the program was optimized to run on multiple CPU threads and only one indirect scattering event was used.