Advanced Graphics

Universiteit Utrecht - Information and Computing Sciences

academic year 2014/15 – 2nd period

title image title image title image


News (Archive)

Course Overview


Homework (Theory)


Format & Organization


Lecture Slides


Literature & Links


Recent news

Old posts

How to use this website: Any changes made to this site are posted in this "news" section. The links lead you to the updated sections of the web page (some also provide complementary direct links to newly available documents / PDFs). We will also post news for some of the important announcements that have been made during the lecture.

Course Overview


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 three main focus areas: Mathematical and Physical Fundamentals, Rendering Algorithms, and Making Rendering More Efficient.

The lecture starts by introducing the physical model of light transport: Ray optics, the equilibrium conditions for light transport ("Rendering Equation"), etc. In order to understand this notion more precisely, we will then look at the mathematical tools from calculus and linear algebra that are necessary to capture the intuitive model in a rigorous mathematical formalism.

Afterwards, the lecture discusses several basic rendering algorithms, such as distributed raytracing and classic finite element radiosity/radiance approaches.

The last part deals with efficiency, focusing on Monte-Carlo algorithms for a fast, output-sensitive approximation of the solution of the rendering equation: path tracing, photon tracing, and various optimizations (variance reduction through importance sampling and stratification). The lecture will include a short recap on fundamental concepts from probability theory required to understand the properties and design choices of these algorithms.

(Please note that the list of topics given on this web page is still preliminary, and the order might also still change.)

Format and Organization


Lecturer: Michael Wand (email address (embedded image to avoid spam))

Teaching Assistants:

Paul Scharf (theory)
Vazgen Gasparian (practicals)


The course consists of a lecture and a practical project. The lecture will take place in the first two month (November and December) of the period, the practical part will be held in the last month (January). The lecture part (in Nov/Dec) will have three sessions à 90 min. per week (Mo,Tue,We). In addition, there will be regular homeworks discussed in an additional session. Homework will be graded through group interviews.

UU course slots overview


  • Three slots per week, but only in November and December 2014!
  • Mondays morning, Tuesdays afternoon, Wednesdays morning
    ("A-slot"; see image to the right).
  • Time slots & Rooms:
    Mo 9:15-10:45, Room: MIN-019
    Tue 17:15-18:45, Room: MIN-027
    Wed 9:15-10:45, Room: MIN-027
    All in the Minnaert building.

Theoretical Homework assignments

  • Theoretical homework assignments will be posted online
  • Participation is mandatory! You need a minimal score to pass the course (see below for details).
  • The assignments will help you to prepare yourself for the exam.


  • We will have a practical project track.
  • The goal is to implement a viewer / renderer for 3D scenes with physically-based global illumination.
  • Participation is mandatory. The practicals consist of three milestones and an overall project presentation.
  • Projects should be performed in small groups of two students (unless an exception is granted due to important reasons, including the case of an odd number of participants).

Final Exam

  • There will be a final exam in the end (no midterm).
  • A retake exam can be used to compensate some deficits (see grading section for details)

Overall grading

  • You must have a sufficient score in the homeworks, the practicals, and the final exam to pass the course.
  • The final grade is a weighted average of the three parts (see grading section for details).

Consultation hours

  • Lecture + Theory Homeworks: Contact Michael or Paul for questions concerning the theory / lecture part. If anything is unclear, do not hesitate to make an appointment for a personal meeting (just email email address (embedded image to avoid spam)).
  • Practicals: Contact Michael or Vazgen for questions concerning the practicals. There will be regular consultation hours with Vazgen (details tba.).
  • Personal consultation: Michael will be in Utrecht for personal consultation in November and December. In January, Vazgen will be on side to provide feedback. You can reach Michael anytime via email.




Linear Algebra

  • Function spaces
  • Linear mappings


  • Derivatives & integrals
  • Integral & differential equations


  • Radiometry and ray optics
  • The rendering equation(s)

