Physically Based Rendering
Physically based rendering is the idea that if you model how light actually interacts with materials — rather than faking it with ad hoc tricks — you get images that look correct across lighting conditions without per-scene tweaking. It's not about photorealism for its own sake. The real payoff is predictability: an artist creates a material once and it looks plausible in daylight, candlelight, and overcast. Before PBR, each new lighting setup broke old materials and someone had to fix them by hand.
The Microfacet Model
At the heart of PBR is the observation that real surfaces aren't smooth at the microscopic level — they're covered in tiny mirrors (microfacets) oriented in different directions. The distribution of those orientations determines whether a surface looks rough or glossy. A perfectly smooth surface has all microfacets aligned, producing mirror-like reflections. A rough surface has randomly oriented microfacets, scattering light in many directions.1
The Cook-Torrance microfacet BRDF has three components: a normal distribution function (D) that models how microfacets are oriented, a geometry/shadowing term (G) that accounts for microfacets blocking each other, and a Fresnel term (F) that determines how much light reflects vs. transmits at each microfacet. Google's Filament documentation walks through the derivation in detail — it's one of the clearest treatments available because it's both rigorous and targeted at real-time implementation.1
The specular component uses the GGX/Trowbridge-Reitz distribution for D (industry standard since Disney adopted it around 2012), the Smith height-correlated masking function for G, and Schlick's approximation for the Fresnel term. The diffuse component can be as simple as Lambert (constant color independent of viewing angle) or as sophisticated as Disney's energy-retaining model that adds roughness-dependent edge brightening. Filament chose a Lambertian diffuse after testing — the visual improvement from fancier models was marginal on mobile, where they needed to ship.1
The Metallic/Roughness Parameterization
Raw microfacet parameters are unintuitive for artists. The industry converged on two artist-friendly parameters: metallic (0 = dielectric like plastic or stone, 1 = conductor like gold or copper) and roughness (0 = mirror-smooth, 1 = completely matte). These map to the underlying physics:
Metals reflect light at all angles with a colored specular reflection and absorb almost everything that enters the surface — so they have no diffuse term. The specular color of a metal is its visible color. Dielectrics reflect a small amount of white light specularly (about 4% at normal incidence for most non-metals) and scatter the rest as diffuse color from subsurface scattering. The metallic parameter interpolates between these two fundamentally different light transport behaviors.1
Roughness controls the spread of the specular lobe. At low roughness, reflections are sharp and you can see distinct environment features. At high roughness, the specular highlight broadens to a soft sheen. Filament's documentation notes that roughness is perceptually more linear when remapped as roughness² = alpha (the actual parameter the microfacet distribution uses), which is why most engines expose "perceptual roughness" to artists.1
Energy Conservation
A physically based material must not create light — the total reflected energy cannot exceed the incoming energy. This sounds obvious but older shading models routinely violated it. Cranking up specular intensity would add energy without removing it from the diffuse channel, making objects glow unnaturally under strong lights.
The microfacet framework handles this naturally: the Fresnel term determines the specular reflection at each angle, and the diffuse term is multiplied by (1 - F) to account for the energy that wasn't reflected. But single-scattering microfacet models still lose energy at high roughness — light that bounces between microfacets before escaping isn't accounted for. Filament implements an approximate multi-scattering correction to recover this lost energy, which matters most for rough metals that would otherwise appear too dark.1
Beyond Standard Materials
The metallic/roughness model covers most surfaces but not all. PBR engines typically add specialized material models for edge cases:
Clear coat adds a second specular lobe on top of the base material, simulating a thin transparent layer like car lacquer or wet surfaces. Filament models this as a separate isotropic GGX lobe with its own roughness, evaluated independently from the base layer.1
Cloth breaks the microfacet assumption entirely. Fabrics are made of fibers, not facets, and produce a distinctive soft sheen rather than a sharp specular highlight. Filament uses an "Ashikhmin" velvet distribution that produces forward and backward scattering characteristic of real cloth, plus a subsurface color parameter for light that transmits through thin fabric.1
Anisotropic materials have roughness that varies by direction — brushed metal, hair, carbon fiber. This requires the GGX distribution to take a tangent direction as input, producing stretched highlights aligned with the surface grain.1
Precomputed vs. Real-Time
Jonathan Blow's approach to lighting in The Witness represents the other end of the PBR spectrum: don't compute global illumination in real time at all. Precompute it by walking a camera over every lightmap texel and rendering the scene into a hemicube using the game's own real-time renderer. The precomputed lighting automatically includes ambient occlusion, soft shadows, and color bleeding because it's using the actual shading model — it "matches by default" because it is the game's rendering, just repurposed as a precomputation tool.2
This sidesteps the fundamental problem of real-time PBR: indirect lighting. The Cook-Torrance model describes how a surface responds to a single light, but a physically accurate image needs light from every direction — sky, ground bounce, neighboring surfaces. Real-time engines approximate this with image-based lighting (IBL), pre-filtering environment cubemaps at different roughness levels and storing them in mip chains. Filament's implementation uses a split-sum approximation that precomputes both the filtered environment and a BRDF integration lookup table, making IBL evaluation a few texture samples per pixel.1
The tension between precomputed and real-time approaches maps onto a deeper question about where to spend the compute budget. Precomputed lighting gives physically correct indirect illumination but can't handle dynamic objects or changing time of day. Real-time IBL handles dynamic lighting but uses aggressive approximations. Path tracing gives the correct answer but remains too expensive for most real-time applications. The industry is in an awkward middle ground where each approach works well for some subset of content, and production engines mix all three.
What PBR Actually Changed
Before PBR became standard (roughly 2012-2015, driven by Disney's principled BRDF paper and its adoption by Unreal and Unity), game materials were a mess of ad hoc parameters — "shininess," "specular power," arbitrary Phong exponents, diffuse textures hand-painted to include baked lighting. An artist making stone that looked good under one lighting setup would find it glowing under another because the specular model wasn't energy-conserving.
PBR didn't change what's possible — you could always write a physically motivated shader by hand. It changed what's default. By building energy conservation and Fresnel into the standard material model, engines made it harder to author materials that break under novel lighting. The constraint is liberating: fewer parameters that each mean something physical, rather than more parameters that interact in unpredictable ways.
The practical result is that deferred shading pipelines store PBR parameters (base color, roughness, metallic, normal) in the G-Buffer, and the lighting pass evaluates the Cook-Torrance BRDF once per pixel per light. It's not cheap — the GGX distribution involves a normalized division and the geometry term has its own approximations — but it's predictable, and predictable is worth a lot in a production pipeline.
Footnotes
Linked from
- Deferred Shading
Google's Filament engine uses frustum voxelization (froxels) to divide the view volume into small 3D cells, each with a list of affecting lights.
- Graphics And Rendering Overview
Physically Based Rendering provides the material models: microfacet BRDFs, energy conservation, the metallic/roughness parameterization that Google's Filament achieves at 60fps on mobile.