PBR Raytracer
This was a solo class project for Advanced Rendering Techniques. In this class I built a raytracing image renderer. It parses as input a subset of the POV-Ray scene description language and renders the scene. The rendering equation uses a Cook-Torrance BDRF and accounts for reflection, refraction, occlusive shading, Fresnel’s law, and Beer’s law. Planes, triangles, spheres, and boxes are all supported and can use matrix transformations. Multiple lights are supported and a spatial data structure is used to cut down on ray-object intersection checks. Global Illumination is achieved through Monte-Carlo sampling and the renderer supports super sampling anti-aliasing. Finally gravity is implemented into the scene along with sphere-plane collision physics, to render multiple successive frames. The frames are passed to FFmpeg to be compressed into an output video. Each frame is rendered using CPU multiprocessing for a modest speedup.