Recently I have been creating a path tracer, available to download on github.

It initially started out by following the excellent Ray Tracing in One Weekend series by Philip Shirley.

I then extended it to support:

  • triangle primitives to allow the loading of obj meshes
  • ability to scale primitives and rotate around x-axis
  • Skyboxes
  • PBR material
  • Anisotropic Phong material
  • Beer-Lambert law support to dielectric material
  • multi-threading and SSE instructions
  • Jittering support to reduce noise.

Example Scenes

Three lights (one red, green, and blue) illuminating three glass spheres

A Cornell Box with a mirrored block and three glass spheres

Suzanne the Blender monkey in blue glass within a Cornell Box

PBR material spheres within a Cornell Box

Next Steps

The next step is to implement an algorithm for bidirectional path tracing which will allow for the convergence of high quality images more quickly.