Advanced Graphics

Universiteit Utrecht - Information and Computing Sciences

academic year 2019/20 – 2nd block

title image title image title image


News (Archive)



Format & Organization

Lecture Slides


Literature & Links

Newsback to navigation

Recent news

Feb 1:

  • Combined grade list, concept: click here (v2). Let me know if there are questions.
  • Thanks for participating! Consider leaving feedback via Caracal.

Jan 29:

  • View the results for P3 here.

Jan 24:

  • Slides for lecture 16 ("Big Picture") now augmented with answers.

Jan 22:

  • Updated P2 grade list.
  • Slides for lecture 16 ("Big Picture") now online.
  • EXAM date/time: Thursday January 30, 17:00.
  • P3 deadline: Monday January 27, 23:59.

Jan 15:

Older posts still available

Format and Organizationback to navigation


The master course Advanced Graphics addresses advanced topics in 3D computer graphics. The focus of the course is Physically-based rendering of 3D scenes. The course has two main focus areas: Rendering Algorithms and Making Rendering More Efficient. Efficiency will be sought through Acceleration Structure Construction and Traversal and Variance Reduction (rather than low level optimization).

The course starts with a recap of Whitted-style ray tracing. We then explore various acceleration structures that help to run the ray tracing algorithm in real-time on commodity hardware. We will see that a well-built Bounding Volume Hierarchy provides both flexibility and speed, for static and dynamic scenes.

The second part of the course introduces the path tracing algorithm, and related light transport theory. We investigate various methods to improve the efficiency of the algorithm using probability theory. We will see that efficient path tracing can yield interactive frame rates.

In the third part of the course we use GPGPU to run ray tracing and path tracing on the GPU. We will explore recent research in high performance stochastic rendering.

This year we will also explore recent hardware developments, and related to that, various ray tracing APIs and state-of-the-art filtering technology aimed at interactive rendering.

Course objectives

At the end of this course you will have detailed knowledge about the following topics:
  • physical light transport, and how to simulate this behavior in a computer program;
  • modern ray tracing based rendering algorithms;
  • high level optimizations of the ray tracing algorithm;
  • Monte Carlo integration and variance reduction;
  • GPU-specific optimizations of ray tracing algorithms.

You will have practical experience in the following topics:

  • implementation of Whitted-style ray tracing and path tracing;
  • implementation of acceleration structure construction and traversal.

You will have a reasonable grasp of several related topics:

  • distributed ray tracing;
  • bidirectional methods, including photon mapping;
  • filtering of the noisy output of a path tracer;
  • RTX, OptiX, Embree and RadeonRays;
  • SIMD and ray packet traversal.


  • Osiris: the official (centrally managed) schedule.
  • uniform course information.
  • Join the Discord for support and collaboration.


