CS 6620 Fall 2014 - Project 12

Comparison of Bidirectional and Forward Path Tracing

While forward path tracing is much faster it struggles a lot with scenes where the light is occluded, such as the one below. The light cover is using measured gold data from PBRT's SPD files.

Bidirectional Path Tracing: 00:29:18

Adaptive sampling: min 128, max 512, path lengths: min 3, max 8.

Forward Path Tracing: 00:11:05

Adaptive sampling: min 128, max 512, path lengths: min 3, max 8.

Cornell Box with covered light: 01:03:14

Bidirectional path tracing with adaptive sampling: min 128, max 1024, path lengths: min 3, max 8.


Tea Time for Test Models: 00:23:01

Adaptive sampling: min 128, max 1024, path lengths: min 3, max 8


The tea time scene makes use of the Stanford Armadillo and Bunny from the Stanford 3D Scanning Repository, the smoothed version of the EuroGraphics 2007 Phlegmatic Dragon and the high res Utah teapot. The Armadillo is using the two layer silver measured BRDF from the MERL BRDF Database introduced in the paper "A Data-Driven Reflectance Model" by Wojciech Matusik, Hanspeter Pfister, Matt Brand and Leonard McMillan. The teapot is using measured copper data from PBRT's SPD files.

SmallPT Cornell Box with MERL BRDFs: 00:35:36

Adaptive sampling: min 128, max 1024, path lengths: min 3, max 8


This is the same MERL scene from the last project but with the lighting and model positions improved. The MERL scene makes use of the Stanford Dragon and Happy Buddha from the Stanford 3D Scanning Repository. The material BRDFs are from the MERL BRDF Database, the dragon uses the blue acrylic BRDF, the buddha uses the gold metallic paint BRDF and the sphere uses the red fabric BRDF.

Caustics Playground: 00:14:58

Adaptive sampling: min 128, max 512, path lengths: min 3, max 8


Unfortunately path tracing isn't very well suited to capturing the sharp caustics we'd expect to see from light focused through complex geometry like Suzanne so we only get a faint hint of them underneath the head. When we implement photon mapping though this render should make for a nice comparison as photon mapping is great at capturing caustics. The model is a higher poly version of Blender's Suzanne created by taking the original Suzanne model and running it through a few rounds of subdivision and smoothing in Blender.

SmallPT Cornell Box: 00:20:42

Adaptive sampling: min 128, max 1024, path lengths: min 3, max 8


I'm not quite sure the transparency and caustics are correct here. The silver ball is using measured silver data from PBRT's SPD files.


Hardware Used and Other Details

Render times were measured using std::chrono::high_resolution_clock and only include time to render, ie. time to load the scene and write the images to disk is ignored. Unless otherwise mentioned images were rendered with forward path tracing using 8 threads with work divided up in 8x8 blocks. My desktop was resurrected with a pretty significant hardware upgrade, which has really improved rendering performance.

CPU: Intel i7-4790k @ 4.0Ghz
RAM: 16GB 1600Mhz DDR3
Compiler: gcc 4.9.2 x86_64 (on Windows, built by MinGW-W64 project)
Compilation Flags: -m64 -O3 -march=native -flto