Stanford CS348B, Spring 2022
IMAGE SYNTHESIS TECHNIQUES
Tues/Thurs 3:15-4:45pm
Location: 380-380F
Instructors: Kayvon Fatahalian, Doug James, and Matt Pharr
Course Description

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.

Course Staff
[kayvonf at cs.stanford]
 
[djames at stanford]
 
 
[matt at pharr dot org]
 
Vishnu Sarukkai (CA)
[sarukkai at stanford]
 
 
Office Hours Calendar

Coming soon

Prerequisites

You should have a working knowledge of computer graphics at the level of CS248. Although CS248 is not *required*, if you have not taken CS248 and feel like you have the background to take CS348B, please contact your friendly instructors and let's talk it over. 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.

Textbook

There is one required text for the course.

Matt Pharr, Wenzel Jakob, and Greg Humphreys
Physically Based Rendering: From Theory to Implementation
Third Edition, Morgan Kaufmann, 2016.
[ On Amazon ]

This book has an extensive web site with additional information. The book is also freely available online.

Additional readings will be assigned from research papers from journals and conference proceedings, and excerpts from conference tutorials.

Announcements via Ed Discussion

All class announcements will be made via our Ed Discussion forum. Everyone enrolled in the course via Canvas should be able to access this site.

Programming Assignments
You will be given four programming assignments. 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. Each student is expected to work individually and implement your own solutions (See the collaboration policy for additional guidance).

Late assignments: To allow for unforeseeable circumstances, you will be allowed three 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 and Rendering Competition

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 several awards and one grand prize-an all-expenses-paid trip to SIGGRAPH 2022 in Vancouver, Canada

Grading
  • Programming Assignments (4): 10% each = 40%
  • Final Project: 50%
  • Participation (on-line comments): 10%
Hardware and Software

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 2015, or 2017). 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.

Collaboration Policy

Students in CS348B are absolutely encouraged to talk to each other, to the CAs, to the instructors, or to anyone else about course assignments. However, any assistance 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 CS348B 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.