High-quality rendering is ubiquitous today, with applications ranging from entertainment to product design and architecture. The goal of this course is to provide a deep understanding of the fundamental mathematical and physical principles that are the basis of modern physically based rendering while also introducing the design principles and engineering trade-offs involved in designing and implementing high-performance rendering systems.
You should have a working knowledge of computer graphics (at the level of CS 248 and CS 348A, though it's not necessary to have taken these courses specifically). 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 important. You should understand the principles behind object-oriented programming and be a very good C++ programmer. Previous exposure to signal processing and probability is helpful, but not absolutely necessary.
There is one required text for the course.
Additional readings will be assigned from research monographs, papers from journals and conference proceedings, and excerpts from conference tutorials.
Late assignments: To allow for unforeseeable circumstances, you will be allowed five weekdays of grace during the quarter (to clarify: an assignment due on Friday and turned in on Monday will use one late day). 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.
Final project: During the last two weeks of the course, you will propose and work on a self-selected final project. The final project may be done with one or two partners; teams may discuss their project with other teams, but may not share code. Each team will present the project orally during the Rendering Competition and produce a detailed write-up describing their work and results.
For the final project, you will render a new image by extending the system so that it is capable of reproducing an image of a real object that it can't currently render accurately (for example: a gemstone, a puff of smoke, a candle flame, etc). Check out the results produced by previous students.
In case the delight of learning does not sufficiently motivate you to exert yourself heroically on your final project, there will also be a rendering competition. During finals week, a judging will be held to select the most impressive final projects. The rendering competition jury, to be named later, will consist of computer graphics experts from both industry and academia. There will be prizes for the best projects.
You are welcome and encouraged to do class assignments on your own machines. Although pbrt builds successfully on most systems, the TAs will be able to provide support for compiling pbrt on Linux (on the public Stanford 'myth' machines, see below), on Mac OSX, and on Windows (via Visual Studio 2017, or 2019). Check out how to build pbrt for more information.
If you do not wish to develop on a personal machine, you will have access to the 'myth' machines located in Gates B08. They can be accessed via ssh at myth.stanford.edu.
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.
Students in CS 348B are absolutely encouraged to talk to each other, to the TAs, to the instructors, or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each programming project team must write their own code and produce their own writeup.
Consulting another student's or team's solution is prohibited and submitted solutions may not be copied from any source. These and any other form of collaboration on assignments constitute cheating. If you have any question about whether some activity would constitute cheating, be cautious and ask the instructors before proceeding!
You may not supply code, assignment writeups, or exams you complete during CS 348B to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who've taken the course previously). Your github repository for the class must be made private.