CMSC 23700: Introduction to Computer Graphics

The course provides an introduction to computer graphics, covering fundamental concepts and techniques including: rasterization, sampling, image/signal processing basics, convolutions, coordinate spaces, transformations, camera viewing, 3D transformations, ray tracing, 3D processing, parameterization, animation/deformations, and more. Assignments will be in Python.
Logistics
- Canvas
- Course Meetings: Tuesday & Thursday, 11:00 - 12:20pm (RY 251)
- Lab Meetings:
- L01 Monday 3:00pm–4:20pm (CSIL3)
- L02 Monday 4:30pm–5:50pm (CSIL3)
- L03 Monday 4:30pm–5:50pm (CSIL4)
- Course Communication: all outside-of-class-meeting course communication will occur on the UChicago Intro to Computer Graphics Slack
- Office hours:
- Nam Anh Thursday 2PM-3PM (JCL 207)
- Jacob Serfaty Friday 11:00AM-12:00PM (JCL 207)
- Ron Kiehn Wednesday 4:30PM-5:30PM (JCL 207)
- Rana Wednesday 11:30-12:30PM (JCL 369)
Grading
- 15% Assignment 1: Intro to SVG and 2D Rasterization
- 15% Assignment 2: 3D Rasterization and Camera Viewpoint Geometry
- 15% Assignment 3: Mesh Data Structures
- 15% Assignment 4: Skinning and Rigging
- 35% Final Project: Animation-Off
- 5% Class participation / attendance
Late assignments. You have a "late bank" of 72 hours that you may use throughout the quarter on any of the assignments. After 3 days (or your "late bank" is empty) the assignment will no longer be accepted. Assignments are given in advance with enough notice, so please plan accordingly.
Academic Honesty. All assignments will be individual. Do not discuss or share your solutions/code with other students, don't post solutions online and do not copy from existing code bases online. We run an auto-grader in this course which automatically runs a sophisticated plagiarism detector. This class adheres to the same policies outlined in CMSC 12100 Fall 2021.
Generative AI. The goal of this course is to get you familiar with the high-level concepts of Computer Graphics. While Generative AI can be extremely helpful for productivity or boilerplate tasks during coding - the assignments in this course do not have any boilerplate elements. The assignments are meant to help solidify the course concepts. We have found that over reliance on generative AI tools can significantly hinder student learning. While we discourage the use of Generative AI, we do not prohibit it entirely. When using GenAI you must always credit it in your Documentation.MD writeup for each assignment. Be extremely cautious when using such tools (they have no sense of what is correct or not and may produce plausible-looking code that contains errors). The following are the only permissible uses of generative AI:
- You may use autocomplete tools like Github Copilot to complete individual lines of code, as long as you understand exactly what that line of code is producing. You should exercise caution when repeatedly using this functionality (i.e., generating several lines one after the other). You do not need to cite the autocomplete-based tool for helping write small/individual blocks of code. However, you must credit the autocomplete tool if you use it to generate an entire function/method, or a substantial block of code. Include a docstring or comment stating that the code was generated with an AI tool (naming the tool involved).
- You can take a piece of code we’ve provided to you, and ask a GenAI questions about that code (If you do this you MUST include the questions and GenAI answers in your Documentation.MD writeup for each assignment)
- You can ask GenAI to write a simple and small blocks of code, e.g., "write a for loop" is OK, asking how to do matrix multiplication in numpy is OK
- You may use GenAI tools to answer conceptual questions that will supplement your learning (imagine GenAI as a helpful but fallible classmate)
The following are NOT permissible uses of generative AI:
- You may not use generative AI to describe your code or write any parts of your Documentation.MD (you must describe what you did with your own words)
- Generating more than 3 lines of code at a time from a generative model is not allowed (this includes sequentially)
- The generative model should not be used to solve the main intellectual aspect of assignment. For example, you may NOT ask GenAI to write a function to rasterize triangles.
- Presenting the outputs of generative AI as one's own work, without explicit citation and acknowledgment of what specifically was used from such models is not allowed
Course Schedule
Week | Date | Topic | Materials |
---|---|---|---|
1 | Tues March 25 | Intro & Motivation | slides |
Thurs March 27 | Triangles & Rasterization | slides | |
2 | Tues April 1 | Coordinate Spaces & Transformations | slides |
Thurs April 3 | 3D Rotations | slides | |
3 | Tues Apr 8 | Textures | slides |
Thur Apr 10 | Depth & Transparency | slides | |
4 | Tues Apr 15 | Intro to Geometry | slides |
Thur Apr 17 | Meshes & Half Edge Data Structure | slides | |
5 | Tues Apr 22 | Geometry Processing | slides |
Thur Apr 24 | Geometric Queries | slides | |
6 | Tues Apr 29 | Intro to Animation | slides |
Thur May 1 | Conformal Parameterization (Richard) | slides |
Assignment Schedule
Assignment | Release | Due | Labs |
---|---|---|---|
1 | Thurs March 27 | Fri April 4 | Lab 2 |
2 | Fri April 4 | Wed April 16 | Lab 3 & 4 |
3 | Thurs April 17 | Sat May 3 | Lab 5 & 6 |
Final project (part A) | Sun May 4 | Sun May 11 | Lab 7 |
4 | TBA | Sun May 18 | Lab 8 |
Final project | TBA | ~Wed May 27 | Lab 9 |
Useful Resources
There is no required textbook, though the following will be useful:
- Fundamentals of Computer Graphics. Steve Marschner and Pete Shirley 2021
Instructional Team
![]() |
![]() |
![]() |
![]() |
---|---|---|---|
Rana Hanocka | Nam Anh Dinh | Jacob Serfaty | Ron Kiehn |