Solstice (deprecated)

C++ Path Tracer

Notice

The description below is quite old and pulled from my previous website. I stopped working on this renderer in 2020 and had not updated the text nor the images since way before that, therefore it does not reflect the current (dead) state of it. Nevertheless, for nostalgic reasons, I have kept the original page.

Overview

Solstice is my multiplatform physically-based renderer, written in C++. The objective of this project is for self-teaching goals, given my interest in ray tracing techniques.

The renderer is self-contained on GitHub and all dependencies are part of the source.

embree for accelerated ray-intersection queries. There is also a self-authored BVH but the performance does not compete with that of embree and will be temporarily phased out as I will be focussing more on developing light transport related algorithms rather than ray-acceleration.

TBB is used for tile-based parallel rendering.

Ingo Wald’s PBRTParser is used to parse PBRT scenes. For now, only the geometry, materials and lights are used from these files. Other settings are set in a JSON file.

Current features

Shapes

  • Triangles
  • Spheres
  • Cubes

Mesh import:

  • OBJ (deprecated due to PBRT)
  • PBRT

Cameras:

  • Pinhole Camera

Integrators:

  • Kajiya-style path tracing, with no explicit light sampling
  • Path Tracing with Next Event Estimation
  • Path Tracing with Next Event Estimation (using MIS)

Samplers:

  • Random Sampler
  • Stratified Sampler

Acceleration structure:

  • Naive BVH
  • embree’s BVH

Materials

  • Matte
  • Glass
  • Mirror

Images

Here’s some images from what I’ve rendered so far, more images are incoming when I start implementing the cooler stuff.

The following render is of the Stanford Bunny inside the Cornell Box. If you look closely at the light it looks weird - that’s because I was also allowing the light to light from the back. A bug from the olden days i.e. June 2018.

The following render is of the Sibenik Cathedral, lit only by the environment light visible from the windows. The white pixels were caused by PDF values that were 0, still in my learning phase here.