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.

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 C/C++ programming is very helpful as course programming assignments will involve significant implementation effort.

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

We will be using Piazza for announcements. The 15-462/662 Piazza page is located here.

(65%) Programming Assignments. Students will complete four programming assignments, plus one “go further” final assignment that extends one of the first four assignments with an advanced technique. Each assignment will be worth 20% of the programming component of the course, or 13% of the overall course grade. The first four assignments will be done individually; the final assignment can be done in pairs.

(7%) Take Home Quizzes. Following each lecture, students will complete a (very) short take-home quiz that reinforces the most essential concepts from the lecture. These quizzes will be graded primarily on effort: was an earnest effort made to answer the questions? Quizzes must be turned in by the student, at the beginning of the next lecture. To mitigate potential absences (sick days, etc.), students can omit up to six quizzes without penalty. Students are encouraged to discuss concepts with their peers, but final quiz answers must be written independently and individually.

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

(3%) Class Participation. At the discretion of the instructors, based on consistent attempts at in-class comments, website comments, and other contributions to the class.

Late hand-in 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.

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!

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.