CS 446: Real-Time Rendering

Time: TR 12:30-1:45 PM
Place: MEC 214
Instructor: David Luebke, luebke@cs.virginia.edu
Office hours: by appointment (Olsson 219)
TA: Ben Cummings, bjc8r@virginia.edu
Office hours: TBD (Olsson 227)
Forum: Use the class discussion forum to discuss anything and everything related to the course or topic of real-time rendering, 3D graphics, 3D games or game engines.  This is the place to take questions about OpenGL, to tell your classmates about resources on the web, or to communicate with your group.  You should check the forum every day or two, especially since the instructor and TA will post news, changes, or help about the assignments.
Assignments: Individual assignments: The first two assignments are to be done individually.
  1. The pitch: go to the class forum and post an idea for a game that you would like to work on, or post your thoughts on the game concepts that have been posted.  We will form groups around the best game ideas that emerge from this discussion.
  2. Benchmarking: work in pairs to do some exhaustive benchmarking of rendering pipeline performance.

Group projects: The remaining assignments will be done in the context of your final project.  Each assignment consists of adding a feature to the group's game engine.  Sometimes the same feature can be used to satisfy different assignments; of course, each group may only use a single feature once.  These projects are to be done individually: you will clearly need to discuss implementation issues amongst your group, and you are welcome to discuss algorithms and structures as well, but the research and coding should be primarily individual efforts.

  1. Engine core (Feb 3-Feb 19)
  2. First individual project (Feb 26-Mar 18)
  3. Second individual project (Mar 18-Apr 6)
  4. Third individual project (Apr 6-Apr 22)
  5. Final game project (Apr 22-May 5)
Project: As a semester-long group project you will develop a 3D game.  This will likely be the hardest course project you have ever worked on, but should also be the most rewarding.  Most of your individual assignments throughout the semester will take the form of adding a particular feature to your group's game engine.  Much more detail coming soon on the format and requirements for this project.
Grade Book: Check your grades on Toolkit.
E-mail: The class e-mail list is cs446-1@toolkit.virginia.edu.  In general you are encouraged to use the class forum instead of the e-mail list to ask for help or clarifications on assignments.

Check the e-mail archive on Toolkit.

Feedback: Send me anonymous feedback on toolkit.  Somebody on your team not pulling their weight?  Something about the lectures or assignments bugging you?  Let me know...I can't promise that I will fix it but I do take this feedback very seriously.
Prerequisites: Grades of C- or better in CS 445, or permission of instructor.  You will need significant competence in OpenGL or Direct3D for this course, as well as a solid understanding of the basics of computer graphics.  See me if you have any questions.
Description: This course will examine real-time rendering of high-quality interactive graphics. Applications such as video games, simulators, and virtual reality have recently become capable of near cinematic-quality visuals at real-time rates. We will study the advances in graphics hardware and algorithms that are making this possible. Over several projects throughout the semester students will work in small teams to develop a small 3D game engine incorporating some state of the art techniques.  Examples of these techniques (and topics we will cover in class) include non-photorealistic rendering, occlusion culling, level of detail, terrain rendering, shadow generation, image-based rendering, and physical simulation.

A note of warning: Although the final project is to build a 3D game, this is not exactly a course about building video games: it is about building a 3D graphics engine such as sits under the hood of modern games. The course will be highly technical and a lot of work. We will not touch on many vital aspects of game design: character AI, the production process, artist tools, the network layer (for multiplayer or online games), interface design, multiplatform support, etc. In other words, don't take the class just because you like playing video games.


Some lectures are accompanied by Powerpoint presentations, often from other sources (e.g., NVIDIA presentations at Game Developers Conference).  The original presentations will be included below for your convenience.  For copyright-related reasons, some of these links will only work if you are browsing from a virginia.edu IP address.

Lecture Date Demo Topic Assignment
1 1/15   Introduction; overview; the graphics pipeline then and now [ppt]  
2 1/20   Rendering engine basics: high-level pipelining [ppt] Assn 1 out
Assn 2 out
3 1/22 Rendering engine basics: the scene graph
4 1/27 Rendering engine basics: optimizing geometry for rendering
5 1/29 Rendering engine basics: more on efficient rendering [ppt] Assn 1 due
6 2/3 Level of detail: introduction [ppt] Assn 2 due
Proj 1 out
7 2/5 Visibility: view-frustum culling, cells and portals [ppt]  
8 2/10   Visibility: cell and portals continued, hierarchical Z-buffer [ppt]  
9 2/12   Visibility: hardware-supported occlusion queries, portal textures [ppt]  
10 2/17   Advanced texturing: point sprites, billboards, special effects [ppt]  
11 2/19   NV30; writing vertex and fragment programs with Cg [ppt] Proj 1 due
12 2/24   Non-photorealistic rendering: toon shading, silhouettes [ppt]
13 2/26   Non-photorealistic rendering: painting, sketching, hatching [ppt] Proj 2 out
14 3/2   Shadow algorithms: planar shadows, shadow volumes [ppt]
15 3/4   Shadow algorithms: shadow volumes cont., shadow maps [ppt]  
  3/6   SPRING BREAK  
