This course provides an overview of the theory and practice of photorealistic rendering. The primary aim of the course is to cover the principles and techniques of physically-based rendering algorithms, although classic rendering algorithms will be covered as needed.
You are expected to have a working knowledge of computer graphics at the level of an introductory course in the topics such as CS384G or CS354. You should fully understand the OpenGL style basic rendering pipeline, including viewing and modeling transformations, Gouraud and Phong lighting, simple geometric modeling using polygons and quadrics, and hidden surface algorithms like the z-buffer algorithm. You should also be familiar with principles of color spaces, and with the basic recursive ray tracing algorithm.
Facility in the use of integral calculus, linear algebra, and basic geometric algorithms is expected, along with some exposure to signal processing and probability.
Additional readings will be assigned from the research literature and will normally be available on the web.
All lecture slides will be placed online before each class. Please try to do the readings in advance.
The projects for this quarter involve enhancing a working ray tracing system called pbrt (Physically-based Ray Tracer). This system is a combined C++ codebase and textbook written in a literate programming language.
The first part of the course involves a getting started assignment and three main programming assignments. The current plan is for the following three assignments:
In the second part of the course you will enhance your system so that it is capable of reproducing an image of a real object, for example, a gemstone, a puff of smoke, a candle flame, etc.
The first three programming assignments are each worth 20% of your grade, and the last programming project is worth 40%. There will be no exams.
For the first three programming projects, you may discuss the assignment with friends, but you are expected to implement your own solutions. On the last programming project, you are permitted (and encouraged) to form teams of two people and partition your planned extensions among the team members. Teams may discuss their project with other teams, but may not share code.
Since each assignment builds on the previous one, it is important that assignments be completed on time. To allow for unforeseeable circumstances, you will be allowed three weekdays of grace during the quarter. Beyond this, late assignments will be penalized by 10% per weekday that they are late. On the last programming project, neither the demo nor the writeup may be late. Incompletes in this course are given only in exceptional circumstances.
Pbrt will be installed on the public Linux machines in Taylor Hall and in Painter Hall. You are welcome to do the assignments on your own machines if you prefer. However, it is your responsibility to ensure that your code runs on the public Linux machines before being turned in. I will run your code on those machines for evaluation and will expect it to work there.
Acknowledgement: Many thanks to Pat Hanrahan for providing materials from his Stanford course CS 348B, on which this course is modeled.