Real-Time Light

One buffer at a time — every shortcut the rendering equation lets you take at 60 frames per second.

FIVE CHAPTERS LATER  ·  DEFERRED PBR + IBL + MSM + SSAO + SSDO  ·  60 FPS

The path tracer was about correctness through brute force: shoot enough rays, average enough samples, the right answer falls out eventually. The deferred renderer is its inverse: cheat the rendering equation in clever ways so the right answer falls out at sixty frames per second.

The G-buffer comes first: every fragment writes its position, normal, albedo, and material into screen-space textures so lighting can be computed once per pixel, not once per pixel per light. Shadows arrive as a depth test from the light's point of view, then progressively softened — binary, percentage-closer-filtered, variance-, and finally moment-based — until the penumbras look right. Image-based lighting replaces the analytic light with an HDR environment, pre-filtered offline so a glossy surface can sample roughness-correct reflections at one texture lookup per pixel. Ambient occlusion is added back where the geometry never was: the small darknesses inside corners that direct lighting can't reach. And finally a single indirect bounce, also in screen space, lets one surface tint another by reflected light without ever leaving the current frame's depth buffer.

Every chapter is a different approximation of the same integral the path tracer evaluated honestly. The art of the real-time renderer is knowing which approximations the eye will accept, and where they break.

CHAPTERS

  1. 01

    The G-Buffer

    — Deferred Shading

    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.

    G-BufferCook-Torrance BRDFMulti-light PBROpenGL
  2. 02

    From the Light's Point of View

    — Shadow Mapping

    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.

    Shadow MappingPCFVariance Shadow MapsMoment Shadow Maps
  3. 03

    Light, Pre-Filtered

    — PBS + IBL

    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.

    Spherical HarmonicsGGX Importance SamplingHammersley SequenceHDR Tone Mapping
  4. 04

    Where Corners Stay Dark

    — Screen-Space Ambient Occlusion

    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.

    Alchemy SSAOBilateral FilterSpiral SamplingEdge-Aware Blur
  5. 05

    Light Bounces Once

    — Screen-Space Directional Occlusion

    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.

    SSDOOne-Bounce GIHemisphere SamplingScreen-Space Visibility