Description:

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, ...).

Objectives:

On successful completion of this course, students will

  1. Know a variety of advanced graphics techniques used in games
  2. Know how to navigate and make changes to a large pre-existing codebase
  3. Integrate advanced graphics techniques into a game environment
  4. Present technical topics to a knowledgeable audience

Requirements:

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

Getting Help:

Instructor: Dr. Marc Olano <olano@umbc.edu>
Office Hours: Online, TuTh 4:00-5:15

TA: Tiantian Xie <xtiant1@umbc.edu>
Office Hours: Online, Fr 11:00-1:00

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:

What Weight Description Due Date
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
feedback 20% Presentation feedback Daily

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.

Tentative Schedule

Date Topic Due
Aug 27 Overview  
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
assn2
Sep 29/Oct 1 Advanced Actor Coding (Events, Blueprint/C++ integration)
Proxy Geometry (Occlusion, Physics, Volumes, Relief mapping)
Rendering Passes (Deferred Shading, Skin, Reflection, SSAO)
 
Oct 6/8 Basic Plugins (Extending Blueprint)
Physically-based Rendering (Normal distributions, Energy conservation)
assn3
Oct 13/15 Assignment 3 walkthrough
Closest point acceleration structures
 
Oct 20/22 Precomputation (Monte-Carlo)
assn4
Oct 27/29 Advanced Plugins (engine and editor extensions)
 
Nov 3/5 Fitting & Approximation (Spherical Harmonics, Schlick) assn5
Nov 10/12 Shadows (Cascaded shadow maps, PCF, PCSS)  
Nov 17/19 Antialiasing (SSAA, MSAA, FXAA, TAA) assn6
Nov 24 Engine Structure
THANKSGIVING
 
Dec 1/3 Graphics Hardware (Coherence, Memory systems)  
Dec 8 Quaternions (Rotations, Slerp)
(maybe) Animation (Linear blend skinning, Splines, Blending)
assn7
(Tuesday)

UMBC Policies

Please see this document for UMBC Policies and Resources, including: