Monte Carlo Path Tracer

CIS561: ADvanced rendering, Penn Engineering - Spring 2020

C++

OVERVIEW

The Monte Carlo Path Tracer a rendering model that works by casting many rays per pixel into a scene and utilizing intersection and object information to appropriately evaluate the light transport equation (LTE). The LTE data from all the samples is then used to color pixels on the screen to create a realistic model of the scene. The Path Tracer can create more accurate scenes than the Ray Tracing model (which I have also implemented), but take significantly longer to converge.

500 x 500 pixels, 32 x 32 samples per pixel, depth 8 recursion Full Lighting Integrator


Camera and Lighting

Camera Features: Standard, Thin Lens (allows for Depth of Field)
Lighting Features: Area Light (standard), Point Light, Spot Light


Constructive Solid Geometries

Constructive Solid Geometries (CSGs) are binary trees that store primitive shapes and boolean operations. This trees are evaluates to create complex geometries that would otherwise show to be computationally expensive or less geometrical precise.


Integrators

Each of the following integrators each have their own trade offs. These increase in complexity and correctness down the list.

Naive Integrator
This integrator recursively evaluates the energy emitted from the scene along some ray back to the camera. This is considered the Naive method since it shoot algorithm starts on the surface of the object. The integrator samples via a bidirectional scattering distribution function (BSDF) which means that is samples the material’s surface and therefore properties. It is specifically capable of rendering images quickly and creating realistic renders for specular, transmissive, and reflective surfaces.

Direct Lighting Integrator - Multiple Importance Sampling
A Direct Lighting integrator works by sampling points on light surface. An enhanced version of the Direct Lighting integrator is Multiple Importance Sampling (MIS). Instead of shooting one ray from a light, MIS shoots two rays per sample: (1) Samples from the light (2) Samples material surface via BSDF techniques used in the Naive Integrator. This helps to more effectively estimate the direct illumination within a scene containing light sources of different sizes and materials of different glossiness. While this integrator is able to produce a less noisy image, it is unable to handle specular surfaces the way the Naive Integrator can.

Full Lighting Integrator
The Full Lighting integrator accounts for global illumination in that it accounts for both direct and indirect lighting in the scene. Like the naive integrator, the Full Lighting Integrator renders images that account for light that bounces off of surfaces. However, the Full Lighting Integrator is much less noisy since a ray is likelier to hit a light if it is directly sampled from a light as opposed to from the object surface. This is the most accurate but also expensive integrator. One optimization is that this integrator uses Russian Roulette ray termination.