Path Tracing Lecture

Christoph Peters, a postdoctoral researcher at the Computer Graphics and Visualization group at TU Delft, prepared two guest lectures on path tracing for the master course IN4152 - 3D Computer Graphics and Animation. We decided to make prerecorded versions of these lectures along with supporting materials available to the general public. That includes source code for a Vulkan-based path tracer. This way, more people can learn about this exciting subject and get a sense of what graphics education at TU Delft is like.

Path tracing renders realistic images of virtual scenes. For each pixel, it starts by tracing a ray into the scene, to figure out what scene surface is visible on that pixel. It then repeats this process recursively using random ray directions to construct paths along which light from light sources reaches the camera. Since the resulting estimates of pixel colors are random, the image is noisy. However, repeating this process and taking the average result gives progressively less noisy images. Part 1 of the lecture covers fundamentals of path tracing such as the rendering equation, Monte Carlo integration and the basic path tracing algorithm itself. The resulting renderer works correctly but produces a lot of noise. Part 2 dives into importance sampling strategies that achive considerably lower noise at the same computational cost. In particular, the lecture explains BRDF importance sampling, light sampling and the combination of these two strategies using multiple importance sampling and next-event estimation.

Lectures and Supporting Materials

The recorded versions of the lectures are made available via YouTube. In addition, we provide PDF slides and full source code for the Vulkan-based real-time path tracer that has been used for all examples throughout the lectures.

Pointers to Interesting Code Sections

The lectures explain all formulas and algorithms needed for the real-time path tracer, but they do not explicitly speak about the source code that implements them. To make it easier to study the code, here are a few links to the relevant sections for particular topics of part 1 of the lecture:

And here are similar links for part 2 of the lecture:

The file format used for scene data (*.vks for geometry, *.vkt for textures) has previously been described in a blog post.

Questions about these lectures can be sent to c.j.p.peters@tudelft.nl.