Forward rendering shades every fragment for every light — which blows up fast. Deferred rendering solves this by splitting the work into two passes: first write geometry data into a G-buffer, then run a single full-screen lighting pass that reads from it. The result is a scene that can support many lights without the cost growing with geometry complexity.

Deferred rendering G-buffer and result

What you’ll learn:

  • Writing to multiple render targets (MRT) in a single pass
  • Structuring a G-buffer with position, normal, and albedo textures
  • Reading G-buffer textures in a full-screen lighting pass
  • How MTLRenderPassDescriptor load/store actions control memory usage

Read the tutorial →