Computer Graphics (CMU 15-462/662)
CMU 15-462/662, Fall 2021
Tue/Thu 1:30-2:50pm
HOA 160
Instructor: Keenan Crane
Course Description

This course provides a comprehensive introduction to computer graphics. It 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.

To get a sense of what you'll do in the class, check out some student creations from Fall 2020!
[keenanc at andrew]
Your fun and helpful TAs:
Anne He
[afhe at andrew]
Office hours:
Location: TBD
Daniel Zeng
[dlzeng at andrew]
Office hours:
Location: TBD
Lingxi Zhang
[lingxiz at andrew]
Office hours:
Location: TBD
Sanjay Salem
[svsalem at andrew]
Office hours:
Location: TBD
Vaishnavi Mantha
[vmantha at andrew]
Office hours:
Location: TBD
Joyce Zhang
[yunyizha at andrew]
Office hours:
Location: TBD

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.

Course Structure

For Fall 2021, 15-462/662 will be adopting a “flipped classroom” approach, comprised of two main components. The total time commitment per lecture is the same as in previous semesters except that the activities are now, well, flipped! In previous semesters we did about 80 minutes of in-class lecture, plus a take-home “mini-homework” meant to take about 45 minutes. This semester we'll do it the other way around:

  • Lecture videos (80 minutes/lecture) — Lectures will be made available via the course YouTube playlist. Each lecture is approximately 80 minutes, and we advise you to watch them in two chunks of about 45 minutes per day. For instance, if Lecture 7 is covered in class on Thursday, then you might watch the 1st half of Lecture 7 the preceding Tuesday evening, and the 2nd half Wednesday evening. However you break up viewing, you should have watched the whole lecture by the next in-person class period, so that you are prepared for the in-class discussion.
  • In-class discussion & exercises (45 minutes/lecture) — During the regular class period, we will cover any questions from the lecture video, and then do some in-class exercises to help solidify understanding of the material. In more detail:
    • Questions — To earn your participation grade for the course, you must submit two questions per lecture (posted directly on the slides on the course website). We will discuss the most common/interesting/important questions, as well as any additional questions asked in-class. IMPORTANT: the goal of the discussion is to talk about material from the lectureyou should not ask about coding assignments during this time, nor about general graphics topics that are totally unrelated to the lecture. There will be plenty of time to ask about that stuff in office hours, and on Piazza/Discord.
    • Exercises — Next, we will run through some exercises associated with the lecture, which will be posted online ahead of time. Take a couple minutes to read these and start thinking about them before you come to class. We will call on students randomly try to answer, or at least think through, these questions. Answering questions in class will count for the second part of your participation grade, so make sure to be there!

(Of course, if you watch the videos at 1.5x or 2x speed, your time commitment will be that much less! I talk slow. ;-))

Note that if you want to ask questions about lecture before the next in-class discussion, you are free to ask questions (i) on the lecture slides themselves, via this webpage, (ii) via Piazza, (iii) via Discord, and/or (iv) during office hours. (But make sure to also submit your questions via the form so that you still get credit! These questions do not have to be different than the ones you asked on the webpage/Piazza/Discord/in office hours.)

Some tips for making the most out of videos:

  • Some students have found it helpful to watch videos at 1.25x or 1.5x speed.
  • A few of the videos are broken down into sections via the time index (see the video comments). These are especially helpful for studying, or going back to an earlier concept.
  • Some people have trouble staying focused on a video for a complete 80-minute lecture. If that's true for you, try splitting it up into two (or more) watching sessions. E.g., one 40-minute viewing during the lecture period, and another the next day. The video sections can help you to find a logical break.


The TAs will hold several recitations throughout the semester, to help supplement lecture material and provide key information about assignments. Recitations will also be used to review solutions to the mini-homework. Please refer to Piazza for the recitation schedule and associated links/info.

Discussion Boards

There are several mechanisms for discussing course content and asking questions:

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

  • Discord — We also have a course Discord, which can be used to chat about the course interactively. See Piazza for the link. People have had a lot of fun having both on-topic and off-topic conversations in previous semesters; the Discord can also be a good way to get more interactive help from your TAs and/or peers outside of regular office hours.

(70%) Programming Assignments. The bulk of the coursework is centered around four major programming assignments (A1–A4); each assignment is worth 17% of the overall course grade. You will also have a set of math review exercises at the beginning of the semester (A0), worth 2% of your grade. Programming assignments should be completed independently by each student; any duplicated work will be considered cheating, independent of who copied whom.

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

(10%) Class Participation. To earn the first 5% of your participation grade, you are required to ask two questions/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 class period. The remaining 5% of the participation grade will be based on participating in in-class exercises. These exercises are just a few short questions that reinforce the most essential concepts.

Late Policy

All programming assignments are due at 11:59:59pm Eastern time on the due date, as reported by Each student is allotted a total of six late-day points for the semester. Late-day points are for use on the four programming assignments only (A1–A4). 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).
  • Late-day points get used up for each checkpoint. So for instance, even if you already used one late point for A2.0, you would still have to use another late point if you wanted to turn in A2.1 a day late.
  • 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.
  • You may not use late days past the last day of the semester (i.e., the last day of the week before finals week).
  • Late-day points are also meant to help cover incidents like sick days, interviews, family emergencies, etc. You do not need to ask special permission to use late-day points, nor will we allocate additional late-day points due to such events. For instance, we won't give you extra late days just because you have a bunch of interviews—please plan accordingly. The whole point of this “no questions asked” mechanism is to streamline the process for everyone.

The dates on the course schedule 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). Also, if two identical assignments are handed in, both students will be accountable for cheating (no questions asked). So please be careful to ensure that nobody is copying your work!

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!