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. With TA help from Trey DuBose. Office hours Tuesdays and Thursdays, 11am-Noon in the graphics common area on the second floor of Smith Hall 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 Friday -- nakluV Step 1

Vulkan's view of GPUs

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

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

  • W Jan 14
  • Briefly Noted: Command Buffers, Render Passes, Coordinate Systems, Memory Types, Push Constants, Vertex Buffers, Uniform Buffers, Storage Buffers, Descriptors, Transform Matrices
  • A0b For next Wednesday -- nakluV Step 2
  • M Jan 19: MLK Day
  • W Jan 21
  • Bottlenecks
  • Step 1, 2 wrap-up
  • A0b For next Monday -- nakluV Step 3, 3a
  • M Jan 26
  • Swapchains and synchronization
  • Headless mode
  • Just initialization things
  • Build systems?
  • RAII + Vulkan
  • Benchmarking
  • A0c For Next Monday -- nakluV Step 4, 5, 6, 6a

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
  • S72 intro
  • W Jan 28
  • Data inflation: subdivision surfaces
  • Sub-polygon detail: textures, normals, displacements
  • Mesh compression?
  • Texture compression
  • M Feb 2
  • Vulkan Tutorial Wrap-Up
  • A1 statement walkthrough
  • least squares vertex baking(?)
  • Creating (and finding) Bottlenecks
  • Export scripts
  • A1 Scene Viewer out

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
  • 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
  • A1 Scene Viewer check-in due (1hr before class)
  • M Feb 16
  • procedural materials
  • material capture
  • A2 introduction
  • A1 Scene Viewer due (1hr before class)
  • A2 Materials out

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
  • A2 Materials check-in due (1hr before class)
  • W Feb 25
  • Nanite
  • U Mar 1
  • 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

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)