Credits

The class design, lecture slides, starter code, and assignments have evolved over many years with the help of many individuals. This is my best attempt at tracing this genealogy and crediting the major players.

The overall concept for the class is based on the one I took at UCSD from Henrik Wann Jensen in 2004. My understanding is that that course was itself modeled after Pat Hanrahan's rendering course at Stanford.

The current incarnation of the class evolved from the Image Synthesis and Computer Graphics classes I co-taught at ETH Zurich between 2009 and 2015 with Alex Hornung, Ilya Baran, and Wenzel Jakob. Marios Papas and Romain Prévost contributed many ideas and improvements as long-serving TAs for those classes.

I co-taught my last iteration of the Image Synthesis class at ETH in 2015 with Wenzel Jakob, where we used his then-new Nori 2 educational ray tracer. In many ways darts is inspired by Nori, but darts and its accompanying assignments are designed to start more bare-bones and have a more gradual learning curve while still aiming to end up in the same place (all while fitting into a 9-week Dartmouth term!). Wenzel also created or improved many of the lecture sides. Several of the lectures are created or adapted from slides by Jan Novák.

I inherited some lecture and assignment material from Fabio Pellacini and Jon Denning when starting at Dartmouth in 2015, and those ideas inevitably shaped some of the current lectures and assignment designs (we still use a punchout.py script to generate the basecode from a master solution that, while now entirely rewritten, was originally handed down from them). Some of the slides have also been modeled after those by Steve Marschner (sometimes by way of Fabio Pellacini). As much as possible, I have tried to maintain credits within the slides.

The GitHub classroom approach to the assignments was borrowed from Wenzel Jakob with the help of his TAs Tizian Zeltner, Merlin Nimier-David, Delio Vicini, and Baptiste Nicolet. Bailey Miller undertook the first Dartmouth incarnation of that for our 2018 offering.

This class has continued to evolve over the years at Dartmouth, and each redesign has always been helped tremendously by my gifted students and TAs, including Benedikt Bitterli, Bailey Miller, and Srinath Ravichandran. Benedikt Bitterli in particular had a major hand in writing at least some parts of most assignments, as well as co-developing some of the tooling in the base code.

The PBRT books by Matt Pharr, Greg Humphrey's and now Wenzel Jakob undeniably shaped how I teach the design of a ray tracer over the years. I always struggled, however, finding the balance between teaching from a full-featured codebase like PBRT that allows students to focus on cutting-edge features vs. using bare-bones starter code that forces students to implement more from the ground up. I always leaned more towards the code-it-yourself side, since I felt that so much of the joy of my own experience was in building the system myself. More recently, Pete Shirley's Ray Tracing books re-imagined how to teach these ideas in a refreshingly accessible way, and the current iteration of this class and the darts code is my take on bridging these extremes.