Real-Time Computer Graphics

Also known as 15-472/672/772. Mondays and Wednesdays from 11:00-12:20 in Hamerschlag Hall B103 during Spring 2026. Taught by Jim McCann. Office hours after class in Smith 229 or by appointment.

Real-time computer graphics is about building systems that leverage modern CPUs and GPUs to produce detailed, interactive, immersive, and high-frame-rate imagery. Students will build a state-of-the-art renderer using C++ and the Vulkan API. Topics explored will include efficient data handling strategies; culling and scene traversal; multi-threaded rendering; post-processing, depth of field, screen-space reflections; volumetric rendering; sample distribution, spatial and temporal sharing, and anti-aliasing; stereo view synthesis; physical simulation and collision detection; dynamic lights and shadows; global illumination, accelerated raytracing; dynamic resolution, "AI" upsampling; compute shaders; parallax occlusion mapping; tessellation, displacement; skinning, transform feedback; and debugging, profiling, and accelerating graphics algorithms.

Previous iterations: Fall'24, Spring'24

Principles

This course is based on four principles:

Work

Your grade in this course will be determined by four assignments that cumulatively build a high-performance real-time renderer (60%); a project that adds a state-of-the-art feature to that renderer (30%); and participation in in-class discussions and activities (10%).

Don't Copy and Don't Steal

You will write a lot of code in this class, and I require that you actually type this code. (It is easy to copy-paste faster than you can think.)

