Rendering Algorithms (FA19)


How are the photorealistic images in animated films, visual effects, or architectural pre-visualization created?

This class focuses on advanced 3D graphics techniques for realistic image synthesis. You will learn how light interacts with objects in the real world, and how to translate the underlying math and physics into practical algorithms for rendering photorealistic images.


  • COSC 11,
  • COSC 50,
  • or instructor's permission

We will rely on calculus, linear algebra and use basic concepts of algorithms and data structures. Students are expected to be familiar with the C++ programming language that we'll use in the programming assignments. Graduate students should have taken a course in multi-variable calculus equivalent to MATH 8.

Course staff

Instructor: Prof. Wojciech Jarosz
TA: Benedikt Bitterli


MWF 12:50–1:55pm
Location: Moore 110


Tu 1:20–2:10
Location: Moore 110

Office Hours

Friday 3:30–5:00pm (or by appt), Sudikoff 156

Tuesday 2:10-3:10pm, Thursday 1:30-2:30pm, outside Sudikoff 163 (at the black tables)


This is a project-based course, and the majority of your grade will come from programming assignments, which you'll find in the Assignments section of the website. There will also be in-class hand-written quizzes and/or an exam. I will post slides online after lecture, which you can access in the Files section, or by clicking on the corresponding lecture in the course Calendar. Check the weekly schedule below.

For the programming assignments, you will initially receive a very basic ray tracing framework that lacks most rendering-related functionality. As we discuss various concepts in class (the physics of light, how light interacts with surfaces and volumes, the Monte Carlo method and sampling), you will apply that knowledge in a series of programming assignments, implementing increasingly sophisticated rendering algorithms in your own software.

By the end of the quarter your software will have a basic set of features allowing you to create simple photorealistic images by simulating the physics of light in a virtual scene. In the last programming assignment you will implement a set of additional features of your own choosing and create a photorealistic image that is both technically and artistically compelling.


Beyond lecture material, we will rely on four books in this class:

Firstly, we will be using Peter Shirley's excellent and very accessible "Ray tracing" series of 3 mini e-books. These "books" are short, fun and informal – more like blog posts than textbooks – and are a great way to get started on this exciting topic. We will refer to these as Shirley1, Shirley2, and Shirley3. We will primarily focus our attention on these books in the beginning of the class.

On the other end of the spectrum, we will be also be using "Physically Based Rendering, Third Edition: From Theory To Implementation" by Matt Pharr, Wenzel Jakob, and Greg Humphreys. This is a big (sometimes intimidating) textbook, with all the mathematical details you will need to dive deep into the rendering topic of this class. We will use this mostly as a reference to complement the Shirley mini-books and lecture but will also increasingly shift our focus to this book as the quarter progresses.

Obtaining the books

Luckily, you don't have to pay a lot to get any of these textbooks!

You can download Shirley's Ray tracing series for free here (In One WeekendThe Next WeekThe Rest Of Your Life). Alternatively, you can purchase the Kindle version of this series from Amazon (In One WeekendThe Next WeekThe Rest Of Your Life). Half of the proceeds of these sales go to Hack the Hood, a really neat organization.

The can access PDFs of the individual chapters of PBRT through Science Direct if you are accessing it from a Dartmouth IP address. The entire book is also available as a free interactive website. If you want to get the physical book, you can purchase it from Amazon.

Assigned reading

There will be reading from these book each week to supplement the material discussed in lecture. I'll list the relevant reading in the description of the corresponding lecture event in the Calendar.

Learning Outcomes

By the end of the course, you will be able to:

  • Explain the physical quantities of light transport and perform basic computations using pencil & paper
  • Explain a variety of models describing how light interacts with different materials
  • Explain the rendering and radiative transfer equations and show how to construct Monte Carlo methods to solve them
  • Design and implement an advanced rendering system based on Monte Carlo integration
  • Assess / evaluate the strengths, weakness, and capabilities of various rendering algorithms

Grading Scheme

The tentative grading scheme will be:

  • 50%: Programming assignments
  • 25%: Exam(s)/Quizzes
  • 20%: Final project
  • 5%: Participation
Disclaimer: The class is being redesigned this year, so the grade breakdown is subject to change.

Graduate & Extra Credit

