Lumen Pathtracer

A hardware accelerated pathtracer targeting the NVIDIA RTX 3000 series cards

Project summary

Team:

6 programmers;

Role in team:

Tools programmer, Optix 7 programmer, Engine programmer;

Development cycle:

32 weeks throughout 3rd year in BUAS;

Contributions:

Framework to automate many Optix 7 processes for others

Debugging tools, quality of life tools

The project

Lumen Pathtracer is the project I worked on throughout my 3rd year in BUAS. It is a year long project with the goal of creating a real time photorealistic renderer utilizing NVIDIA's RTX 3000 series video cards.

My work on the project

I had two primary roles within this project. The first of them was as the main API programmer, where I created a framework to ease everyone's work with Optix, the raytracing API we decided to use. The rest of the time, I acted as a general tools programmer where I supported other team members with tools allowing for easier debugging and programming.

Preproduction

The project has had 2 major stages up until this point, each of which spanned 8 work weeks. At the moment of writing this, there are going to be an additional 8 weeks of work on the project, which are scheduled to end the beginning of July 2021. The first stage was preproduction, where I worked individually to setup the basis of the project in the form of a framework which the rest of the team were to use in their own tasks. This included a generator for the shader binding table, which allowed the shader binding table to be used much more dynamically than it would be normally possible.

Production

In the second stage of the project I took on a supportive role within the team, where I focused on creating tools to further improve the productivity of other members of the team. These tools were meant primarily as means to make debugging and testing of the product easier, as out of the box doing that with CUDA and Optix was challenging due to limited tools for the APIs.

Buffer debugging tool

One of these tools is a pixel debugging tool akin to what a conventional rasterization pipeline graphics debugger like RenderDoc or PIX would have. This was developed to counteract difficulties that were faced when needing to debug the contents of data buffers, and allowed for capturing of individual frames for debugging, so even artifacts which appeared in different locations each frame could be debugged with it.

Application multithreading

I was also responsible for the CPU multithreading of the project. In particular, it was decided to have the rendering via Optix and CUDA be done on one thread, while the output and UI were done on a separate thread. This was done to allow for tools to remain responsive and easy to use even when the path tracing is done at low framerates. A particular challenge with this was imposed by our usage of OpenGL for the final image output, as it made it necessary to defer work from the path tracing thread to the main thread at specific points.

Example tool used for model loading developed using Dear Imgui