New GPU Path Tracer Project
July 11, 2011 - Coding, Graphics

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.

Site Updates
June 2, 2011 - Coding, Graphics, Site News

As of a few weeks ago, for the first time in roughly 17 years, I’m no longer a student. This past semester I worked on a bunch of interesting projects. For a distributed AI class, I worked on a BattleCode game player with some intelligent navigation, and for a compilers class I wrote a scanner, parser, AST generator, and semantic analyzer for the Tiger programming language. Additionally, I wrapped up the work on the motion blur ray tracing project, and I’ve updated that page with our results.

Project Updates
December 23, 2010 - Coding, Graphics, Site News

Now that I’m home for the holidays, I thought I would post updates (and new images!) of the projects I’ve been working on this past semester.

For the motion blur ray tracing project, the coding portion is essentially complete and we’ve been working on the experimentation. We have a large array of test scenes that have been generated using a variety of parameters, and we’re performing user trials with a maximum likelihood algorithm for finding the just noticeable difference in noise with respect to those different parameters.

The image on the right shows one of my favorite images I’ve encountered during the development of the AI Fractal Art Generator (with some color correction and cropping applied). This project used machine learning techniques to generate ray-traced images of fractals, and you can find more details and images on the project page.

Merry Christmas and a Happy New Year!

New Projects
October 20, 2010 - Coding, Graphics, Site News

This semester I’m very excited to be working on two projects that lie at the intersection of computer graphics and other fields. Firstly, I’ve begun work on my M.S. thesis project, which is to explore the perceptual impact of various motion blur techniques in distribution ray tracing. I will be posting updates of our progress on the project page.

Secondly, I’m working on a project to automatically generate ray-traced 3D fractal art using AI machine learning techniques. The program will learn over time the types of images that are visually pleasing, and then use that information for tuning the parameters for generating successive generations of images. I’ve posted a description of the project on this page and will be adding the generated images once the machine learning implementation is completed.