Signal Theory

  • Fourier transform
  • Regular & irregular sampling

Finite-Elements Approaches

  • Radiosity
  • Radiance

Monte-Carlo Algorithms

  • Distributed raytracing
  • Photon mapping
  • Path tracing
  • Bi-directional path tracing
  • Other stochastic approaches

Real-time rendering approaches

  • Instant radiosity / VPLs

Variance reduction

  • Importance sampling
  • Stratified Sampling
  • Multiple Importance Sampling

Multi-resolution algorithms

  • Hierarchical representations
  • Adaptive basis functions

Data structures

  • Spatial hierarchies
  • Traversal algorithms



  • Attention - this course is quite heavy in advanced mathematics! Brace yourself for plenty of abstract concepts, structural views, and formal models (intuition will be emphasized, but we cannot avoid a little bit of more involved math!)
  • Prerequisite: Basic knowledge in linear algebra, calculus, probability theory as required for the masters program, see "Elementary maths for GMT" (we will still recap important concepts but move quickly).
  • 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++ recommended (you can use other languages at your own risk). Plan for additional time if you plan to familiarize yourself with C++ during the course.
  • Good to have: Basic experience with graphics APIs (such as OpenGL). Plan for additional time if you need to acquire the skills during the course.


  • Good programming skills
  • Basic C++ programming (you can use other languages, too, but at your own risk).
    Plan for additional time if you plan to familiarize yourself with C++ during the course.
  • Good to have: Basic experience with graphics APIs (OpenGL / DirectX).
    Plan for additional time if you need to acquire the skills during the course.


Time Schedule

Here is a graphical overview of the planned lecture schedule:


Inteviews Schedule

Interviews for theory are on Wednesdays, 11-13h, directly after the lecture in room BBL-447/547/447/447 (for the four weeks). Each group has its separate 20-minutes slot. You only have to attend this time slot. However, due to the tight schedule, it is very important that you show up on time! All group members are required to attend the interview, and each student is graded individually.

interview schedule

Practicals Inteviews Schedule

Interviews for the practicals are on Wednesdays, 9:00-13:40h. The room is still t.b.a. Each group has its separate 20-minutes slot. You only have to attend this time slot. However, due to the tight schedule, it is very important that you show up on time! All group members are required to attend the interview, and each student is graded individually.

interview schedule



Lecture Slides

Slides download & (Preliminary) Schedule

Here, you can download all of the slides. The website also provides all of the upcomming / future slides, according to a preliminary planning. Please note that both the schedule as well as the slides themselves are subject to change (no promise the topics, slides, and schedule will stick exactly to the plan outlined below).

Theoretical Homework Assignments


There will be four assignment sheets that you have to work on as homework assignments. The homework will be graded in personal group interviews:

  • No write-ups / solutions have to be submitted.
  • Insteand, you have to present the solutions in personal interviews.
  • You should bring some written notes to these interviews but the notes themselves will not be formally graded, only your oral answers.
  • Please note that you have only one week for each assignment (there is some overlap in publication of the assignments).

The interview format has the advantage of being able to provide you with more direct feedback to questions and mistakes, and provides the teachers with feedback of what needs to be discussed in more depth, too.



Assignment #1:

Assignment #2:

Assignment #3:

Assignment #4:

Future topics are preliminary and subject to change (only given for orientation).



The list above now contains PDF links to solution sketches. Please note that these are intended as hints on how to solve the assignments, not as textbook-grade, gold-standard reference solutions. They should help with working through the material, but some thinking might still be required (this is part of the exercise).


The interviews will be conducted on Wednesdays, 11-13h, according to the posted schedule. Every group has to show up at the time slot listed, and all group members must attend (because grading is individual).

  • Meeting point: Please come to room BBL 424 at the posted time.
  • We have a second room available for the parallel interviews; the assignment to the two parallel tracks will be performed on the spot at BBL 424.
  • The rooms for the parallel tracks are:
    • Wed Nov 26: BBL 447
    • Wed Dec 03: BBL 547
    • Wed Dec 10: BBL 447
    • Wed Dec 17: BBL 447


