General Information

Instructor:

John Reppy

jhr@cs.uchicago.edu.

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.

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.