This course provides a broad overview of the theory and practice of rendering. Classic rendering algorithms will be covered, however, most of the course will cover current results in physically-based rendering algorithms.
Attendees should have a working knowledge of computer graphics (at the level of CS248 and CS348A). In particular, you should fully understand the basic 3D display pipeline, viewing and modeling transformations, simple geometric modeling using polygons and quadrics, and hidden surface algorithms like the z-buffer algorithm.
Solid knowledge of integral calculus and basic geometric algorithms is an absolute must. Some exposure to signal processing and probability is also assumed.
hanrahan at cs dot stanford dot edu
Room 370 Gates Computer Science Building
Office hours: 11:00-12:00 Thursday
renng at graphics dot stanford dot edu
Room 381 Gates Computer Science Building
Office hours: 1:30-2:30 Tuesday and Thursday
ada at graphics dot stanford dot edu
Room 368 Gates Computer Science Building
(next to Pat Hanrahan's office)
Office hours: Mon-Fri, 9:00 to 4:30
There is one required text for the course.
Matt Pharr and Greg HumphreysAdditional readings will be assigned from research monographs, papers from journals and conference proceedings, and excerpts from conference tutorials. Only papers NOT available online will be handed out in class.
Physically Based Rendering: From Theory to Implementation,
All lecture slides will be placed online the night before class. Please try to do the readings in advance. Note: these lecture slides were not designed to be self-explanatory. I write on the slides and add a great deal of material during class.
|The Goals of Rendering|
|Ray Tracing I: Basic Algorithms|
|Ray Tracing II: Acceleration Techniques|
|The Light Field I|
|The Light Field II|
|Monte Carlo Integration I|
|Cameras and Film|
|Sampling and Reconstruction: Filtering, Aliasing and Antialiasing|
|Monte Carlo Integration II|
|Reflection Models I: BRDFs, Diffuse|
|Reflection Models II: Glossy|
|Texture and Materials (Multiple Importance Sampling, Phases of the Moon)|
|Participating Media and Volumetric Scattering|
|Light Transport and the Rendering Equation|
|Monte Carlo Path Tracing|
|Irradiance Caching and Photon Maps|
|Current Topics in Rendering|
The projects for this quarter involve enhancing a working ray tracer. We will use a a ray tracing system called pbrt. This system is a combined C++ codebase and textbook written in a literate programming language.
The first part of the course involves an getting started assignment and three main programming assignments. The current plan is for the following three assignments:
Finally, in the last 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. Check out the results produced by previous students.
Stage 1: Implement ray-surface intersection methods for terrains.
Stage 2: Implement a automatic camera model that controls exposure, depth-of-field, and motion blur
Stage 3: Use Monte Carlo techniques to compute reflections from anisotropic surfaces illuminated by a linear light source.
Evaluation criteria: The first three programming assignments will each count as 20% of your grade, and the last programming project will count as 40%. There will be no exams.
Collaboration: 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.
Late assignments: 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.
To do the assignments you will have access to the Sweet Hall Graphics Labs, two rooms located in the basement of Sweet Hall. There are 30 Linux machines between the two clusters, named raptor1 - raptor15 and firebird1 - firebird15. Use ssh for remote access. Students in CS 348B have non-exclusive priority access to this laboratory, whose door is opened using your Stanford ID.
All students with leland accounts automatically have accounts on these machines. Home directories on these machines are shared with other Stanford Computing Clusters using AFS. If you do not have a leland account, consult this ITSS web page. Registered students will get an extra 200MB of disk quota for the quarter.
If you prefer working in your dorm room or workplace, you are welcome to do the assignments on your own machines. However, it is your responsibility to ensure that your code runs on the PCs in Sweet Hall -- that's where we will evaluate your work.
In case the delight of learning does not sufficiently motivate you to exert yourselves heroically on the programming assignments, there will also be a rendering competition. During finals week, a judging will be held to select the best rendering made using the ray tracer you have written in the course. While grades for the projects are based solely on "technical merit", the competition will be judged on both "technical merit" and "artistic impression". The jury, to be named later, will consist of computer graphics experts from both industry and academia. There will be several awards and one grand prize - an all-expenses-paid trip to SIGGRAPH 2005 in Los Angeles. Total value: about $1,000.
Copyright © 2005 Pat Hanrahan