A Bit About the Project

I built a CPU-based Monte Carlo path tracer from scratch in C++ to simulate how light physically interacts with objects in a scene. Instead of using pre-built graphics rendering tools, I wrote the core math and ray algorithms with the help of this textbook

Optical & Material Simulation

To bring the scenes to life, I modeled different physical surface behaviors using optical physics equations. Soft, matte surfaces use Lambertian diffuse scattering, while metallic materials handle specular reflection with configurable surface fuzziness. For glass and water, I implemented Snell's Law alongside Schlick's approximation to simulate dielectric refraction and total internal reflection.

Geometry & Soft Shadows

I designed a modular geometry pipeline that processes 3D shapes like spheres and cubes using polymorphic classes. The engine calculates precise surface normals at hit points to handle soft shadows and natural light falloff, giving objects depth based on how occluded they are from nearby light sources.

Dynamic Camera & Perspective Control

I also implemented a configurable virtual camera that allows full control over the viewpoint, look-at direction, and field of view. By recalculating the ray origin vector grid, the system can render the exact same scene from drastically different angles while maintaining proper perspective projection and depth of field.