The results for the homework interviews are posted in this PDF document. The document is password protected - please use your password (login name is not required here) to access the PDF.

Please check your scores and let the lecturer know if anything seems to be incorrect.


Exams from Last Year

Below are the exams from the last iteration of this course. The exams might be useful for further practice. Please note, however, that the scope of the course was slightly different this time. The lecture was presented in a different order and the emphasis of the different topics was different, too. Therefore, the previous exam are not fully representative of the exam(s) in this course. The homework assignments give a better impression of the topical scope. For example, we did not talk in great length about Fourier transforms and did not practice this in the homework; therefore, exam questions on this topic would not be in great depth, in comparison to other topics.

  • Final exam of Advanced Graphics 2013/14 (posted Wed Dec 17, not necessarily fully representive of the 2014/15 exam!).
  • Retake exam of Advanced Graphics 2013/14 (posted Wed Dec 17, not necessarily fully representive of the 2014/15 exam!).


This year's final exam

You can download this year's final exam here.


Practical Assignments


The course includes a software project that should be worked on in small groups. There will be milestones (again, with personal interviews) and a final presentation. Please contact Vazgen to get personal support with the programming!

Slides with detailed explanation: Practicals update (posted: Nov 15 2014).


Software framework

  • A simple-to-use C++ programming framework for VisualStudio/Windows and Unix will be provided.
  • Usage is optional.
  • You can use any language/environment if the lecturer agrees (at your own risk); predefined functionality must be adequate (for example, using a complete global illumination rendering package would go too far).

The three major milestones are listed in the boxes below:

(1) Interactive 3D Mesh Viewer


  • Import meshes in *.obj format
  • Render meshes with simple z-Buffer rendering (OpenGL/DirectX recommended)
  • Control camera with the mouse interactively.
  • This is a recap of traditional "graphics" topics; it helps to familiarize yourself with C++ and OpenGL (or the language / API / environment of your choice).

Download assignment sheet here.

Software framework: see below.

(2) Basic Raytracing Renderer


  • Implement a raytracer
  • Experiment with anti-aliasing / distributed raytracing.
  • Implement acceleration data structures.

Download assignment sheet here.

Software framework: see below.

(3) Global Illumination


  • Implement a global illumination renderer
  • Choose a suitable algorithmic framework (path tracing, photo mapping, VPLs, or the similar)
  • Examine algorithmic options.

Download assignment sheet here.

Software framework: An updated software package that includes a kdTree raytracer has been posted; see below for details.


Milestones & Grading

For each assignment, there will be a personal interview in which the group presents their results. The interviews will provide feedback and for P2 and P3, and the interviews will be graded. In addition, there is a final presentation of the overall project in the end, and each group has to hand in a short written summary (as specified in assignment sheet P3).

  • Assignment sheet P1 - due Jan 05 2015 (prepare along course).
    • informal feedback: Dec 19 2015
    • Ungraded - you are free to omit this step and just use the provided framework if you like. We still recommend working this out yourself - it's a good exercise to recap the basic graphics concepts from the bachelor.
  • Assignment sheet P2 - due Jan 07 2015 (1 week).
    • milestone interview: Jan 07 2015 (BBL 4.47, time slot between 9-14h)
    • graded - accounts for one third of the practical score.
  • Assignment sheet P3 - due Jan 22/23 (2 weeks)
    • optional consultation hours: Jan 14 2015 (BBL 4.47; optional, mail Vazgen for time slot)
    • milestone interview: Jan 21 2015 (BBL 4.47, time slot between 9-14h)
    • final presentation:  Jan 23 2015 (BBL 0.65, whole class form 09-11h)
    • summary write-up:  Jan 23 2015 (deadline: 23:59h via email)
    • graded - accounts for two thirds of the practical score.


  • The milestone schedule is designed to provide you with feedback and to structure the work a bit - independent of this, it is a good idea to get started earlier.
  • There will be additional consultation hours for the practicals in January.

