CS 551-4/651-3:
Real-Time Rendering

Time: TR 5:30-6:45 PM 
Place: MEC 216
Instructor: David Luebke, luebke@cs.virginia.edu
Office hours: Mondays & Thursdays 10-11 AM
Location: Olsson 219
  1. The basics: build a scene graph-based rendering system
  2. Visibility and LOD: add view-frustum culling, and simple LOD support; also add portal culling,  general occlusion culling, LOD preprocessing, or run-time LOD management (objects or terrain).
  3. Cg/Particle Systems: Implement particle systems or some other interesting effect on the hardware, using NVIDIA's Cg language.
  4. Final project: a 3D game engine, with accompanying game "demo", that incorporates some state-of-the-art techniques.
Grade Book: Check your grades on Toolkit (CS 551, CS 651).
E-mail: The class e-mail list is cs551-4@toolkit.virginia.edu
Check the e-mail archive on Toolkit.
Feedback: Send me anonymous feedback on toolkit.
Format: Two lectures per week, with several programming assignments and a final project done in small groups.  Graduate students (enrolled in the 651 version of the course) will also research and lecture on a topic of interest.
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 demo, this is not 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.

Lectures: Some lectures are accompanied by Powerpoint presentations, often from other sources (e.g., NVIDIA presentations at Game Developers Conference).  The original presentations are included below for your convenience.  For copyright-related reasons, these links will only work if you are browsing from a virginia.edu IP address.
Lecture Date Topic Assignment
1 8/29 Introduction; overview; the graphics pipeline then and now [ppt]  
2 9/3 Rendering engine basics: high-level pipelining  
3 9/5 Rendering engine basics: the scene graph
4 9/10 Rendering engine basics: optimizing geometry for rendering Assn 1 out
5 9/12 Rendering engine basics: more on efficient rendering [ppt]  
6 9/17 Balancing the pipeline: finding and eliminating bottlenecks [ppt] Assn 1 check
7 9/19 Visibility: view-frustum culling, cells and portals [ppt]  
8 9/24 Visibility: cell and portals continued, hierarchical Z-buffer [ppt]  
9 9/26 Visibility: hardware-supported occlusion queries, portal textures [ppt], [ppt]  
10 10/1 Level of detail: generating LODs [ppt] Assn 1 due
11 10/3 Level of detail: run-time management [ppt]  
  10/8 FALL BREAK (also drop deadline!)  
12 10/10 Level of detail: terrains (Guest lecture: John Tran) [ppt] Assn 2 out
13 10/15 Level of detail: measuring error; quadrics [ppt]
14 10/17 Level of detail: continuous and view-dependent LOD [ppt]  
15 10/22 Image-based rendering [ppt]  
16 10/24 Parallel rendering; Chromium (Guest lecture: Greg Humphreys). Assn 2 check
17 10/29 NV30; writing vertex and fragment programs with Cg [ppt]  
18 10/31 Cg continued [ppt] Assn 2 due
19 11/5 Non-photorealistic rendering: toon shading, silhouettes [ppt]  
20 11/7 Non-photorealistic rendering: painterly rendering [ppt] Assn 3 out
21 11/12 Advanced texturing: point sprites, billboards, special effects [ppt] Assn 3 check
22 11/14 Shadow algorithms: planar shadows, shadow volumes, shadow maps [ppt]  
-- 11/16 -- Assn 3 due
23 11/19 Discussion of final project plans  
24 11/21 TBD Project proposals due
25 11/26 TBD  
26 12/3 TBD  
27 12/5 Project presentations (?) Project check 2
  12/13 FINAL PROJECTS DUE Final projects due
Grading: The final grade will be calculated as a weighted average:
  • Assignments: 45%
  • Final project: 45%
  • Group participation: 10%
Assignments will be graded on a 100-point scale.  Students will work in small teams on the final project, and possibly some of the assignments.  All team members will receive the same grade.  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.
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. 

You have up to five late days to use at your discretion.  Each late day extends the due time by 24 hours.

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.

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.