General Information
Instructor: |
John Reppy |
|
TA: |
Xiao Zhang |
|
Lectures: |
TR 14:00-15:20 |
Ryerson 276 |
Lab: |
W 16:00-17:20 |
CSIL 1 (in JCL) |
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 |
John Reppy (JCL 253) |
Friday |
13:30-14:30 |
Xiao Zhang (JCL 207) |
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. 26 |
Lecture 1 |
Course introduction; the graphics pipeline; evolution of graphics hardware and software. |
Sept. 27 |
Lab 1 |
Introduction to Vulkan |
|
Sept. 28 |
Lecture 2 |
Linear algebra crash course: vectors and matrices |
|
2 |
Oct. 4 |
Lecture 3 |
More linear algebra; transforms; homogeneous coordinates; quaternions |
Oct. 5 |
Lab 2 |
GLFW Key & Mouse Events; communicating with Vulkan |
|
Oct. 6 |
Lecture 4 |
Geometry; parameterized vs. implicit representations; intersection testing. |
|
3 |
Oct. 10 |
Lecture 5 |
More geometry and projections |
Oct. 11 |
Lab 3 |
Shader Programs & 3D Transformations |
|
Oct. 12 |
Lecture 6 |
Projections |
|
4 |
Oct. 17 |
Lecture 7 |
Rasterization, basic illumination, lighting, and shading |
Oct. 18 |
Lab 4 |
Texturing & per-pixel computations |
|
Oct. 19 |
Lecture 8 |
Advanced shading: texture maps, normal maps, procedural texturing, and blending |
|
5 |
Oct. 24 |
Lecture 9 |
Shadows; Blending |
Oct. 25 |
Lab 5 |
Offscreen Rendering and Shadow Maps |
|
Oct. 26 |
Lecture 10 |
Deferred rendering; the G buffer |
|
6 |
Oct. 31 |
Lecture 11 |
Mesh representations of objects |
Nov. 1 |
Lab 6 |
Deferred Rendering |
|
Nov. 2 |
Lecture 12 |
Spatial data structures, bounding volumes, spatial partitions |
|
7 |
Nov. 7 |
Lecture 13 |
Accelerating rendering — view-frustum culling, etc. |
Nov. 8 |
Lab |
Group Project Overview |
|
Nov. 9 |
Lecture 14 |
Terrain rendering; Parametric surfaces; Tessellation shading |
|
8 |
Nov. 14 |
Lecture 15 |
Exam Review |
Nov. 15 |
(no Lab) |
Exam |
|
Nov. 16 |
Lecture 16 |
Animation ‐- interpolation of key frames |
|
Thanksgiving Break |
|||
9 |
Nov. 28 |
Lecture 17 |
Animation ‐- physics-based animation; particle systems |
Nov. 29 |
Lab |
Project help |
|
Nov. 30 |
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
-
Group project
In addition, there will be a two-hour exam on the evening of Wednesday, November 15.
Homework Assignments
Homework assignments are written assignments that cover the material discussed in lecture. We expect that there will be 5—6 homework assignments, which will be assigned on Fridays and due the following Thursday 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
There will be four individual programming assignments. These 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.
Group Project
For the Group Project, you will work in pairs (although you can work individually, if you prefer). This project consists of 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 mored free-form where you will choose enhancements that you want add to your project (there is one required enhancement).
There will be a demo session for the group projects during exam week. The demo session will be held in CSIL-1 from 12:30-2:30 on Thursday, December 7th.
Resources for the project can be found here.
Exam
There will be an exam on Wednesday November 15 at 7pm in JCL 223. It will be a two-hour, open-notes, written exam.
Late Work Policy and Re-submission
Late work will not be accepted. If you do not have time to complete an assignment, you should submit what you can at the deadline and then use the resubmission mechanism to complete it.
Each student has two opportunities to resubmit a revised solution to an assignment. Resubmission can be used for either the written homework assignments or the individual programming projects (but not the group project). You have one week from when a graded assignment is returned to submit a revised version for regrading.
In extraordinary circumstances (e.g., family death, serious accident/illness), I may grant an extension. In such a case, please ask your college advisor to contact me before the deadline.
Text Books
The class has one required and one recommended text books. These are the first two volumes in the Foundations of Game Engine Development series by Eric Lengyel. Unfortunately, the only way to acquire these books is to order them from Amazon (there are links on the above website).
The first volume is required:
Foundations of Game Engine Development Volume 1: Mathematics
by Eric Lengyel, 2016
IBSN: 978-0-9858117-4-7
We suggest that you also purchase the second volume in the series:
Foundations of Game Engine Development Volume 2: Rendering
by Eric Lengyel, 2019
IBSN: 978-0-9858117-5-4
Note
|
If you have trouble obtaining the text, an alternative (by the same author)
is |
For those who are interested in further reading, a good overview of computer graphics is
Fundamentals of Computer Graphics (5th Edition)
by Steve Marschner and Peter Shirley, CRC Press, 2021.
ISBN 978-0-3675050-3-5
Programming Resources
The CMSC 23700 Software Environment webpage describes the software libraries and tools that we are using. It also has links to documentation of these systems, as well as links to online sources of information about graphics and C++ programming.
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.