overview
For my graduate level course "Advanced Rendering", I programmed a full Monte Carlo path tracer, referring to concepts in this Physically Based Rendering book. The path tracer has full lighting integration. It handles direct and indirect rays, uses multiple importance sampling, accounts for global illumination, and contains support for customizable JSON scenes with various lighting and material types.
features
Ray-Object Intersection Engine
The foundation for the path tracer was built by creating base ray, camera, intersection, and primitive/shape classes.
Lighting Integrators
Throughout the project, four separate lighting integrators were created, some building upon each other:Naive
Direct
Direct with Multiple Importance Sampling (MIS)
Full Lighting with Global Illumination
Support for multiple BxDFs (Bidirectional ___ Distribution Function)
Lambertian BRDF
Microfacet BSDF
Specular BRDF/BTDF
Matte Material
Support for multiple types of light
Area
Point
Spot
Environment