You may use code from the internet, but make sure the code is not covered by a license that prohibits copying (copyright violation -- illegal!), be sure to include a comment citing your source (plagiarism -- immoral!), and make sure it passes through your brain on its way to your fingers (e.g., "fix" the coding style, re-work awkward parts, look up and document parts you don't understand).

You may work together, but take extra care to not copy code. Rule of thumb: if you are writing code, you should not be doing it where you can see your classmates' code.

Examples:

Resources

This course does not have a textbook; but you will likely find the following web resources helpful:

See also: occasional "extra readings" links in sections below.

Schedule

(Perpetually subject to revision -- and, at present, still very much a draft!)

Real-Time Graphics

Monday, January 12th Real-Time Graphics Course Logo

What it means to be real-time and general techniques for getting there.

  • M Jan 12
  • Course Overview; Core Principles
  • Interactive, Real-Time, and Beyond
  • Vulkan Intro
  • Building the tutorial code (nakluV Step 0)
  • renderdoc
  • Javascript, maybe
  • A0a For next class -- nakluV Step 1

Vulkan's view of GPUs

Monday, January 12th
-Monday, January 26th
Vulkan Icon, from 'https://www.vulkan.org/'

How we get pixels onto the screen quickly. From attributes to framebuffers.

  • M Jan 12 (cont)
  • Command Buffers
  • Render Passes
  • Background Shader
  • Push Constants
  • Pipeline Creation
  • W Jan 14
  • Lines Shader
  • Memory Types
  • Memory Transfers
  • Vertex Buffers
  • Transform Matrices
  • Descriptors
  • Uniform Buffers
  • Objects Shader
  • Storage Buffers
  • A0b For next class -- nakluV Step 2 and 3
  • M Jan 19: MLK Day
  • W Jan 21
  • Swapchains and synchronization
  • Headless mode
  • Just initialization things
  • A0c For next class -- nakluV Step 4, 5, and 6
  • M Jan 26
  • Vulkan Tutorial Wrap-Up
  • Build systems
  • RAII + Vulkan
  • Benchmarking

Data Wrangling

Monday, January 26th
-Monday, February 2nd
Image from the paper 'Bisection Based Triangulation of Catmull Clark Subdivision' by Dupuy and Deloit.

Getting data into our renderer.

  • M Jan 26 (cont)
  • Scene graphs
  • Instancing
  • A1 statement walkthrough
  • S72 intro
  • A1 Scene Viewer out
  • W Jan 28
  • Data inflation: subdivision surfaces
  • Sub-polygon detail: textures, normals, displacements
  • Mesh compression?
  • Texture compression
  • M Feb 2
  • least squares vertex baking(?)
  • Creating (and finding) Bottlenecks
  • Export scripts

Culling and Occlusion

Wednesday, February 4th Image from the talk 'GPU-Driven Rendering Pipelines' by Haar.

What you don't render can't slow you down.

  • W Feb 4
  • Bottlenecks
  • Frustum culling
  • Portal rendering
  • Occlusion queries
  • Geometry images

Materials

Monday, February 9th
-Monday, February 16th
Illustration from SIGGRAPH Real-Time Rendering course about UE5's 'substrate' materials system

Matching the real world, or doing better.

  • M Feb 9
  • detail with textures
  • antialiasing
  • physical materials
  • A1 code share
  • W Feb 11
  • approximations and ground truth
  • precomputation
  • A2 introduction
  • A1 Scene Viewer due (end of day)
  • A2 Materials out
  • M Feb 16
  • procedural materials
  • material capture

Color

Wednesday, February 18th placeholder image for colorspace lecture.

Primaries, white points, and encodings oh my.

  • W Feb 18
  • color spaces
  • demo: P3 vs sRGB primaries
  • demo: HDR

Going Big

Monday, February 23rd
-Wednesday, March 4th
Megatextures visualized in id Software's 'Rage'.

Moving beyond what can fit in GPU memory.

  • M Feb 23
  • Terrains
  • LOD streaming
  • Mega-textures
  • W Feb 25
  • Nanite
  • A2 Materials due (end of day)
  • M Mar 2: Spring Break
  • W Mar 4: Spring Break

Direct Lighting

Monday, March 9th
-Wednesday, March 11th
Image from the talk 'The Light Pre-Pass Renderer: Renderer Design for Efficient Support of Multiple Lights' by Engel

The first bounce of lighting is always the brightest.

  • M Mar 9
  • sphere, spot, and sun lights
  • lambertian contribution from a spherical area light
  • the "representative point" approximation
  • A3 introduction
  • A3 Lights out
  • W Mar 11
  • light loops
  • light sorting

Shadows

Wednesday, March 11th
-Monday, March 16th
Illustration from 'Compact Precomputed Voxelized Shadows' Sintorn, et al. 2014

Solving the visibility problem.

  • W Mar 11 (cont)
  • shadow maps
  • cubic shadow maps
  • precomputed, voxelized shadows
  • M Mar 16
  • percentage-closer filtering
  • soft shadows with PCSS

Screen-Space Stuff

Wednesday, March 18th Image

A few useful post-processing effects that didn't quite fit elsewhere.

  • W Mar 18
  • SSAO
  • screen-space reflections
  • order-independent transparency

Volume Rendering

Monday, March 23rd
-Wednesday, March 25th
Cloud rendered with Guerrilla Games' Nubis3 system.

Clouds, medical data, and fire.

  • M Mar 23
  • Nubus3
  • A3 Lights due (before class)
  • F Final Project topic selection
  • W Mar 25
  • raymarching smoke and clouds
  • screen-space surfacing for liquids
  • F Final Project out

Real-time Raytracing

Monday, March 30th Image from the talk 'Real-Time rendering’s next frontier: Adopting lessons from offline ray tracing to real-time ray tracing for practical pipelines' by Pharr.

Just brute-forcing the lighting.

  • M Mar 30
  • raytracing in Vulkan
  • sample sharing

Post-processing

Wednesday, April 1st Image from the talk 'A Life of a Bokeh' by Abadie.

Fixing the pixels later.

  • W Apr 1
  • "scatter as gather"
  • motion blur (a bit)
  • bokeh

Rendering for VR

Monday, April 6th Image from the paper 'Portal Rendering and Creation Interactions in Virtual Reality' by Ablett et al.

The upsides and downsides of virtual reality.

  • M Apr 6
  • OpenXR APIs
  • lens correction
  • reprojection

Simulation

Wednesday, April 8th
-Monday, April 13th
Illustration from 'Unified particle physics for real-time applications', Macklin et al. 2014

Making things move without keyframes.

  • W Apr 8
  • Eulerian vs Lagrangian
  • shallow-wave equations
  • grid-based smoke
  • particle-based smoke
  • M Apr 13
  • particle-based fluid
  • particle-based solids
  • filament-based smoke

Skinning and Animation

Wednesday, April 15th Illustration from 'Skinning Mesh Animations', James and Twigg, 2005.

Making meshes flexible.

  • W Apr 15
  • dual-quaternion skinning
  • Skinned Mesh Animation

Miscellaneous

Monday, April 20th
-Wednesday, April 22nd
the course logo

Topics that didn't fit elsewhere (thematically or temporally) and were interesting enough to bring up.

  • M Apr 20
  • sparse voxel octrees and sparse voxel directed acyclic graphs
  • hierarchical ordered grids
  • W Apr 22
  • development of the 3DFX GPU
  • F Final Project due (end of day)