This course is an introduction to some of the computer graphics methods commonly used in 3D computer games. Computer graphics encompasses a wide variety of algorithms and techniques, many more than can be covered in just one or two courses. This course is similar in style and scope to CMSC 635/Advanced Computer Graphics, but uses computer games as a focus and motivation to explore a different set of graphics algorithms. Topics include graphics data structures, design of interactive applications, and real-time graphics. Students will learn several common algorithms in each topic area in 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


You will need one USB disk or flash drive of at least 64 GB. You can find one from Best Buy, Amazon, etc. for under $20.

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: TuTh 1:00-2:30, ITE 354

TA: Shashank Bukka <>
Office Hours: TuTh 11:30-12:45, ENG 005

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.

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.

The group project can use additional external software and libraries with prior instructor approval. Combining this project with projects in other classes is also OK, as long as you get prior approval from both class instructors. Outside of approved exceptions, everything else you submit should be your own. If you are required to have a written submission, all text, figures and images should be your own.

Grades & Assignments:

Grades for the course will be distributed as follows:

What Weight Description Due Date
assn1 10% Building UE4, Using Materials and Blueprints Sep 14
assn2 10% Code Scripting Sep 28
assn3 10% Code Plugins Oct 13
assn4 10% Engine Changes Oct 26
presentation 10% 10-minute in-class presentation Varies


Presentation feedback Daily
project 35% Final Project Nov 30

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 two days late (by Sunday) will be penalized 15 percent of the possible score. Assignments more than two days late will receive a score of 0.

Tentative Schedule

Date Topic Due Presentations
Aug 30 Overview    
Sep 4/6 Shading; Presenting   Tu: Olano
Sep 11/13 Working in a big codebase assn1 Tu: DeBruno, Currie
Sep 18/20 Proxy Geometry
(Occlusion culling, Physics, Volumes, Relief mapping)
  Tu: Cherian, Hinman
Sep 25/27

Volume shader live coding

assn2 Tu: Brown
Th: Kher
Oct 2/4 Assignment 2 code review;
Rendering Passes
(Deferred Shading, Skin, Reflection, SSAO)
  Tu: Ancona, Boutsikas
Th: Harper, Prather
Oct 9/11 Physically Based Rendering
(Normal distributions, Energy conservation)
assn3 (Saturday) Tu: Levin, Gough
Th: Koo, Pham
Oct 16/18 Assignment 3 code review; More PBR
Tu: Sprehe, Olaleye
Th: Schmidt, Siegel
Oct 23/25

(Cascaded shadow maps, PCF, PCSS)

Tu: Xie, Ho
Th: Morton, Muhkin
Oct 30/Nov 1

Assignment 4 code review;
Precomputation, Fitting & Approximation
(Monte-Carlo, Spherical Harmonics, Schlick)

Tu: Enkhbat, Thomas
Th: Wang
Nov 6/8 Quaternions
(Rotations, Slerp)
Tu: Robinson, Sun
Th: Kolarik, Seipp
Nov 13/15 Animation
(Linear blend skinning, Splines, Blending)
Update Tu: Grosh, Lewis
Nov 20 More animation
  Tu: Gottleib, Lagnese
Nov 27/29 Graphics Hardware
(Coherence, Memory systems)
Final Checkin Th: Streat, Latushko
Dec 4/6 Final Presentations    
Dec 11 Final Presentations