
The G-Buffer
Deferred shading: geometry and material baked into a four-target G-buffer so one Cook–Torrance BRDF evaluation runs per visible pixel, additive per light no matter how many.
A deferred OpenGL renderer, and the approximations that hold it at 60 frames per second.
The path tracer gets there by brute force: shoot enough rays, average enough samples, and the estimate converges. At sixty frames per second that budget is gone. Every chapter here replaces an integral the path tracer evaluated directly with something cheaper that still holds up under a moving camera.
Each approximation has a place where it visibly fails: variance shadow maps bleed light through layered occluders, moment shadow maps drop thin contact shadows, and screen-space occlusion can only use what is already in the depth buffer. Each of those is named in the chapter that introduces it.

Deferred shading: geometry and material baked into a four-target G-buffer so one Cook–Torrance BRDF evaluation runs per visible pixel, additive per light no matter how many.

Shadow mapping by rendering depth from the light's view, then four progressively softer ways to read it back: biased binary, PCF, variance, and moment shadow maps, blurred in compute.

Image-based lighting in real time: the HDR sky pre-filtered to nine spherical-harmonic coefficients for diffuse, importance-sampled with GGX and Hammersley for specular, then tone-mapped back to display range.

Alchemy screen-space ambient occlusion: spiral-sampling each pixel's G-buffer neighborhood for the obscurance IBL flattens out, then a depth- and normal-aware bilateral blur before it multiplies the ambient term.

Screen-space directional occlusion: sampling the 3D hemisphere so occlusion keeps its direction and color, then re-using the blocked samples as secondary emitters for one bounce of indirect light.