Deliverables for Assignment P3

In order to pass the final part P3 of the project, you need to meet the following requirements:

  • Submit a proposal on time (Deadline: Wed, Dec 31, before the practicals start!).
    If you chose an example proposal, a very short email (your names,
    selected project) is enough.
  • Solve the assignment and demonstrate a working code during the
    milestone P3 interviews (Wed Jan 21 2015).
    The results will be (individually) graded; be prepared to identify your
    individual contribution and explain your part.
  • Present the final results (with potentially further improvements) in the
    final presentation on Fri Jan 23 2015. You have 5 minutes to describe your method and demo your software and/or results images. The presentation and the final results is graded, too.
  • Important: At the day of the presentation (i.e., Jan 23 2015, deadline 23:59h),
    hand-in a short summary write-up in which you describe
    • Your approach (method chosen, important algorithmic and technical aspects)
    • Your results (screenshots with description)

The write-up helps you to communicate to us the latest results and improvements and to point out the most important aspects that you are maybe particularly proud of. It will be taken into account when we decide on the final overall grade. The (very low) minimum requirement is to send in one page, including screen-shots. You can submit up to 3 pages (A4, reasonable format) of text, plus a reasonable amount of additional images / screen shots, if you like to explain more details. We recommend 1 page of pure text plus screenshots.



You can find the results gallery from the previous instance of the course over here.


Software Framework

Geo-X Framework

    Geo-X logo
  • Geo-X is an (optional) programming framework for the practicals.
  • It provides a reflection-based interface for creating experiments, and a number of simple 2D/3D viewers. It makes it substantially easier to created of user interfaces for interactive applications.


  • Assignment 1: Your task here is to reimplement the provided 3D viewer. However, you are free to use the reference solution provided below without deductions. In other words, practical assignment 1 is optional.
  • Assignment 3: If you did not manage to implement the raytracer, you can get a reference solution. Please contact Michael if you need it (it will also be posted on the web page after the milestone for assignment 2 has passed).


  • Source code: Download the sources code archive (Windows/Linux). The software is open source (GPL2).
  • Documentation: Download an introduction to the Geo-X framework.
  • Unix/Linux: Additional hints for building the project.
  • MacOS: Additional hints for building the project.
    (Note: the Mac platform has not been tested extensively - use at your own risk!)
  • Reference Solution P1: Solutions to assignment P1 (improved viewer, obj/smf import; you can use this version to start with, although we still recommend building your own viewer).
  • Reference Solution P2: Partial solution to P2. Provides a solution to the accelerated kD-Tree raytracing assignment in P2. Please see detailed explanation below.
  • Geo-X logo
    • The code is provided as an updated version of GeoX.
    • Please note that this is an example solution, not a fully worked out software framework. You are allowed to use as much of it as you like for your solution of P3, but be aware that you have to work yourself through the code and understand how it works. There is little documentation and, unlike the provided solution to P1, the code is not written as an extensible framework everywhere, but some parts are still "monolithic" and need a bit of extra work to be reused.
    • A few remarks concerning the structure of the code:
      • Starting point: "MeshImporterExperiment.h" is the experiment file that (still) controls loading, viewing and (new) raytracing of models. The viewer has been extended to permit displaying bitmaps in parallel to the OpenGL view.
      • Main Raytracer: The folder "raytracing" contains all of the files that perform the actual raytracing. "KDTree.h/hpp/.cpp" is a templated KDTree for storing triangles with overlapping axis-aligned half-spaces. The actual raytracer is implemented in file "Raytracer.h/.cpp". It is a simple, monolithic design; all the functionality is contained in a class named "Raytracer" (not surprisingly). It implements a simple Primary-ray raytracer; the most interesting method is "Raytracer::traceRayKDTree". If you want to reuse the code for your own project, you probably want to extract this part and plug it in wherever you have to perform ray-triangle intersection queries.
      • Performance: The performance is not stellar, but decent for a vanilla C++ implementation without vectorization or multi-threading. It performs about 250K-1M ray-queries per second for moderately complex scenes (100K-1M triangles).
      • Speedups: You can for example add a "#pragma parallel for" using "OpenMP" in the main rendering loop (over all pixels) to benefit from multiple cores (needs to be enabled in project settings, too, and you need to make sure not to introduce any shared access to global variables in your own code).
    • If you have questions about the code, please mail Michael with CC' to Vazgen.

