Path Tracer : C++

As part of a college course, I worked on a Monte Carlo path tracer using the physically-based rendering techniques described in this textbook: https://www.pbr-book.org. The final result was a full lighting integrator that incorporated both direct and indirect rays, multiple importance sampling, Russian Roulette ray termination, and global illumination, as well as support for a variety of material types and lights.

The following are scenes I generated myself and rendered from this path tracer @ 20x20 samples per pixel and maximum recursion depth of 8:

Additional sample scenes can be found here — all were rendered using 10x10 samples per pixel and a maximum recursion depth of 5, and all lights are arealights unless otherwise specified:

Constructive Solid Geometry:

Union

Intersection

Difference

Additional Lights / Cameras:

Thin-Lens Camera (focal length 29.5, lens radius 1.5)

Spotlight (max recursion: 10)

Pointlight (max recursion: 10)

You can also find some experiments with real-time rendering here.