Grads and undergrads enrolled in the class will be graded separately and we will generally grade grads more strictly. Additionally, the programming assignments will sometimes include extra portions that will be required for grads and may count as extra credit for undergrads. We will grade these separately and grant extra credit only if the foundation of the original assignment has been completed correctly (e.g., at least 90% of the original requirements/grade are met).

Occasionally we will include the possibility to earn “Hacker Points”. Hacker Points are “underpriced” bonus points for the daring few. Sometimes this might require implementing something that was not taught in class or something that requires some additional research and creative thinking. Hacker Points are awarded only to students who implemented all of the remaining assignment. In addition Hacker Points are either fully awarded or not awarded at all.

At the end of the course, extra credit and hacker points will not be added directly to your score. Instead, we will consider your extra credit to potentially round your grade more favorably when discretizing to letter grades.

Submission Deadlines & Grading

Students will turn in their code through Canvas, and we will have a strict deadline. We will strive to post programming assignment grades on Canvas within roughly a week of the due date. The assignments will build off of each other, so you do not want to fall behind! There is a stiff penalty for late submissions, as discussed in the first lecture. Exception to this rule might be made for special cases only if the professor is informed well before (e.g. not a couple days before) the deadline, or in the case of a medical emergency, and at the professor’s sole discretion.

It’s up to you to check that assignments have been successfully submitted to Canvas; if there are any problems, you must notify course staff by email immediately (not weeks later, claiming “Canvas ate it”).

Rendering Competition

The class culminates with a final project and rendering competition. The purpose of the final project is to add additional advanced features to your rendering software and compete with your classmates to generate the most photorealistic image. Each student will choose an motivational image/scene which they would like to recreate virtually using their software, and must implement the necessary features to achieve their artistic vision. Students will briefly present their final projects during the final exam period to a panel of expert judges, who will evaluate the entries both in terms of technical achievement and artistic quality.

For inspiration, take a look at the rendering competition results from prior iterations of this course, or similar courses at other universities:


We will be using Piazza for class discussion.

To set up Piazza, first log on to Canvas. This should take you to the Canvas page for this class, but if not, select “Rendering Algorithms (FA19)” from the “Courses” dropdown. Then, click on “Piazza” on the left side and register using your full email address and a unique password (don’t re-use your Dartmouth NetID password!).

If you have registered with Canvas using your full address before, then your account should already be properly set up. If you registered using a different email, you’ll need to add your address to your Piazza account settings for it to link properly with Canvas.

E-mail the course staff for Piazza access if you are auditing or yet to register.

Piazza is the place for you to ask questions and get help. This allows your classmates to benefit from seeing the question and subsequent instructor response. We encourage you to contribute answers to other people’s threads, or initiate open-ended discussions on topics relevant to the class.

Working together & Academic integrity

If you are not already, you should familiarize yourself with Dartmouth's policies on the Academic Honor Principle, and Proper Citation of Sources.

In short: You are welcome and encouraged to chat about assignments with other students in general terms, but code must be written on your own.

I assume the work you hand in is your own, and the results you hand in are generated by your program. You’re welcome to read whatever you want to learn what you need to complete the work, but I do expect you to build your own implementations of the methods we are studying.

If you’re ever in doubt, just include a citation in your code and report indicating where some idea came from, whether it be a classmate, a website, another piece of software, or anything—this always maintains your honesty, whether the source was used in a good way or not. The same basic principle applies to your presentations. Any material you reuse from outside sources must be properly attributed.

The example scenarios below (adapted from Tom Cormen's discussion of the honor principle) should give you a more concrete idea of what is and is not acceptable.


Accessibility Needs

Students with disabilities who may need disability-related academic adjustments and services for this course should see me privately within the first week of class. Students requiring disability-related academic adjustments and services must consult the Student Accessibility Services office (Carson Hall, Suite 125, 646-9900). Once SAS has authorized services, students must show the originally signed SAS Services and Consent Form and/or a letter on SAS letterhead to me. As a first step, if you have questions about whether you qualify to receive academic adjustments and services, you should contact the SAS office. All inquiries and discussions will remain confidential.

Mental Health

The academic environment at Dartmouth is challenging, our terms are intensive, and classes are not the only demanding part of your life. There are a number of resources available to you on campus to support your wellness, including your undergraduate dean, the Student Wellness Center, and Counseling and Human Development.

Course Summary:

Date Details Due