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.
- MATH 8 and COSC 77, or instructor's permission
- Working knowledge of C++ programming
It is recommended (but not required) to have taken COSC 77: Computer Graphics or an equivalent course. 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.
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 (Nori) 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.
The required textbook for the class is Physically Based Rendering by Matt Pharr, Wenzel Jakob, and Greg Humphreys. There will be required reading from this book each week to supplement the material discussed in lecture. The reading you should do before coming to lecture will be listed on the corresponding lecture event in the Calendar.
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
The tentative grading scheme will be:
- 45%: Programming assignments
- 20%: Exam(s)/Quizzes
- 30%: Final project
- 5%: Participation
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 typically 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! We will not accept late submissions for programming assignments (e.g. an assignment handed in just 5 minutes late will get 0 credit). 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”).
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:
- Dartmouth (2016)
- ETH Zurich (2016, Fall 2015, Spring 2015, 2014, 2013, 2012)
- UC San Diego (2008, 2007, 2006, 2005, 2004, 2003)
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 (GSA17)” from the “Courses” dropdown. Then, click on “Piazza” on the left side and register using your full @dartmouth.edu email address and a unique password (don’t re-use your Dartmouth NetID password!).
If you have registered with Canvas using your full @dartmouth.edu address before, then your account should already be properly set up. If you registered using a different email, you’ll need to add your @dartmouth.edu 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
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 & Religious Observances
Students with disabilities who may need disability-related academic adjustments and services for this course are encouraged to see me privately as early in the term as possible. Students requiring disability-related academic adjustments and services must consult the Student Accessibility Services office (205 Collis Student Center, 646-9900, Student.Accessibility.Services@Dartmouth.edu). 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.
Some students may wish to take part in religious observances that occur during this academic term. If you have a religious observance that conflicts with your participation in the course, please meet with me before the end of the second week of the term to discuss appropriate accommodations.
The syllabus page shows a table-oriented view of the course schedule, and the basics of course grading. You can add any other comments, notes, or thoughts you have about the course structure, course policies or anything else.
To add some comments, click the "Edit" link at the top.