CS 348B - Computer Graphics: Image Synthesis Techniques
Spring Quarter, 1996
Gates Computer Science Building, Room 366
Office hours: Tue/Thu 11:00 - 12:15 and by appointment
Gates Computer Science Building, Room 384
Office hours: Mon/Wed, 2:00 - 4:00
Note: on the weekends immediately preceeding the due dates of each programming assignment, the instructor and teaching assistant will hold additional office hours in the Sweet Hall SGI lab. Hours TBA.
Gates Computer Science Building, Room 368
This course surveys the theory and algorithms of realistic image synthesis, a.k.a. rendering. There will be nineteen lectures. The topics to be covered, with approximate dates, are:
April 2 - What is rendering?
April 4 - Basics of ray tracing
April 9 - Sampling theory I: spatial domain
April 11 - Sampling theory II: frequency domain
April 16 - Practical anti-aliasing I: supersampling, resampling
April 18 - Practical anti-aliasing II: stochastic sampling, adaptive sampling
April 23 - Texture mapping I: synthesis and parameterization
April 25 - Texture mapping II: transformation and resampling
April 30 - Light transport and the rendering equation
May 2 - Local illumination I: radiometry and photometry
May 7 - Local illumination II: diffuse reflection
May 9 - Local illumination III: specular reflection
May 14 - Spectral representations
May 16 - Global illumination I: shadow algorithms
May 21 - Global illumination II: distribution ray tracing
May 23 - Global illumination III: radiosity formulation
May 28 - Global illumination IV: radiosity solution methods
May 30 - Participating media, volume rendering
June 4 - Non-photorealistic rendering, image-based rendering
My handwritten notes for these lectures will be scanned and placed online the evening before each lecture. They will appear in a list on the course home page.
Michael Cohen and John Wallace,
Radiosity and Realistic Image Synthesis,
An Introduction to Ray Tracing,
Foley, van Dam, Feiner, and Hughes,
Computer Graphics: Principles and Practice,
second edition in C, Addison-Wesley.
The book by Cohen and Wallace is the best tutorial I've seen on the rendering equation and its solutions. The book by Glassner steps you through the basics of writing a ray tracer, which is our project for the quarter. The textbook by Foley, van Dam, Feiner, and Hughes is required for CS 248, which covered roughly the first half of the book. In this course, we will cover chapters 13 through 20. The book is encyclopedic but too superficial for this course, hence my decision to augment it with other readings.
We will also read chapters from research monographs, papers from current journals and conference proceedings, and excerpts from conference tutorials. I hope to have a course reader containing this material ready within a week.
I am placing the following materials on 2-hour reserve at the Stanford Math/Computer Science Library.
Numbers 1 through 3 are the textbooks for the course. Numbers 4 through 7 are textbooks and monographs that cover in depth the mathematical tools and empirical results that I will use in class. You are not expected to master this material beyond the level I present in class. I make these materials available primarily for the curious. Numbers 8 through 12 are compendiums of graphics tricks, hacks, and useful algorithms. These books are so popular that if I don't place them on reserve, you'll have to buy them to read them - not a bad idea in any case.
Also on reserve (permanently) are the proceedings of ACM Siggraph, the premiere forum for publication of research results in the field of computer graphics. I will frequently reference Siggraph papers during my lectures. I encourage you to browse these books; you will find them inspirational in times of suffering and a wellspring of good ideas for your final assignment.
This course assumes familiarity with computer graphics at the level of CS 248. In particular, I assume an understanding of the matrix representation of 3D transformations (FvDFH, chapters 5 and 6), basic line and polygon scan conversion methods (FvDFH, chapter 3), and commonly used hidden-surface algorithms (e.g. Z-buffer, ray tracing) (FvDFH, chapter 15). To make sure everybody is up to speed, I will review the basics of ray tracing in my second lecture.
I also assume knowledge of calculus and linear algebra (one college-level course of each). Knowledge of probability, statistics, and Fourier transforms is helpful in certain parts of the course, but I do not require it.
The project for this quarter is to write a ray tracer. The project is divided into three assignments. In assignment #1, you will assemble the basic building blocks for tracing rays through scenes composed of simple geometric primitives. In assignment #2, you will add support for polygon meshes and you will implement some form of performance acceleration. In assignment #3, you will extend your ray tracer in a way of your own choosing. Example extensions are adaptive stochastic supersampling, the rendering of textures, a more sophisticated local illumination model, distribution ray tracing, or volume ray tracing. Due dates for each assignment will be as follows:
In addition to the programming assignments, there will be two written assignments designed to test your command of the more theoretical aspects of the course. These will be interleaved with the programming assignments as follows:
Evaluation criteria: The first two programming assignments will each count as 20% of your grade, the written assignments will each count as 15%, and the last programming assignment will count as 30%. There will be no exams.
Collaboration: You may discuss the first two programming assignments with friends, but you are expected to implement your own solutions. On the third programming assignment, you are permitted (and encouraged) to form teams of two or three people and partition your planned extensions among the team members. Teams may discuss this assignment with other teams, but each team is expected to implement the extensions independently. In particular, code must not be shared between teams. The written assignments must be individual efforts.
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 one weekday of grace during the quarter. Beyond this, late assignments will be penalized by 10% per weekday that they are late. On programming assignment #3, neither the demo nor the writeup may be late.
Hardware: To do the assignments you will have access to the Stanford Graphics Laboratory. The lab, located in two rooms in the basement of Sweet Hall, contains 15 Silicon Graphics Indigos XZs (100Mhz R4000 processor, 60K polygons/sec, 24-bit frame buffer, and CD-quality digital stereo audio), and 19 Silicon Graphics Indigo2 XZs (150 Mhz R4400 with similar graphics capabilities). Students in CS 348B have non-exclusive priority access to this laboratory, whose door is protected by a combination lock.
Software: To help focus your attention on the key ideas in each assignment, we will provide an interactive Inventor-based front-end program that allows you to assemble a scene from simple primitives, select viewing parameters, define directional or point light sources, and specify reflectance properties for each object in the scene. We will also provide an X support package that allows you to build a custom user interface for your ray tracer.
Using other platforms: Our front end-program and X support library will be installed on the Stanford Graphics Laboratory machines in Sweet Hall. We may also provide one or more 3D modeling programs. If you prefer working in your dorm room or workplace, and have access to a machine there, you are welcome to do the assignments on your own machines. We will make as many of these tools available via ftp as we are permitted by the terms of our licensing agreements, but we will not support them on any other platform. Moreover, your code must run on the SGI machines in Sweet Hall. In particular, we will grade your projects by running your programs on an SGI using our own test data files, and assignment #3 will be graded face-to-face in the Sweet Hall laboratory. It is your responsibility to copy and test your code on the Sweet Hall SGI's.
Student accounts: The Sweet Hall SGI workstations share accounts and file servers with the Sweet Hall machine cluster. 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, surf to http://consult.stanford.edu/accountinfo/.
Course directory: Once your account is active, log in to one of these workstations and browse through the directory /usr/class/348b. This will be your course directory. All software and data relevant to the course will be placed here. In particular, this is where you will find the front-end program and X support package for the programming assignments. See the README file for more information. A copy of these tools will also be placed at the anonymous ftp site ftp.stanford.edu
World Wide Web: New for this year, all class handouts, assignments, reading lists, and lecture notes will be available via the Web at URL http://www-graphics.stanford.edu/courses/cs348b-96. Hardcopy of all materials except the lecture notes will be made available in class and will be shipped by courier to SITN students in the usual manner. In the event that these hardcopies do not arrive before class time, SITN students can find them on the Web, and early birds can spool them to a printer before class starts. Copies will also be placed in the handout cabinet in Gates Hall, wing 3B, copy room, (room 377).
Newsgroup: A newsgroup has been set up for this course. It is called su.class.cs348b. Feel free to post news to this group. It is intended for posting questions to your fellow students, flaming at the professor (I may, however, read the newsgroup on occasion!), looking for project partners, etc.
Emailing addresses: To send email to the instructor or a particular TA (in the event we end up with more than one TA), use the individual email addresses listed earlier in this document. For questions directed to the TAs jointly and for other purposes that we will announce throughout the class, use email@example.com.
Class emailing list: For items of urgent and universal importance such as clarifications in the assignments or bugfixes related to the support package, your instructors will use an emailing list to contact you, so please make sure we know your email address, i.e. fill in the student questionnaire!
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. At 4:00pm on Thursday, June 6, 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 '96 in New Orleans. Total value: about $1,000.