T-racer - A Bi-Directional Path Tracing System

Get it Here:

Research Report

Final Report

Download Here

View Source on GitHub

Details

  • Platform - PC
  • Programming Language - C++
  • Role - Sole Developer
  • Objective - Create an implementation of Bi-Directional Path tracing.

Introduction

For our final year of university we are required to complete a dissertation, focusing on a particular topic related to games technology. I decided to peruse mine in advanced rendering algorithms which has lead me to focus on creating a Bi-Directional Path Tracing renderer.

Description

This is a renderer which implements the Bi-Directional Path Tracing algorithm, a rendering approached first proposed in the early 1990s by Eric Lafortune and is now available in many advanced renderers such as Renderman. This technique is classed as a global illumination technique due to its simulation of both direct and indirect light transport within a scene. The result of such an algorithm is that its capable of rendering very high quality images.

BDPT is an extension of path-tracing, a Monte-Carlo raytracing algorithm which utilises Monte Carlo integration in order to determine the radiance of all surfaces in a scene, accounting for direct and indirect light. Path-tracing does this by taking an average of a sum of surface samples. These samples in turn are weighted using a probability density function that matches the properties of the surface, reducing the variance on the image.

Whilst capable of amazing images, as the rays are traced from the camera it results in potential sources of variance, namely with caustic objects which results in the presence of noise, requiring more samples to reduce.

BDPT differs by tracing from both the eye and the light source, in essence combining elements of light tracing with path-tracing. The result is a lower convergence rate as well as better simulation of caustics, resulting in images which very closely replicate the real environment.

This rendering system is an implementation of this algorithm along with path and light tracing. In the system one of these three techniques can be selected allowing an image of the said scene to be produced.

Features

  • Users can create and render scene files comprised of custom geometry.
  • Serialisable BVH using Surface Area Heuristic.
  • Multithreaded rendering.
  • Support for Lambertian Diffuse, Glass and Mirror materials with importance sampling.
  • Support for Bilinear filtered textures.
  • Support for Point and Area Lights.

My thoughts

I am quite satisfied with this project. I was able to implement the algorithm successfully but not perfectly. I hope to find time to make some important corrections in order to improve the quality of the images.

Long Term outlook

In the long term I intend on adding the following features:

  • Multiple Importance Sampling
  • Additional Fresnel materials and new material generation system.
  • Directional and Spot lights.
  • Possible denoising via AI or mathematical methods.
  • Anti-aliasing and image effects.
  • Additional optimisations.

Project Details

Date: Apr 11, 2019

Author: Nathan Butt

Categories: University DissertationRenderingComputer Graphics

Tagged: Rendering, Low-level Systems, Global Illumination, C/C++, Bi Directional PathTracing

Client: University Project

Website: N/A

Related Works.

About

A humble software engineer with a keen desire to learn and explore.