This course is an introduction to some of the computer graphics methods commonly used in 3D computer games, including topics in rendering and animation, 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, ...). I expect that the class will be a lot of work, but hope that you will find it rewarding.


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. Apply a selection of these techniques
  4. Integrate an advanced graphics technique into a game environment
  5. Present technical topics to a knowledgeable audience


I will assume you can program in C++ and know Linear Algebra and Data Structures. In UMBC undergraduate classes, these would be covered by a combination of MATH 221 and CMSC 341.

Recommended but not required: CMSC 435/634 (Introduction to Computer Graphics)

There is no required text, but you may find these useful

Getting Help:

Instructor: Dr. Marc Olano <>
Office Hours: ITE 354, TuTh 1:00-2:15

TA: Chaitrali Kher <>
Office Hours: ITE 340, M 2:30-3:30, W 1:00-2: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 13
assn2 10% Actor Programming 1 Sep 27
assn3 10% Actor Programming 2 Oct 11
assn4 10% Plugins 1 Oct 25
assn5 10% Plugins 2 Nov 8
assn6 10% Engine Code 1 Nov 22
assn7 10% Engine Code 2 Dec 10
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. 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 29 Overview  
Sep 3/5 Shading  
Sep 10/12 Live Shader Coding
Sep 17/19 Presenting; Actor Coding (Finding example code)
Sep 24/26 Working in a big codebase;
Proxy Geometry (Occlusion, Physics, Volumes, Relief mapping)
Oct 1/3 Advanced Actor Coding (Events, Blueprint/C++ integration)
Rendering Passes (Deferred Shading, Skin, Reflection, SSAO)
Oct 8/10 Basic Plugins (Extending Blueprint)
Physically-based Rendering (Normal distributions, Energy conservation)
Oct 15/17 Assignment 3 walkthrough
Closest point acceleration structures
Oct 22/24 Precomputation (Monte-Carlo)
Oct 29/31 Advanced Plugins (engine and editor extensions)
Nov 5/7 Fitting & Approximation (Spherical Harmonics, Schlick) assn5
Nov 12/14 Shadows (Cascaded shadow maps, PCF, PCSS)  
Nov 19/21 Antialiasing (SSAA, MSAA, FXAA, TAA) assn6
Nov 26 Engine Structure
Dec 3/5 Graphics Hardware (Coherence, Memory systems)  
Dec 10 Quaternions (Rotations, Slerp)
(maybe) Animation (Linear blend skinning, Splines, Blending)

Academic Honesty

By enrolling in this course, each student assumes the responsibilities of an active participant in UMBC's scholarly community in which everyone's academic work and behavior are held to the highest standards of honesty. Cheating, fabrication, plagiarism, and helping others to commit these acts are all forms of academic dishonesty, and they are wrong.

For the individual assignments, you are allowed to discuss concepts, assignments and algorithms, but the actual programming is expected to be your own work. Submit a readme with each assignment describing the assignment and also any and all help you received.

Sexual Misconduct and Abuse

Any student who has experienced sexual harassment or assault, relationship violence, and or staking is encouraged to seek support and resources. There are a number of resources available to you.

With that said, as an instructor, I am considered a Responsible Employee, per UMBC’s Policy on Prohibited Sexual Misconduct, Interpersonal Violence, and Other Related Misconduct.  This means that while I am here to listen and support you, I am required to report disclosures of sexual assault, domestic violence, relationship violence, stalking, and/or gender-based harassment to the University's Title IX Coordinator. The purpose of these requirements is for the University to inform you of options, support, and resources.

You can utilize support and resources even if you do not want to take any further action.
You will not be forced to to file a police report, but please be aware, depending on the nature of the offence, the University may take action.

If you need to speak with someone in confidence about an incident, UMBC has the following Confidential Resources available to support you:

Other on-campus supports and resources:

Child Abuse and Neglect Please note that Maryland law requires that I report all closure or suspicions of child abuse or neglect to the Department of Social Service and/or the police.

Sdditional confidential resources are listed on the UMBC Title IX page.