Falcor


San Miguel by Guillermo M. Leal Llaguno (http://www.evvisual.com/) in Falcor

About

Falcor is an open source rendering framework developed at NVIDIA. The primary developer on Falcor is Nir Benty, who was my mentor while I interned at NVIDIA. I worked on a bunch of different things for Falcor, and I chose a few of my contributions to showcase below. Almost of all the work I did is documented on my NVIDIA Github account.

 

Contributions

Automated Testing Framework

The main project I worked on during my internship was an automated testing framework. I implemented both C++ testing classes in Falcor and python scripts to automate the testing. I added low level tests for some of Falcor’s classes and image comparison tests for nearly every sample. While I was working on the testing framework, I also added command line argument parsing to Falcor because it was required for test automation.

The testing is set up to run every day. During each run, Falcor is cloned at the head of the branch specified for each configuration listed in a configuration file. Each configuration also specifies a test list file, which lists test names and parameters. After the testing is completed, a html summary of the results is sent to everyone on an email list.

 

Particle System

Another project I worked on was a gpu-driven particle system. It’s pretty similar to the particle system I implemented for Feral, it’s based on the same GDC talk, but the implementation for NVIDIA was much less based on that talk than the implementation for Feral. It got some significant improvements from being my second take at implementing the system and having my co-workers there to advise me. As part of implementing this particle system, I needed to add dispatch and draw indirect support to the DX12 back-end of Falcor. Although I only implemented simple pixel shaders for the system while working at NVIDIA, the system is set up so users can easily specify their own compute and pixel shaders. This flexibility should allow future users to do more complex and interesting things with the system.

OpenGL to DirectX Ports

Some of the first projects I worked on during my internship were ports of Falcor’s Shadow and Tone Mapping samples from OpenGL to DirectX12. These ports were a good introduction to Falcor, and though I had used graphics debuggers before, I became much more familiar with graphics debuggers, specifically Pix, while working on these ports. I also learned about some of the differences between OpenGL and DirectX.

The Shadows sample in particular was a pretty large project. It implements many different shadow algorithms of varying complexity. Debugging problems in all these different algorithms took a fair amount of time and work. However, since my goal was to convert the samples in a timely manner, I was regrettably unable to pore into the details of all the different algorithms implemented; I only got a surface level understanding of some of them.

 

Pixel Zoom

Another feature I added to Falcor is pixel zoom. It allows users to zoom in onto the pixels in a block around their mouse position. This feature is nice for users who are looking for the presence of small artifacts. Although it was a pretty minor feature, only taking me a day or two, I figured I might as well include it because it’s easy to showcase.