This course is an introduction to some of the computer graphics methods commonly used in 3D computer games, including topics in rendering and animation, for both real-time and offline preprocessing. In addition, the course will focus on the use of a large game engine and how to navigate and make changes to a huge pre-existing codebase. Students will learn several common algorithms in each topic area with sufficient depth for implementation.
We will be using the Unreal Engine as a basis for the class, so you will also learn details of how a large game engine is constructed, and how to find your way around a large pre-existing program.
Note that (as the course title says), this is a course about computer graphics, specifically 3D graphics, as used by many games. It is not a class about playing games, nor about all of the other equally important aspects of creating a game (AI, art, game play, interface design, ...).
On successful completion of this course, students will
- Know a variety of advanced graphics techniques used in games
- Know how to navigate and make changes to a large pre-existing codebase
- Integrate advanced graphics techniques into a game environment
- Present technical topics to a knowledgeable audience
I will assume you can program in C++ and know Data Structures, at least some Calculus, and Linear Algebra. In UMBC undergraduate classes, these would be covered by a combination of CMSC 341, MATH 151, and MATH 221.
Recommended but not required: CMSC 435/634 (Introduction to Computer Graphics). That class covers software and hardware algorithms below the ones we cover in this class. Understanding those should not be necessary for this class, but can be useful in providing background and context.
There is no required text, but you may find these useful
- The Graphics Codex
- Akenine-Möller, Haines, Hoffmann, Pesce, Hillaire, and Iwanicki, Real-Time Rendering, AK Peters, ISBN 978-1138627000.
Piazza: There is a Piazza site for this class. Everyone enrolled in the class will be added to this site. Class announcements will be made there, so you should either check this site periodically, or make sure it is set to send you messages by email. You should also use it for public communication with your classmates, and the instructor. Questions on concepts and algorithms, especially relating to the assignments, should be asked on Piazza.
Please only post messages appropriate for the entire class to see. Be sure to send messages about grades or other private matters directly to the instructor or grader.
Grades & Assignments:
Grades for the course will be distributed as follows:
|assn1||10%||Shader Programming||Sep 11|
|assn2||10%||Actor Programming 1||Sep 25|
|assn3||10%||Actor Programming 2||Oct 9|
|assn4||10%||Plugins 1||Oct 23|
|assn5||10%||Plugins 2||Nov 6|
|assn6||10%||Engine Code 1||Nov 20|
|assn7||10%||Engine Code 2||Dec 8|
|presentation||10%||10-minute in-class presentation||Varies|
Programming assignments will be built within the Unreal Engine game engine, but will require the use of the C/C++ programming language. These assignments may be time-consuming. START EARLY!.
Assignments are to be submitted electronically by 11:59 PM on Friday of the week listed unless otherwise noted. Assignments submitted up to three days late (by Monday) will be penalized 15 percent of the possible score. Assignments more than three days late will receive a score of 0.
Students enrolled for graduate credit will have additional work on each assignment. The graduate components will be more open-ended and may require a bit more independent research and thinking on your part than the undergraduate components.
|Sep 1/3||Overview (cont) / Shading|
|Sep 8/10||Live Shader Coding||assn1|
|Sep 15/17||Actor Coding|
|Sep 22/24||Actor Walkthrough
Working in a big codebase
|Sep 29/Oct 1||Advanced Actor Coding (Events, Blueprint/C++ integration)
Proxy Geometry (Occlusion, Physics, Volumes, Relief mapping)
Assignment 2 walkthrough
|Oct 6/8||Basic Plugins (Extending Blueprint)
Rendering Passes (Deferred Shading, Skin, Reflection, SSAO)
|Oct 13/15||Assignment 3 walkthrough
Closest point acceleration structures
Advanced Plugins (engine and editor extensions)
|Oct 20/22||Physically-based Rendering (Normal distributions, Energy conservation)||assn4|
|Oct 27/29||Precomputation (Monte-Carlo)
Fitting & Approximation (Spherical Harmonics, Schlick)
Assignment 4 walkthrough
|Nov 3/5||Engine Coding
|Nov 10/12||Assignment 5 walkthrough
Shadows (Cascaded shadow maps, PCF, PCSS)
|Nov 17/19||Antialiasing (SSAA, MSAA, FXAA, TAA)||assn6|
|Nov 24||Assignment 6 walkthrough
|Dec 1/3||Graphics Hardware (Coherence, Memory systems)|
|Dec 8||Animation (Linear blend skinning, Blend Shapes, Blending, Mocap)||assn7
Please see this document for UMBC Policies and Resources, including:
- UMBC Vision Statement
- Student Safety
- Technology: Access, Requirements, Resources, Support
- COVID-19: Safety Expectations and Guidelines
- Academic integrity in the Online Instruction Environment
- Resources to Help you Succeed in Online Courses
- Enrollment Dates and Deadlines
- Accessibility and Disability Accommodations, Guidance and Resources
- Religious Observances
- Hate, Bias, Discrimination and Harassment
- Sex and Gender Based Violence, Harassment and Discrimination