Alternative Platforms & Frameworks

You can use any other language/environment (also at your own risk). You must contact the lecturer for approval before starting (to make sure the difficulty level is fair; you cannot use POVRAY as a platform, for example). In the last instance of this lecture, the majority of groups have build their own viewer (mostly using C++ and C#); so this is a good option and probably even more fun (you learn more) than using the standard framework. Nonetheless, the risk is higher and it is much more your responsibility to make everything work on an alternative platform.

In case you do use Geo-X: We can only "officially" support Geo-X with Windows + Visual Studio. The software works on Linux, too (best efforts, but this worked well in the past). MacOS requires some extra efforts, but is also possible (no guarantees here).




In order to pass the course, there are four requirements:

(i) You have to work on all homework assignments and achieve a grade of at least 5.0 (before rounding).

(ii) You have to complete the practical project successfully, at least with a grade of 5.0. The project will be done as group work, but it must be clear that each individual student has contributed sufficiently. This will be checked during the personal interviews.

(iii) You have to participate in a final exam and obtain a minimum score of 5.0.

(iv) The overall score is a weighted average of homework (17%), practicals (33%), and final exam (50%). The overall score must be at least 6.0 (after rounding) to pass the course.

This scheme weights the theoretical part (homework and exam) and the practical part with weights 2:1, reflecting the time allocated for the two different aspects.


There will be an opportuinity for a retake exam. In order to qualify, a grade of at least 4.0 is required in all three areas (homework, final exam, practicals). The result of the retake exam will be weighted by 50% and the original overall course score also by 50%. If the new grade resulting from this average is better than the original one, it will replace the original grade. Otherwise, the retake exam has no effect.

You have to contact the lecturer within two weeks after the retake if you want to participate in the retake.

IMPORTANT: Due (recently refined) university regulations, 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 6.0).

Transfers from the previous lecture

It is possible to transfer partial achievements from the previous lecture, i.e., the Advanced Graphics at UU from the academic year 2013-2014. Specifically, if you have not passed the lecture but did pass the practical part, you can use this score as is and you do not have to do a practical project. You still must participate in homework and final exam though. Transfers from earlier lectures are not possible because the scope is too different. Please contact the lecturer within the first week of the lectures if you want to make use of this opportunity.

Literature & Links


The course does not strictly follow a fixed textbook. However, the following book discusses all topics of the course, but in greater depth than what can be handled in one period. The lecture will therefore deviate from the textbook in terms of depth and, for simplicity, also in notation. Nonetheless, it is a good supplementary read, and highly recommended:

Andrew Glassner: Principles of Digital Image Synthesis. CC-online version at:

Further literature:

  • François Sillion and Claude Puech: Radiosity & Global Illumination. Morgan-Kaufmann, 1994.
    This book gives a very good overview of radiometry and finite element radiosity; easier to read than Glassner's more comprehensive text.
  • Tomas Akenine-Möller, Eric Haines, and Naty Hoffman: Real-time Rendering (AK Peters)
    This book covers the real-time aspects (not so central to our lecture).
  • Philip Dutré: Global Illumination Compendium.
    For a quick overview and reference.

Research Papers & Surveys

Photon Mapping:

(Bi-Directional) Path Tracing:

Previous lectures:

Other web resources:

News Archive

Old posts

  • Non-recent news will be moved here to avoid clutter at the top of the page.

