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.
Do Things for Reasons -- if you don't understand why you are doing something, look deeper. (Corr: if you don't understand why someone else is doing something, ask.)
No Magic -- (as much as possible) avoid black boxes and needless helper libraries.
Test and Improve -- make things efficient through real-world testing. (Corr: asymptotic complexity is not the only factor; constants matter in the real world.)
Go Big -- push systems to their limits.
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:
GOOD: re-writing a documentation example in your own coding style (including a comment + URL citing your source).
BAD: copy-pasting a stackoverflow answer or code snippet from the documentation, then re-working it in place. (You must type the code you use.)
GOOD: working with a classmate to develop a design, then writing the code separately (and including a comment crediting the discussion in your code).
GOOD: helping a classmate to debug their code, being inspired by their approach, and -- with your classmate's permission and a citation comment -- using a similar idea in your code.
BAD: using copilot. (You aren't typing and you aren't thinking.)
BAD: ChatGPT and similar. (Just bad in general. A copyright [or at least plagiarism] laundry.)
GOOD: copy-pasting code you already wrote for this class.
DISCOURAGED (but not forbidden): using autocomplete / codesense.
Resources
This course does not have a textbook; but you will likely find the following web resources helpful: