Raytracer

As a kid, I had an old version of 3dsmax on my computer I could play around with and use to make some basic renders. 3D graphics seemed like pure magic. I didn't understand how any of it worked, I just followed an online tutorial and placed some lights, hit "render", and waited for the pretty picture to appear.

Years later I realized that people actually make simple renderers completely from scratch. Ever since then I really wanted to write one myself. I stumbled upon a great book, Ray Tracing in One Weekend by Peter Shirley, and it was the perfect excuse to finally do it.

I chose Go as I've been wanting to try it for a while. It has a built-in concurrency model, which worked great for an embarrassingly parallel problem such as ray tracing. I like the language in general, it was easy to get started with it and they have a nice tour of it on https://tour.golang.org.

I'm pretty happy with the results, seeing images appear from code you've written is always exciting. Of course, there are a million things that I'd like to add and improve, but this was meant as just a fun exercise.

I added an .obj parser to it, so I was able to load and render simple triangulated scenes. But as I made absolutely no attempts at optimizing things, any scene with more than a few triangles renders painfully slow.

The code is available on Github.

Here are the results:

Cornell box

A pyramid and some pillars (but look at that depth-of-field)

A sphere (or a planet, with a slight stretch of imagination)

A basement scene to test a small light source, took forever to render