Jan 12 2015:

  • Reference Solution KD-Tree Raytracer (P2): A reference solution for the accelerated raytracer (using kD-Trees) has been posted below. You can download it right here.
  • Please note that this is an example solution, not a fully worked out software framework. You are allowed to use as much of it as you like for your solution of P3, but be aware that you have to work yourself through the code and understand how it works. There is little documentation and, unlike the provided solution to P1, the code is not written as an extensible framework but as a "monolithic" piece.
  • If you have questions about the code, please mail Michael with CC' to Vazgen.

Jan 06 2015:

  • GeoX update: In case you are using the reference solution to P1 for your practicals (as linked below): The provided viewer does not give you direct access to the camera settings ("Camera" and "ViewFrustum" objects). To add the missing property access methods, please download this patch and copy the two files into the corresponding directory (geox-solution-assignment-P1/viewers/widgets/*.h), replacing the previous headers.
  • Notes: In case you are using the provided framework: The Camera class provides the methods
       Vector3f getPosition()
       Vector3f getOrthoNormViewDirection()
       Vector3f getOrthoNormRightDirection()
       Vector3f getOrthoNormUpDirection()
    to access the camera coordinate frame, and the ViewFrustrum class defines the visible window via:
       float32 getVerticalFieldOfView()
       float32 getXToYAspectRatio()

Jan 02 2015:

  • Practicals rooms and timings have been updated on the web page (as discussed during the lecture).
  • Summary:
    • Interviews P2: Wed Jan 07 2015, Room BBL 4.47, according to time slots.
    • Consultation hours P3 (optional): Wed Jan 14 2015, Room BBL 4.47, mail Vazgen for time slots.
    • Interviews P3: Wed Jan 21 2015, Room BBL 4.47, according to time slots.
    • Final Presentation P1/2/3: Fri Jan 23 2015, Room BBL 0.65, 09-11h.
      Please prepare a 5min presentation. Do not run over time!
    • Summary Writeup: Fri Jan 23 2015, 23:59h, send via email to Michael and Vazgen.
  • Clarification of retake exam rules: A retake exam is only possible if the final exam score is at least 4.0 and below 6.0 (reflecting university regulations).

Dec 17:

  • Homework Scores have been posted - please check your scores and mail the lecturer if anything does not seem right! (You need your password to view the document).
  • Practical interview slots updated - should be complete now.
  • Reference solutions posted for theory homework.
  • Example exams from last year have been posted - please note that the focus this year was slightly different; the homework assignments are most representative for this year's topics and for what to expect in the final exam.
  • Updated slides on efficient global illumination (indexing bug in multi-importance sampling section fixed).

Dec 15:

Dec 09:

  • Updated slides on finite elements (radiosity) are online (there was a mistake with the index of the BRDF term).

Dec 08:

Dec 05:

Dec 01:

Nov 25:

Nov 17:

  • Slides sets 04, 05 updated (reordered / minor changes).
  • Exam date is out: January 28, 9-12 in Ruppert-Paars
  • Schedule has been updated
  • Interview Slots have been posted.

Nov 14:

Nov 11:

Nov 10:

  • Lecture rooms & times updated:
    Mo 9:00-10:45, Room: MIN-019
    Tue 17:00-18:45, Room: MIN-027
    Wed 9:00-10:45, Room: MIN-027
    All in the Minnaert building.
  • For tomorrow's meeting, please find a second student to form a group for homework & practicals.
  • Introduction slides updated (lecture times, typos).

Nov 06:

  • First meeting (lecture starts):
    Mo Nov 10 2014
    9:15-10:45, Room: MIN-019

Nov 04:

  • Slides posted and practicals schedule refined.
  • All information so far is still preliminary!

Nov 03:

  • First version of this website is online.
  • Room assignments and lecture times are still t.b.d. by the department (lectures will be in the "A" slot on Mo/Tue/Wed, three slots a week, Nov 10 - Dec 17).