General Information
Instructor: |
John Reppy |
|
TAs: |
Tewodros Ayalew |
|
Xiao Zhang |
||
Lectures: |
TR 15:30-16:50 |
Ryerson 276 |
Labs: |
W 16:00-17:20 |
CSIL 1 (in JCL) |
W 17:30-18:50 |
CSIL 1 |
Course Description
This course aims to provide an introduction to the basic concepts and techniques used in 3D computer graphics. The focus is on real-time rendering techniques, such as those found in computer games. These include: coordinate systems and transformations; geometric modeling; the programmable graphics pipeline; level-of detail optimizations; and rendering techniques.
The course covers both the theory and practice of computer graphics. The lectures, homework assignments and exams focus on algorithms, data structures, and the mathematical foundations of computer graphics, while the lab sessions and programming projects deal with translating theory into practice.
Office Hours
We have scheduled in-person office hours Mondays and Fridays.
Weekday | Time | Host and Location |
---|---|---|
Monday |
15:00-16:00 |
Xiao Zhang (JCL 205) |
Friday |
10:00-11:00 |
John Reppy (JCL 253) |
Friday |
15:30-16:30 |
Tewodros Ayalew (JCL 257) |
You may also schedule a meeting (either in-person or via Zoom) with the instructor by sending email to jhr@cs.uchicago.edu.
Syllabus
The following is a tentative plan for what topics will be covered and when.
Week | Date | Activity | Topics |
---|---|---|---|
1 |
Sept. 27 |
Lecture 1 |
Course introduction; the graphics pipeline; evolution of graphics hardware and software. |
Sept. 28 |
no lab |
||
Sept. 29 |
Lecture 2 |
Linear algebra crash course: vectors and matrices |
|
2 |
Oct. 5 |
Lecture 3 |
More linear algebra; transforms; homogeneous coordinates; quaternions |
Oct. 6 |
Lab 1 |
Introduction to GLFW and Vulkan |
|
Oct. 7 |
Lecture 4 |
Geometry; parameterized vs. implicit representations; intersection testing. |
|
3 |
Oct. 11 |
Lecture 5 |
More geometry and projections |
Oct. 12 |
Lab 2 |
Shader Programs & 3D Transformations; GLFW Key & Mouse Events |
|
Oct. 13 |
Lecture 6 |
Projections |
|
4 |
Oct. 18 |
Lecture 7 |
Rasterization, basic illumination, lighting, and shading |
Oct. 19 |
Lab 3 |
Texturing objects; per-pixel lighting computations |
|
Oct. 20 |
Lecture 8 |
Advanced shading: texture maps, normal maps, procedural texturing, and blending |
|
5 |
Oct. 25 |
Lecture 9 |
Shadows; Blending |
Oct. 26 |
Lab 4 |
Shadows |
|
Oct. 27 |
Lecture 10 |
Deferred rendering; the G buffer |
|
6 |
Nov. 1 |
Lecture 11 |
Mesh representations of objects |
Nov. 2 |
Lab 5 |
||
Nov. 3 |
Lecture 12 |
Spatial data structures, bounding volumes, spatial partitions |
|
7 |
Nov. 8 |
Lecture 13 |
Accelerating rendering — view-frustum culling, etc. |
Nov. 9 |
Lab 6 |
||
Nov. 10 |
Lecture 14 |
Terrain rendering; Parametric surfaces; Tessellation shading |
|
8 |
Nov. 15 |
Lecture 15 |
Exam Review |
Nov. 16 |
Exam |
||
Nov. 17 |
Lecture 16 |
Animation ‐- interpolation of key frames |
|
Thanksgiving Break |
|||
9 |
Nov. 29 |
Lecture 17 |
Animation ‐- physics-based animation; particle systems |
Nov. 30 |
Lab 7 |
||
Dec. 1 |
Lecture 18 |
GPU-based ray tracing |
|
Exam week |
TBA |
Final Project Demos |
Course Work
The course will have four kinds of assignments:
-
Homework assignments
-
Lab assignments
-
Individual projects
-
Final project
In addition, there will be an exam on the evening of November 16.
Homework Assignments
Homework assignments are written assignments that cover the material discussed in lecture. These assignments will be due at the start of class.
Lab Assignments
There will be small programing exercises associated with the lab sessions. These are designed to introduce you to the features of Vulkan and to the techniques that you will need for working on the individual projects.
Lab assignments are not graded.
Individual Projects
The course has five or six programming assignments. The assignments will be coded in C++17 using the Vulkan graphics API. Details about the software we use in this course can be found here. This software is installed on the CSIL Macs.
We believe that programming style is important, your grade will be based on style and documentation of your code, as well as on correctness). It is also important that your code compile successfully.
Code that does not compile will not be graded.
Final Project
The final project will be broken into two parts; the first part will have a fixed set of features that you will be required to implement, while the second part will be more free-form where you will choose enhancements that you want add to the project.
There will be a demo session for the final projects scheduled during exam week (I usually use the time slot that the registrar assigns for the final exam).
You are free to work in pairs for the final project.
Exam
There will be an exam on Wednesday November 16 at 7pm in JCL 390. It will be a two-hour open-notes written exam.
Text Books
The class does not have a required text, but we have some recommendations if you are looking for additional sources of information:
Eric Lengyel is writing a multi-volume series of books on the Foundations of Game Engine Development. The first two volumes cover most of the mathematical and algorithmic material in the class.
A good overview of computer graphics is
Fundamentals of Computer Graphics (5th Edition), Steve Marschner and Peter Shirley, CRC Press, 2022.
Programming Resources
- CMSC 23700 Software Environment
-
This web page describes the software libraries and tools that we are using and where to find them.
- CS237 Library API Documentation
-
Doxygen generated documentation for the CS237 Library.
- Group Project Resources
-
This document provides links to various resources that you might find useful for the group project.
- Vulkan Tutorial
-
This tutorial, which is also available in PDF and EBook formats, goes into significant detail about how to set up and use Vulkan for graphics. In this course, much of the boilerplate code described in this tutorial is provided for you in the
cs237
library. - GLSL Specification (Version 4.60)
-
We use the OpenGL Shading Language to write shaders for Vulkan. There online manual pages for the GLSL functions, but note that this documentation also includes the manual pages for OpenGL (functions with a
gl
prefix are OpenGL). - GLFW Documentation
-
- GLM documentation
-
This page has links to both the API documentation and the GLM manual. There is also a PDF version of the manual here.
- Standard C++ Library reference
-
General information and C++ tutorials can also be found at that site.
- CMake Online Documentation
-
- GDB to LLDB command map
-
LLDB is the standard debugger on macOS (it is part of the clang project). This web page describes the LLDB commands in terms of there GDB equivalents.
Academic Honesty
Note
|
The following discussion is owed to Stuart Kurtz |
The University of Chicago is a scholarly academic community. You need to both understand and internalize the ethics of our community. A good place to start is with the Cadet’s Honor Code of the US Military Academy: "A Cadet will not lie, cheat, or steal, or tolerate those who do." It is important to understand that the notion of property that matters most to academics is ideas, and that to pass someone else’s ideas off as your own is to lie, cheat, and steal.
The University has a formal policy on Academic Honesty, which is somewhat more verbose than West Point’s. Even so, you should read and understand it.
We believe that student interactions are an important and useful means to mastery of the material. We recommend that you discuss the material in this class with other students, and that includes the homework assignments. So what is the boundary between acceptable collaboration and academic misconduct? First, while it is acceptable to discuss homework, it is not acceptable to turn in someone else’s work as your own. When the time comes to write down your answer, you should write it down yourself from your own memory. Moreover, you should cite any material discussions, or written sources, e.g.,
Note: I discussed this exercise with Jane Smith.
The University’s policy, for its relative length, says less than it should regarding the culpability of those who know of misconduct by others, but do not report it. An all too common case has been where one student has decided to "help" another student by giving them a copy of their assignment, only to have that other student copy it and turn it in. In such cases, we view both students as culpable and pursue disciplinary sanctions against both.
For the student collaborations, it can be a slippery slope that leads from sanctioned collaboration to outright misconduct. But for all the slipperyness, there is a clear line: present only your ideas as yours and attribute all others.
If you have any questions about what is or is not proper academic conduct, please ask your instructors.
COVID-19 Policies
UChicago Health Pact
All students on campus are required to adhere to the guidelines in the UChicago Health Pact in order to promote a safe environment in the classroom.
Unvaccinated and fully vaccinated individuals are required to wear a face covering over the nose and the mouth at all times while in University buildings (except when eating or in a private space). Do not attend class if you feel unwell or are experiencing COVID-19 related symptoms The complete text of the UChicago Health Pact along with additional information about COVID-19 protocols can be found here.
Reporting COVID-19 Related Concerns
Any concerns over inappropriate PPE usage, physical distancing, cleaning/disinfection, or other COVID-19 related public health concerns should be directed to UCAIR.
If there is an emergency, call 773-702-8181 or dial 123 on any campus phone.
Reporting COVID-19 Exposure or a Confirmed Case
If you were potentially exposed to COVID-19 or your COVID-19 test results come back positive, reach out immediately to C19HealthReport@uchicago.edu.