Path-tracer Part 1: Diffuse BRDF

I just finished the last touches on the first project for the class I’m taking on path-tracing, and I’m pretty pleased with the result!

This slideshow requires JavaScript.

Most of the work so far has been writing intersection code and testing everything with an incredibly basic ray-tracer (not worth showing!). I’m happy to finally have something to show for the class, it’s been a ton of fun!

Currently, I’m calculating implicit/explicit lighting paths, as well as using multiple importance sampling to help with convergence. “Jittering” the rays of each pixel provides free anti-aliasing. Rendering is fully threaded using OpenMP, and I’m writing out to an HDR format, which I then convert to LDR using a piece of software called Luminance HDR.

Even with that, on my i5-4670K @ 4.0GHz it’s taking upwards of 40-50 minutes to get decent renders (1024 passes at 800×600) for even these basic scenes. As we get into implementing more complicated features, this time is only going to go up, and you can only optimize so much…

To combat this, I’m currently trying to write a generalized CPU-farm utility that can set up a master/slave system on some school computers! It’s pretty basic so far, but I just finished general command handling/dispatching, so the last thing I need to do is file transfer and I should be good to go! I’m learning how to set up an AWS instance so that I can have a nice server to connect to and command the farm, so I’m excited to see where that goes! My dream is to grab 20-30 machines right before school closes, then have then render a bunch of jobs overnight. Even just 10 computers with 8 logical cores each would make quick work of a “giant” 1920×1080 render.

The next thing I will be implementing will be a reflection BRDF so I can have nice, shiny surfaces.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s