computer graphics

computer graphics

monte carlo path tracer

C++, OpenGL, QT

C++, OpenGL, QT

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