This ray tracer was an academic project that I worked on over the span of 4-5 months. It is divided into several assignments that build off one another, with various extra features and optimizations included along the way. This ray tracer is by no means perfect, and there are likely numerous other optimizations that can be added to speed it up. This project was primarily meant to be a learning experience, and not a professional application.
BASIC Assignment 1: Setting the Scene - Reproduce the geometry of the scene to obtain positions of objects, light source, and camera (NOTE: Requires a browser that can run WebGL)
BASIC Assignment 2: Ray Tracing Framework - Build a basic ray tracer from scratch and use it to generate the image from assignment 1. No lighting.
BASIC Assignment 3: Basic Shading - Implement basic shading using the Phong BRDF and Tone Reproduction. Additionally implemented: Phong-Blinn, Supersampling, Ashikhmin-Shirley Anisotropic.
BASIC Assignment 4: Procedural Shading - Implement procedural shading to create checkerboard floor. Additionally implemented: Perlin Noise, Mandelbrot Texture.
ADVANCED Assignment: KD-Trees - Implement KD-Trees to render a bunny.
BASIC Assignment 5: Reflection - Implement reflection.
BASIC Assignment 6: Refraction - Implement refraction.
BASIC Assignment 7: Tone Reproduction - Implement Ward and Reinhard Tone Reproduciton. Additionally implemented: User-defined Reinhard key value (Can be constant value or luminance at a certain pixel of their choosing)
Misc. Extras - Implement various extra features that I did not have time to finish earlier.