New GPU Path Tracer Project

Posted on July 11, 2011 by Raffi

I’ve been working on a global illumination renderer recently using OptiX. In the past I had written a global illumination ray tracer that used photon mapping, but this time around I’m using path tracing instead. The reasoning behind this is primarily that the simplicity of the path tracing algorithm is (currently) more amenable to GPU hardware. Right now I’ve also implemented the materials system, thin-lens depth-of-field, motion blur, and a number of more minor features including a refinement of the Julia fractal code included with the OptiX SDK. The path tracing code itself is a variant of the standard algorithm presented in PBRT. I’ve also been experimenting with some quasi-Monte Carlo techniques to help improve sampling efficiency.

The image on the right shows some of these features rendered at 1000 paths/pixel, with a total rendering time of a little over 3 minutes. Hopefully I’ll find more room for optimization as I continue working on this but it’s still vastly faster than a comparable CPU path tracer I would have written in the same amount of time. Also emissive materials were fun to play with because path tracing makes them pretty straightforward to implement.

I’ll make a dedicated page on here with more details on this new project over the coming weeks, once I look into a few additional paths (no pun intended). In particular bidirectional path tracing is looking pretty attractive as a next step because of its ability to produce much cleaner caustics along with reducing noise in general, but I also want to see what this thing can do for rendering Minecraft worlds… there have been a few OBJ exporters for the game that might work.

Update: the project page has now been posted.