Image Synthesis Techniques(CS 348B)
CS 348B, Spring 2017
Room: Green Earth Sciences, Room 150
Instructors: Pat Hanrahan, 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.


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 principle 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.

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

This book has an extensive web site with additional information.

Additional 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.

Programming Assignments
Students will complete 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

Final project: During the last two weeks of the course, students will propose and complete 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.

  • Programming Assignments (4): 10% each = 40%
  • Final Project: 40%
  • Participation (on-line comments + explanation articles): 20%
The Rendering Competition

In the last part of the course you will enhance your system in one of two ways. You may either:

  • Render new images: extend 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.
  • Render existing scenes more efficiently: investigate the performance characteristics of some part of pbrt (computation requirements, memory usage, ...) and optimize the system to improve its efficiency in this respect.

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 2017 in Los Angeles, CA. Total value: about $1,000.

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 2013, or 2015). 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 (3.16 GHz DELL Dual-Xeon Linux boxes). The myth machines are named myth1 - myth16.

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 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). Make sure to make repositories private if you use public source control hosts like github.