Also known as 15-472/672/772.
Tuesdays and Thursdays from 14:00-15:20 in Posner Hall 151 during Spring 2024.
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.
Principles
This course is based on four principles:
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 an 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: