Real-Time Computer Graphics

Also known as 15-472/672/772. Mondays, Wednesdays, and Fridays from 10:00-10:50 in Porter Hall A18C Posner Hall 146 during Fall 2024. Taught by Jim McCann. Office hours after class in Smith 229 or by appointment. With TA help from Ajax Shung. Office hours Mondays and Fridays, 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: Spring'24

Principles

This course is based on four principles:

Work

(Note: subject to revision based on class timing.)

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, August 26th Real-Time Graphics Course Logo

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

  • M Aug 26
  • Course Overview; Core Principles
  • Interactive, Real-Time, and Beyond
  • Vulkan Intro
  • Building the tutorial code
  • Javascript, maybe
  • A0a For next class -- Vulkan Tutorial Pt1

Vulkan's view of GPUs

Wednesday, August 28th
-Friday, September 13th
Vulkan Icon, from 'https://www.vulkan.org/'

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

  • W Aug 28
  • Command Buffers
  • Render Passes
  • Background Shader
  • Push Constants
  • Pipeline Creation
  • A0a For next class -- Vulkan Tutorial Pt2
  • F Aug 30
  • Lines Shader
  • Memory Types
  • Memory Transfers
  • Vertex Buffers
  • A0a For next class -- Finish Vulkan Tutorial
  • M Sep 2: No Class / Labor Day
  • W Sep 4
  • Transform Matrices
  • Descriptors
  • Uniform Buffers
  • F Sep 6
  • Objects Shader
  • Storage Buffers
  • M Sep 9
  • Swapchains and synchronization
  • Headless mode
  • Just initialization things
  • W Sep 11
  • Vulkan Tutorial Wrap-Up
  • Build systems
  • F Sep 13
  • S72 intro
  • Tutorial improvements
  • Benchmarking

Data Wrangling

Monday, September 16th
-Friday, September 20th
Image from the paper 'Bisection Based Triangulation of Catmull Clark Subdivision' by Dupuy and Deloit.

Getting data into our renderer.

  • M Sep 16
  • Scene graphs
  • Instancing
  • A1 statement walkthrough
  • A1 Scene Viewer out
  • W Sep 18
  • Data inflation: subdivision surfaces
  • Sub-polygon detail: textures, normals, displacements
  • Mesh compression?
  • Texture compression
  • F Sep 20
  • least squares vertex baking(?)
  • Creating (and finding) Bottlenecks
  • Export scripts

Culling and Occlusion

Monday, September 23rd
-Friday, September 27th
Image from the talk 'GPU-Driven Rendering Pipelines' by Haar.

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

  • M Sep 23
  • RAII + Vulkan
  • (Jim Travelling)
  • W Sep 25
  • Bottlenecks
  • Frustum culling
  • Portal rendering
  • Occlusion queries
  • Geometry images
  • F Sep 27
  • A2 introduction

Materials

Monday, September 30th
-Friday, October 4th
Illustration from SIGGRAPH Real-Time Rendering course about UE5's 'substrate' materials system

Matching the real world, or doing better.

  • M Sep 30
  • A1 code share
  • detail with textures
  • antialiasing
  • W Oct 2
  • physical materials
  • approximations and ground truth
  • precomputation
  • F Oct 4
  • procedural materials
  • material capture
  • A1 Scene Viewer due (end of day)
  • A2 Materials out

Color

Monday, October 7th placeholder image for colorspace lecture.

Primaries, white points, and encodings oh my.

  • M Oct 7
  • color spaces
  • demo: P3 vs sRGB primaries
  • demo: HDR

Going Big

Wednesday, October 9th
-Friday, October 18th
Megatextures visualized in id Software's 'Rage'.

Moving beyond what can fit in GPU memory.

  • W Oct 9
  • Terrains
  • LOD streaming
  • F Oct 11
  • Mega-textures
  • M Oct 14: Fall Break
  • W Oct 16: Fall Break
  • F Oct 18: Fall Break

Direct Lighting

Sunday, October 20th
-Wednesday, October 23rd
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.

  • U Oct 20
  • A2 Materials due (end of day)
  • M Oct 21
  • sphere, spot, and sun lights
  • lambertian contribution from a spherical area light
  • the "representative point" approximation
  • A3 introduction
  • A3 Lights out
  • W Oct 23
  • light loops
  • light sorting

Shadows

Friday, October 25th
-Monday, October 28th
Illustration from 'Compact Precomputed Voxelized Shadows' Sintorn, et al. 2014

Solving the visibility problem.

  • F Oct 25
  • shadow maps
  • cubic shadow maps
  • M Oct 28
  • percentage-closer filtering
  • soft shadows with PCSS

Real-time Raytracing

Wednesday, October 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.

  • W Oct 30
  • raytracing in Vulkan
  • sample sharing

Rendering for VR

Friday, November 1st Image from the paper 'Portal Rendering and Creation Interactions in Virtual Reality' by Ablett et al.

The upsides and downsides of virtual reality.

  • F Nov 1
  • OpenXR APIs
  • lens correction
  • reprojection
  • A3 Lights due (end of day)
  • F Final Project topic selection

Post-processing

Monday, November 4th
-Wednesday, November 6th
Image from the talk 'A Life of a Bokeh' by Abadie.

Fixing the pixels later.

  • M Nov 4
  • bokeh
  • lens flares
  • motion blur
  • F Final Project out
  • W Nov 6
  • SSAO
  • screen-space reflections

Volume Rendering

Friday, November 8th
-Wednesday, November 13th
Cloud rendered with Guerrilla Games' Nubis3 system.

Clouds, medical data, and fire.

  • F Nov 8
  • Nubus3
  • M Nov 11
  • Nubus3 (continued)
  • raymarching smoke and clouds
  • screen-space surfacing for liquids
  • W Nov 13: No Class: Jim at FMitF PI Meeting

Simulation

Friday, November 15th
-Monday, November 18th
Illustration from 'Unified particle physics for real-time applications', Macklin et al. 2014

Making things move without keyframes.

  • F Nov 15
  • Eulerian vs Lagrangian
  • shallow-wave equations
  • grid-based smoke
  • M Nov 18
  • particle-based smoke
  • particle-based fluid
  • particle-based solids

Skinning and Animation

Wednesday, November 20th Illustration from 'Skinning Mesh Animations', James and Twigg, 2005.

Making meshes flexible.

  • W Nov 20
  • dual-quaternion skinning
  • Skinned Mesh Animation

Miscellaneous

Friday, November 22nd
-Friday, December 6th
the course logo

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

  • F Nov 22
  • sparse voxel octrees and sparse voxel directed acyclic graphs
  • hierarchical ordered grids
  • M Nov 25
  • W Nov 27: Thanksgiving Break
  • F Nov 29: Thanksgiving Break
  • M Dec 2
  • Jim travelling
  • W Dec 4
  • Jim travelling
  • F Dec 6
  • Jim travelling
  • F Final Project due (end of day)