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.