I completed this project for my Physically-Based Rendering Class (CIS561). It is written in C++ and QT. The ray-tracer casts a ray from the camera to objects in the scene, and then back to a light source. It supports intersection testing and ray bouncing using multiple sampling methods (random, grid, and stratified), up to a user-defined recursion limit. I also implemented an ambient occlusion by casting rays in tangent space about a hemisphere, and testing their intersections with other objects in the scene.

TWO COLORED AREA LIGHTS

TRANSMISSIVE AND REFLECTIVE MATERIALS

RECTANGULAR AREA LIGHT

DISC AREA LIGHT