16 3/16 Shane Liesegang:
Zelda on GameCube
Shadow algorithms: smoothies and other advanced techniques [ppt]  
17 3/18 Ori:
Ninja Gaiden
Image-based rendering: images with depth [ppt] Proj 2 due
Proj 3 out
18 3/23   Image-based rendering: pure IBR, hybrid approaches [ppt]  
19 3/25 Derek Juba:
Black & White
Level of detail: simplification operators [ppt]  
20 3/30 Kim Dylla:
Level of detail: simplification algorithms, geometric and perceptual error [ppt]  
21 4/1 Matthew Hill:
Half-Life 2
Level of detail: quadrics and view-dependent LOD [ppt]  
22 4/6   Balancing the pipeline: finding and eliminating bottlenecks [ppt] [pdf] Proj 3 due
Proj 4 out
23 4/8 Thiago Ize:
Doom 3
Balancing the pipeline cont. [ppt]  
24 4/13 Dave: movies Interruptible rendering [ppt]  
25 4/15 Greg: Chromium stuff Parallel rendering; Chromium
(Guest lecture: Greg Humphreys).
26 4/20 Dave: movies Interactive ray tracing: software [ppt]  
27 4/22 Dave: movies Interactive ray tracing: hardware [ppt] Proj 4 due
Proj 5 out
28 4/27 Dave: movies General-Purpose GPU Computing [www]  
  5/5   Project presentations (5-7 PM): FINAL PROJECTS DUE Proj 5 due
Grading: The final grade will be calculated as a weighted average:
  • Individual assignments: 40%
  • Group project: 35%
  • Group participation: 20%
  • Class participation: 5%
Most individual assignments will be performed in the context of the group project by adding a feature to the game engine.  Students will work in small teams on the group project.  All team members will receive the same grade for the group project.  This is not negotiable.  Team members will also evaluate each other's performance; the "group participation" aspect of your grade will be largely informed by these peer evaluations.  Class participation means coming to class, participating in discussion, not falling asleep, and "demo duty".

I reserve the right to add a test, quiz, or "practicum exam".

Late Policy: I don't want people missing class in order to work on assignments that are due that day. Hence the policy: assignments are always due at the beginning of class on the due date. However, if you are in class on time that day, you get a free extension till 11:59 PM that night.  Assignments are due at 11:59 PM if there is no class that day.  Assignments one day late subtract 10%; two days late loses 30%. Two days (48 hours) after the due date, the assignment will be considered a zero. 

Each student has up to five late days to use at his or her discretion for the individual assignments.  Each late day extends the due time by 24 hours.  Late days do not apply to group-wide deadlines.  Let the TA know how many late days you are taking when you turn in an assignment. 

Texts: Required:

Real-Time Rendering (2nd edition) by Tomas Akenine-Moller and Eric Haines, AK Peters (2002).

This book is a significant update from the (excellent) first edition, and contains a great deal of additional material.  In particular there are new chapters on advanced shading techniques, shading capabilities of modern hardware, and so on. It is an excellent book that anybody serious about a career in computer graphics ought to own.  One of the best aspects of the book is the accompanying web site, a vast compendium of graphics resources that the authors keep very up-to-date. 

Other books that may be of interest:

3D Game Engine Design by David H. Eberly, Morgan Kaufmann Publishers (2001).

This book is not required but makes excellent reading for programmers serious about writing their own game engine.  It is quite mathematical and not for the faint of heart.  It comes with a lot of free software, including some very useful little modules, also available from the accompanying web page.

Level of Detail for 3D Graphics by D. Luebke, M. Reddy, J. Cohen, A. Varshney, B. Watson, and R. Heubner, Morgan Kaufmann Publishers (2002).

Line your professor's pockets while learning about level of detail, a crucial tool for real-time rendering.  Errata and links to code, models, and resources at the accompanying web page.

Game Programming Gems (series editor Mark Deloura).

There are three books in the series.  Some of the material from the first two might be a bit dated, but much of it is still very relevant.  Because these are about game design, they include non-graphics topics (e.g., character AI).  Each book is a collection of "gems", submitted by different game programmers.  Some are short useful code snippets, others are long involved packages or essays on different aspects of game programming.


See the tools page.

Honor Code: The honor code applies to all work turned in for this course.  There will be more detailed instructions regarding the use of previously written code (yours and others) with the assignments.