Lecturer: Jacco Bikker (


  • Two lectures per week: Tuesday 11:00 - 12:45, Thursday 13:15 - 15:00.
  • One lecturer supervised lab per week: Thursday 15:15 - 17:00.
  • Rooms: BBG-165 (Tuesday) and BBG-223 (Thursday).


This course has a practical project track. During this course, you will either develop an interactive renderer, or your own render core for Lighthouse 2. You may work on the project alone, or with one other student. The practical project has three milestones. The second and third milestones build on the previous one: the outcome is a full ray tracer or render core, which makes a great addition to your portfolio.

Final Exam

There will be one exam at the end of the block (i.e., no mid-term exam). A retake exam or retake assignment can be used to compensate some deficits (see grading section for details).


  • Basic knowledge in linear algebra, calculus and probability theory, as required for the masters program. See "Elementary maths for GMT".
  • Fundamentals in algorithms and data structures.
  • Bachelor level knowledge in computer graphics is strongly recommended. Without prior graphics knowledge, you will need substantial additional time (and probably some talent).
  • Good programming skills; C# and C++ will both work, but for optimal performance and certain low level aspects, C++ is recommended. Plan for additional time if you plan to familiarize yourself with C++ during the course.
  • Good to have: basic experience with graphics programming (e.g. OpenGL / DirectX).


Ray Tracing

Whitted-style Ray Tracing

  • Recap
  • Beer's Law, Fresnel

Acceleration Structures

  • Octree, kD-tree, BSP
  • Bounding Volume Hierarchy
  • Efficient Construction & Traversal

Dynamic Scenes

  • The Top-Level BVH


  • Ray Packet Traversal
Path Tracing

Light Transport

  • The Rendering Equation

Monte-Carlo Algorithms

  • Distributed Ray Tracing
  • Path Tracing

Variance Reduction

  • Stratification
  • Importance Sampling
  • Next Event Estimation


  • Multi-branching BVHs

GPU implementations

  • Streaming Algorithms
  • Wavefront Path Tracing

Variance reduction

  • Multiple Importance Sampling
  • Resampled Importance Sampling
  • Bi-directional Path Tracing
  • Photon Mapping

Image Postprocessing

  • Bias
  • Filtering Techniques

Scheduleback to navigation

BLOCK 2 Schedule

Week Date Lecture / Exams Working College Practical #1 Practical #2 Practical #3
46 Tue Nov 12
Thu Nov 14
Lecture 1:
Course introduction
47 Tue Nov 19
Lecture 2:
Whitted Ray Tracing

Assignment 1
Basic framework or Lighthouse 2 core

Thu Nov 21
Lecture 3:
Acceleration Structures
Working College #1
Thu 15:15-17:00
48 Tue Nov 26
Lecture 4:
Light Transport
Thu Nov 28
Lecture 5:
The Perfect BVH
Working College #2
Thu 15:15-17:00
49 Tue Dec 3
Lecture 6:
Path Tracing
Wednesday Dec 4, 23:59

Assignment 2:

Acceleration structures

Thu Dec 5
Lecture 7:
GPU Ray Tracing (1)
Working College #3
Thu 15:15-17:00
50 Tue Dec 10
Lecture 8:
Variance Reduction
Thu Dec 12
Lecture 9:
GPU Ray Tracing (2)
Working College #4
Thu 15:15-17:00
Tue Dec 17
Lecture 10:
Big Picture

Assignment 3:


Thu Dec 19
Lecture 11:
Working College #5
Thu 15:15-17:00
Tue Dec 24, 23:59h
Christmas, New Year, Block 1 Retake Week

2 Tue Jan 7
Lecture 12:
Filtering (1)

Thu Jan 9
Lecture 13:
Working College #6
Thu 15:15-17:00
Tue Jan 14
Lecture 14:

Thu Jan 16
Lecture 15:
Bits and Pieces
Working College #7
Thu 15:15-17:00
Tue Jan 21
Lecture 16:
Exam Practice
Thu Jan 23
Extended Lab
Preparation for Final Assignment Deadline
Block 2 Exam Week
Exam: Thu Jan 30, 17:00 in MEGARON
Mon Jan 27, 23:59h


Downloadsback to navigation



The Probability Theory document.
The 2018/2019 exam, with answers.
The 2017/2018 exam, with answers.
The 2016/2017 exam, with answers.
The 2015/2016 exam, with answers.


Generic C/C++ template:
Generic C# template:
GPGPU / OpenCL / C++ template:
GPGPU / OpenCL / C# template:
GPGPU / CUDA / C++ template:


LH2 can be found on GitHub.

Practical Assignmentsback to navigation

The course includes a software project that should be worked on in pairs. It is allowed to work on this alone, but be aware that the scope of the project is tuned for duos.

There are three milestones for this project:

  1.  Basics: during the first phase of the project, you will design and implement a Whitted-style ray tracer, either built on your own framework, or as a render core for the Lighthouse 2 renderer.
  2.  Interactivity: based on the theory, you will transform the Whitted-style ray tracer into an interactive renderer. The renderer is extended with basic animation support.
  3.  For the final version of your project, you will be adding global illumination to the renderer. The default approach for this is a path tracer; however other options exist as well. You are free to chose your specific focus in this phase of the project, e.g. GPU rendering or advanced variance reduction.

The final grade for the software project is calculated as follows:

practical grade = (P1 + P2 + 2 * P3) / 4

(1) Ray Tracer


  • Setup a basic ray tracing framework for rendering a depth map for a hard-coded scene consisting of spheres and planes
  • Implement a complete Whitted-style ray tracer with reflection and optionally refraction (Fresnel) and absorption (Beer)

Click here for Assignment 1 Details.

(2) Interactive Ray Tracer


  • Add a bounding volume hierarchy
  • Optional: add a top-level BVH
  • Optional: add ray packet traversal
  • Other optional challenges available.

Click here for Assignment 2 Details.

(3) Global Illumination

Tasks (tentative):

  • Implement recent research in the field of graphics
  • Build a GPU ray tracer or path tracer.
  • Implement a real-time ray tracer for animated scenes.
  • Other challenges are available.

Click here for Assignment 3 details.

Gradingback to navigation


In order to pass the course, you must meet these requirements:

Practical grade P = (P1 + P2 + 2 * P3) / 4
Exam grade E
Final grade F = (2 * P + E) / 3


P >= 4.5
E >= 4.5
F >= 5.5.


There will be an opportunity for a retake exam or a retake assignment. In order to qualify, a grade of at least 4.0 is required in both areas (final exam, practicals). The retake exam or assignment replaces the matching exam or assignment.

IMPORTANT: you can only take the retake exam if you have both a high-enough but non-passing grade (i.e., at least 4.0 and less than 5.5).

Transfers from the previous lecture

If you are retaking this course it may be possible to transfer partial grades to this academic year. This is only possible for practical assignment grades; if you are retaking Advanced Graphics, you must retake the exam. Contact me for details.

Literature & Linksback to navigation


  • T. Whitted. An Improved Illumination Model for Shaded Display. Commun. ACM, 23(6):343–349, 1980.
  • Interactive Rendering with Coherent Ray Tracing, Wald et al., 2001.
  • Large Ray Packets for Real-time Whitted Ray Tracing, Overbeck et al., 2008.
  • Fast Agglomerative Clustering for Rendering, Walter et al., 2008.
  • Heuristics for Ray Tracing using Space Subdivision, MacDonald & Booth, 1990.
  • Distributed Ray Tracing, Cook et al., 1984.
  • The Rendering Equation, Kajiya, 1986.
  • Importance Sampling for Production Rendering, pages 5-38.
  • Ray tracing on programmable graphics hardware. Purcell et al., 2002.
  • Interactive k-d tree GPU raytracing. Horn et al., 2007.
  • Understanding the Efficiency of Ray Tracing on GPUs. Aila & Laine, 2009.
  • Getting Rid of Packets - Efficient SIMD Single-Ray Traversal using Multi-branching BVHs. Wald et al., 2008.
  • Megakernels Considered Harmfull: Wavefront Path Tracing on GPUs. Laine et al., 2013.
  • Theory for Off-Specular Reflection from Roughened Surfaces. Torrance & Sparrow, 1967.

Recommended literature

Physically Based Rendering - From Theory to Implementation, Third Edition, Pharr & Humphreys. Morgan Kaufmann, 2016. ISBN-10: 9780128006450. Also available for free online:


Additional materials will be posted here in due time.

News Archiveback to navigation

Old posts

Jan 13:

  • Slides for lecture 14 ("BRDFs") now available.

Jan 9:

Jan 3:

Dec 27:

Dec 17:

Dec 11:

Dec 10:

Dec 6:

  • Slides for lecture 8 ("Variance Reduction") now available.
  • ADVGR2019 is now also on Slack. Join for focused discussions.
  • Bring out your secret codes; assignment 1 grades are ready.

Dec 5:

  • Assignment 2 description is now available.
  • Happy Sinterklaas.
  • Slides for lecture 7 can now be downloaded.

Dec 3:

  • Final slides for lecture 6 can now be downloaded.

Nov 27:

Nov 25:

  • Slides for lecture 4 can now be downloaded.

Nov 21:

Nov 19:

Nov 14:

Nov 13:

  • Fixed the rooms: BBG-223 tomorrow!

Oct 29:

  • Initial version of this website.