Computer Graphics (CMU 15-462/662)
CMU 15-462/662, Fall 2018
Mon/Wed 1:30-2:50pm
GHC 4307
Instructor: Keenan Crane
Course Description

This course provides a comprehensive introduction to computer graphics. Focuses on fundamental concepts and techniques, and their cross-cutting relationship to multiple problem domains in graphics (rendering, animation, geometry, imaging). Topics include: sampling, aliasing, interpolation, rasterization, geometric transformations, parameterization, visibility, compositing, filtering, convolution, curves & surfaces, geometric data structures, subdivision, meshing, spatial hierarchies, ray tracing, radiometry, reflectance, light fields, geometric optics, Monte Carlo rendering, importance sampling, camera models, high-performance ray tracing, differential equations, time integration, numerical differentiation, physically-based animation, optimization, numerical linear algebra, inverse kinematics, Fourier methods, data fitting, example-based synthesis.

[kmcrane at cs]
Smith Hall 217
Office hours: Monday 4–6pm
Your fun and helpful TAs:
Katherine Ye
[kqy at cs]
Office hours:
Friday 3–5pm
Location: Smith common area
Jackie Li
[yifeil1 at andrew]
Office hours:
Sat 2–4pm
Location: Smith common area
Connor Lin
[zhizhenl at andrew]
Office hours:
Tuesday 5–7pm
Location: Smith common area
Adrian Biagioli
[abiagiol at andrew]
Office hours:
Wednesday 4–6pm
Location: Smith common area

Course prerequisites are (15-213, 21-259, and 21-240) or (15-213, 21-259, and 21-241) or (18-213 and 18-202). Basic vector calculus and linear algebra will be an important component of this course. Previous exposure to basic programming in C/C++ or similar languages is very helpful as course programming assignments will involve significant implementation effort.

Discussion Boards

There are two different mechanisms for discussing course content and asking questions—you will need to sign up for both!.

  • Course Web Page — Our course web page has a nice setup that lets you directly ask questions / make comments on course slides. These slides will appear before each lecture. Part of your course participation grade will be to leave one question/comment per lecture (see below for more info).
  • Piazza — We will be using Piazza for general class announcements, as well as homework questions/help and general discussion. The 15-462/662 Piazza page is located here. The link to sign up for the class on Piazza is here.


(5%) Written Assignments. At the beginning of the semester, students will complete some written exercises on linear algebra and vector calculus to refresh their understanding of some key mathematical concepts used in computer graphics.

(60%) Programming Assignments. Students will complete four programming assignments; each assignment will be worth 25% of the programming component of the course, or 15% of the overall course grade. Most assignments will be done individually; some will have the option to work with a partner.

(20%) Midterm / Final. There will be a midterm and a final, each worth 10% of the overall course grade. Both exams will cover the cumulative material seen in the course so far.

(5%) Class Participation. To earn the first 3% of your participation grade, you are required to make one question/comment on each set of lecture slides, via the 462 webpage. In order to receive credit, this comment must be made prior to the beginning of the next lecture. The remaining 2% of the participation grade will be based on in-class comments, Piazza discussions, participation in office hours, and other contributions to the class (at the discretion of the instructors).

(10%) Take Home Quizzes. Following most lectures, students will complete a short take-home quiz that reinforces the most essential concepts. Quizzes must be turned in by the student, at the beginning of the next lecture; solutions will be reviewed in-class. To mitigate potential absences (sick days, etc.), students can omit up to four quizzes without penalty. Students are encouraged to discuss concepts with their peers, but final quiz answers must be written independently and individually. To make sure you're getting some feedback on your understanding, quizzes will be graded on a quantized scale:

  • 100% — correct idea, details are correct
  • 85% — correct idea, some details are wrong
  • 75% — rough idea, missing major pieces
  • 60% — good faith attempt but clearly wrong
  • 35% — no answer, but you state what you didn't understand
    to get credit here you must write: “I don't know, and here's what I didn't understand...” (and then explain what you didn't understand)
  • 25% — no answer
    to get credit here you must write: “I don't know.”
  • 0% — nothing handed in / too sloppy to read
Notice that you can get partial credit for missing answers, but you must still turn in a piece of paper stating that you don't know the answer, and hopefully, what you were having trouble understanding. Clearly articulating what you don't understand may (ironically) help you finally understand how to approach the problem—the first step is to ask the TA's about whatever you didn't understand! :-).

Late Policy

Each student is allotted a total of five late-day points for the semester. Late-day points are for use on the first four programming assignments only. Late-day points work as follows:

  • A student can extend a programming assignment deadline by one day using one point.
  • If a student does not have remaining late day points, late hand-ins will incur a 10% penalty per day (10% of max points on the assignment).
  • No assignments will be accepted more than three days after the deadline. This is true whether or not the student has late-day points remaining.

The dates on the front page are the official due dates. If you find conflicting information elsewhere (e.g., on Piazza, in-class, talking to a TA...), you should always assume that the assignment is actually due on the date stated on the front page of the course web site. (But please let us know if something seems totally wrong! ;-))

Collaboration Policy

Students in 15-462 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 student should write their own code and produce their own writeup. Consulting another student'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, just be cautious and ask the instructors before proceeding!

If you are caught cheating, you will get a zero for the entire course (not just the assignment).

You may not supply code, assignment writeups, or exams you complete during 15-462/662 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.



There is no required textbook for 15-462, though a variety of books may provide good supplementary material:

Pete Shirley and Steve Marschner with Michael Ashikhmin, Michael Gleicher, Naty Hoffman, Garrett Johnson, Tamara Munzner, Erik Reinhard, Kelvin Sung, William B. Thompson, Peter Willemsen, and Bryan Wyvill
Fundamentals of Computer Graphics. A K Peters, 2009
[ On Amazon ]

John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley
Computer Graphics: Principles and Practice
[ On Amazon ]

Matt Pharr and Greg Humphreys
Physically Based Rendering: From Theory to Implementation
[ On Amazon ]
This book (PBRT) is the book for learning about modern ray tracing techniques. It has a great website with full source code online for an advanced physically-based ray tracer. It even won an oscar for its impact on the film industry!