General Information
Instructor: |
John Reppy |
|
TA: |
Tewodros Ayalew |
|
Lectures: |
TR 14:00-15:20 |
Ryerson 251 |
Lab: |
W 15:00-16:20 |
CSIL 3 (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 |
Tewodros Ayalew (JCL Common Area 3D) |
Friday |
15:00-16:00 |
John Reppy (JCL 253) |
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 |
Oct. 1 |
Lecture 1 |
Course introduction; the graphics pipeline; evolution of graphics hardware and software. |
Oct. 2 |
Lab 1 |
Introduction to Vulkan |
|
Oct. 3 |
Lecture 2 |
Linear algebra crash course (Part 1) |
|
2 |
Oct. 8 |
Lecture 3 |
Linear algebra crash course (Part 2) |
Oct. 9 |
Lab 2 |
GLFW Key & Mouse Events; communicating with Vulkan |
|
Oct. 10 |
Lecture 4 |
Linear algebra crash course (Part 3) |
|
3 |
Oct. 15 |
Lecture 5 |
Lighting, and shading; basic illumination, and rasterization |
Oct. 16 |
Lab 3 |
Shader Programs & 3D Transformations |
|
Oct. 17 |
Lecture 6 |
Fragment processing and texturing |
|
4 |
Oct. 22 |
Lecture 7 |
Advanced texturing and frame-buffer operations; normal maps, procedural texturing, and blending |
Oct. 23 |
Lab 4 |
Texturing & per-pixel computations |
|
Oct. 24 |
Lecture 8 |
Geometry and geometric queries |
|
5 |
Oct. 29 |
Lecture 9 |
Shadows |
Oct. 30 |
Lab 5 |
Offscreen Rendering and Shadow Maps |
|
Oct. 31 |
Lecture 10 |
Deferred rendering; the G buffer |
|
6 |
Nov. 5 |
Lecture 11 |
Spatial data structures, bounding volumes, spatial partitions |
Nov. 6 |
(No Lab) |
||
Nov. 7 |
Lecture 12 |
Accelerating rendering — view-frustum culling, etc. |
|
7 |
Nov. 12 |
Lecture 13 |
Terrain rendering; Parametric surfaces; Tessellation shading |
Nov. 13 |
Lab 6 |
Deferred Rendering |
|
Nov. 14 |
Lecture 14 |
Transparency |
|
8 |
Nov. 19 |
Lecture 15 |
Exam Review |
Nov. 20 |
(No Lab) |
Exam |
|
Nov. 21 |
Lecture 16 |
Animation ‐- interpolation of key frames |
|
Thanksgiving Break |
|||
9 |
Dec. 3 |
Lecture 17 |
Animation ‐- physics-based animation; particle systems |
Dec. 4 |
Lab 7 |
Compute Shaders |
|
Dec. 5 |
Lecture 18 |
GPU-based ray tracing |
Course Work
The course will have four kinds of assignments:
-
Homework assignments
-
Lab assignments
-
Individual projects
In addition, there will be a two-hour exam on the evening of Wednesday, November 20.
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. Solutions to the Lab assignments will be posted a few days after the lab.
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.
Exam
There will be an exam on Wednesday November 20 at 7pm in Ryerson 177. 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 material that is covered in this class is largely available online, including in the posted slides, lab assignments, and various programming sources that we link to. That said, we do recommend some books for further reading and reference.
The first two volumes in the Foundations of Game Engine Development series by Eric Lengyel are a very useful resource that do a good job of connecting the mathematical foundations with practice. The only way to acquire these books is to order them from Amazon (there are links on the above website).
If you only get one book, we strongly recommend the first volume.
Foundations of Game Engine Development Volume 1: Mathematics
by Eric Lengyel, 2016
IBSN: 978-0-9858117-4-7
Foundations of Game Engine Development Volume 2: Rendering
by Eric Lengyel, 2019
IBSN: 978-0-9858117-5-4
Note
|
If you have trouble obtaining these books, an older alternative (by the same author)
is |
A good resource for the topics covered in this class (and beyond) is
Real-Time Rendering, Fourth Edition (4th Edition)
by Tomas Akenine-Möller, Eric Haines, and Naty Hoffman, CRC Press, 2018.
ISBN 978-1-1386270-0-0
Lastly, a broad overview of the subject of computer graphics can be found in
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 23740 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.