← Module 5/PBR rendering
RU
Module 5 · The HD era and indie (2005–2012)

PBR — physically based rendering

The quiet revolution of the era, invisible in a screenshot: materials stopped being "tweaked by eye for one particular light" and became physically meaningful — the same metal/leather/plastic looks right under any lighting. Behind it are the microfacet model, Fresnel and the conservation of energy.
~18 min🏠 lab🔬 graphics + math
The gist in 30 seconds
Before PBR an artist hand-tuned diffuse/specular/ambient for one specific scene; move the object into a different light and it looks wrong, and different artists' work would not match. The PBR insight (formalized at Disney, SIGGRAPH 2012, Brent Burley): the material's parameters should be physically meaningful — albedo (base color), roughness (0 mirror → 1 matte), metallic (0 dielectric → 1 metal) — and then one material is correct under HDR, GI or ray tracing with no retuning. Under the hood: a surface is millions of micro-mirrors (microfacets) whose spread is roughness; Fresnel makes everything mirror-like at a grazing angle; energy is conserved (reflected ≤ received). The consequence is that materials became portable libraries (Megascans, Substance), and a small studio got AAA visuals out of the box. UE4 brought PBR in 2014, Unity in 2015, and by 2017 it was the standard everywhere.

The mechanism: why "physically meaningful" parameters changed everything

The problem before PBR. A material was described with ad hoc numbers: a diffuse color, specular strength, an ambient term — all fitted by eye to the light of one particular level. Three troubles: (1) move the object into different lighting and the highlight and brightness drift; (2) materials from different artists did not match (everyone tuned their own way); (3) nothing could be reused as a library. Essentially it was "store the source, not the model" in reverse: a pile of disconnected tweaked values instead of one physical description.

The insight. Describe the material by what does not depend on the scene — its physics. Then the renderer works out how it looks under any light. The standard set (the metallic-roughness workflow):

Microfacets — where roughness comes from

Up close, a rough surface is a myriad of tiny perfect mirrors (microfacets) tilted at random. Roughness is the spread of their orientations. A smooth surface: every micro-mirror faces almost the same way → the reflected light leaves in a narrow beam → a sharp highlight. A rough one: the tilts are scattered → the light spreads into a wide cone → the highlight blurs and dims. There is no "painted" highlight — it is derived from the statistics of the micro-relief.

Fresnel — why everything is a mirror at a grazing angle

The reflected fraction grows toward grazing angles: look straight down into water and you see the bottom (~2–4% is reflected); look along the surface toward the horizon and it is a mirror (~100% reflected). That is the Fresnel effect, and in real time it is taken as Schlick's approximation:

F(θ)= F0+ (1−F0) (1−cosθ)5

where F0 is the head-on reflectance (normal incidence) and θ is the angle between the view and the normal. This is where metallic hides: for dielectrics F0 ≈ 0.04 (a colorless 4%) plus a diffuse albedo; for metals F0 is their colored albedo (gold ≈ {1.0, 0.76, 0.34}) and there is no diffuse. So "metallic" switches where the albedo goes: into the diffuse (a dielectric) or into the color of the highlight (a metal).

Conservation of energy — why PBR does not "glow"

A surface cannot reflect more light than it received. Old materials violated that (diffuse plus specular could exceed 100%) — hence the "plasticine" or "glowing" look. PBR divides the budget: the more goes into specular reflection (per Fresnel), the less is left for the diffuse, and the sum is ≤ 1. That is what makes the image "real" under any light, not just the one it was tuned for.

A worked example — the Fresnel of water

A dielectric, F0 = 0.04. Head-on (cos θ = 1): F = 0.04 + 0.96·(1−1)⁵ = 0.04 — 4% is reflected, you see through it. At a grazing angle (cos θ → 0): F = 0.04 + 0.96·1⁵ = 1.0 — 100% is reflected, a pure mirror. One parameter, zero hand-tuning — and water behaves correctly both in the puddle at your feet and at the horizon. The same law draws the "rim" (a glowing outline) on any object: at the edge of a silhouette the angle is grazing → Fresnel → the edge lights up.

🕹 Games to play — and what to notice

PBR is tricky because it is invisible: it is not an effect but consistency. So what you need to notice is subtle: whether metal/plastic/leather read correctly in one scene, and how everything turns mirror-like at a grazing angle. From a PBR showcase to a contrast with pre-PBR.

The Order: 1886 2015 · an early PBR showcase

Ready at Dawn made a game that demonstrates materials: brass, blued steel, lacquer, cloth, leather — every material physically distinct and correct under cinematic light. One of the first AAA projects with end-to-end PBR.

🎮 Play: look closely at the metal parts of a weapon and then at the cloth and leather — notice that the metal's highlight is colored and narrow while leather's is wide and dull, and that this is not painted on but works identically as the lighting changes through the scene.

Horizon Zero Dawn / Forbidden West Decima · metal robots vs organics

A perfect test bench: machines of polished and rough metal next to grass, leather, cloth and Aloy's skin. The same robot chassis material reads correctly at noon, in a dust storm and at night by a fire — that is PBR's "scaling across lighting".

🎮 Play: turn the camera so the sun grazes along a wet or metal surface — you will see the highlight flare up at the grazing angle (Fresnel), while head-on the surface is duller. Compare a metal robot with cloth: different highlight widths = different roughness.

Star Wars Battlefront 2015 · Frostbite · photogrammetry + PBR

DICE scanned real surfaces (photogrammetry) and brought them in as PBR materials — which is why stone, metal and snow look "real" under any light. A showcase of how PBR plus scans give photorealism with no hand-tuning.

🎮 Play: find a contrast with a pre-PBR game (Half-Life 2, 2004): there the highlights are painted in, and under different lighting the metal looks like painted plastic. Switch to anything after ~2016 — the "honesty" of the material under moving light is striking.

Deep end · theory: the full Cook–Torrance microfacet BRDFskippable

The specular part of PBR is the microfacet Cook–Torrance BRDF: how much light arrives from direction l and leaves toward v. Three factors divided by a normalization:

fspec= D·F·G 4(n·l)(n·v)
  • D — the normal distribution function (NDF). What fraction of microfacets face exactly along the half vector h (between l and v) — that is, reflect light straight into your eye. That is the shape of the highlight, and roughness drives it. The industry standard is GGX / Trowbridge–Reitz (its long tails are more realistic than old Blinn–Phong):
D= α2 π((n·h)2(α2−1)+1)2

where α=roughness2 (squaring makes the slider perceptually linear). As α→0 the function degenerates to a spike at n=h — a sharp highlight.

  • F — Fresnel (Schlick, see above) — what fraction is actually reflected at the current angle; for metals a colored F0.
  • G — geometry (shadowing/masking). At grazing angles microfacets occlude one another — G damps the re-reflection, otherwise you get an unphysical blowout along edges. It depends on roughness and the angles (the Smith approximation).

The diffuse part is plain Lambert fdiff=albedo/π, multiplied by (1−metallic) (a metal has no diffuse) and by whatever energy is left after the specular budget. The result: the same code computes both a mirror and dust — only α, F0 and metallic change.

Deep end · engineering: the texture workflow, the channels and where this is computedskippable

In practice the parameters are textures, one per channel, and the artist paints them in Substance Painter or takes them from ready-made scans (Megascans):

  • Base Color (albedo) — RGB, with no shadows or highlights (the renderer will add those).
  • Roughness — a single channel (grayscale): scratches, wear and wet patches = locally different roughness.
  • Metallic — a single channel, usually almost binary (a mask of "where the metal is").
  • Normal map — fine relief without geometry (see "an index instead of data": the detail lives in the texture, not in polygons).
  • + AO, height, and sometimes a switch to the specular-glossiness workflow (an alternative to metallic-roughness).

All of this is computed in a shader per pixel, usually in a deferred pipeline: first the geometry writes albedo/normal/roughness/metallic into G-buffers, then lighting is computed per pixel from them — the cost grows with the number of lights, not the number of objects. It is exactly this combination (PBR materials + deferred + HDR + tone mapping) that produced "the modern look". The business consequence: materials became portable libraries — Quixel Megascans, Adobe Substance — and a three-person studio takes AAA materials off the shelf, because PBR makes them composable.

Analogy
A pre-PBR material is a photograph of an object under one light: move the lamp and the fakery shows (the shadows and highlights are baked in wrong). A PBR material is a recipe for a substance: "roughness 0.3, metal, base color brass". A recipe does not depend on the kitchen — the light (the cook) will prepare it correctly under any lamp. And microfacets are frosted vs polished glass: the same glass, but the rough one scatters the reflection into a murky blob while the smooth one gives a crisp mirror; "roughness" is exactly how finely the surface is scratched.
Why it matters
PBR is a model case of how replacing ad hoc parameters with a physical model fixes portability, composability and scaling all at once. Artists stopped tuning for a scene, materials became libraries, indies got AAA visuals off the shelf. For an engineer the value is not even in the graphics: it is a clean case of "the right parameterization matters more than the number of knobs" — pick axes that match reality and everything downstream (transfer between conditions, reuse, generalization) becomes free.
🔁 Beyond games — where this transfers
The lesson is a physically grounded parameterization instead of fitting by eye: pick axes that are invariant to conditions and you get transfer and reuse for free.

ML / AI (your domain): a BRDF is an analytic, differentiable prior, and that is a direct bridge into modern rendering ML. Differentiable rendering and NeRF / 3D Gaussian Splatting put a physical reflection model (often the same microfacet BRDF) inside the training loop and optimize materials/lighting by gradient — "inverse rendering". This is the argument of a physics-based prior vs a fully learned function: a baked-in BRDF = less data and guaranteed generalization to new lighting (exactly the way PBR transfers between scenes), as with physics-informed networks (PINNs). And "physically meaningful axes instead of a pile of knobs" = good feature/latent design: a disentangled representation (albedo / lighting / geometry kept separate) generalizes, entangled parameters do not. The BRDF's energy conservation ⇄ normalizations and constraints that keep the output in a valid range.

Graphics / simulation: one physical material model transfers between rasterization, ray tracing and path tracing with no re-authoring — one asset, any renderer.

Engineering in general: parameterize a system by invariants (physical units, dimensionless numbers) rather than by numbers that are convenient right now — then the config transfers between environments; "hardcoded for prod" = a pre-PBR material that breaks when conditions change.

The principle: the right axes matter more than the number of knobs. A parameterization that matches reality makes transfer, composition and generalization free; fitting to current conditions does not.

🏠 Lab — play with a PBR sphere
An interactive lab with no code: a lit sphere computed with a microfacet BRDF right in the browser. Drag the roughness and metallic sliders, change the light's color and angle — and watch the sharp highlight spread into a dull blob, watch metal kill the diffuse and tint the highlight, and watch Fresnel flare along the rim. Open the lab →

Best moment: set roughness to 0 and sweep metallic 0→1 — you will see a dielectric (a diffuse ball with a white highlight) turn into polished colored metal with no diffuse. Then drag roughness 0→1 — the sharp highlight smears out into a matte surface.

🔧 Run it and poke at it — on your home machine
What to play is above (🕹). This part is about touching PBR materials in an editor.
🔧 Poke at it (debug) ~40 min, Substance / Blender / an engine
In any PBR editor (Blender with the Principled BSDF, or a material in Godot/Unity/Unreal) make a sphere and sweep roughness and metallic live under a single HDRI light. Set metallic=1, roughness=0 → a mirror; roughness=1 → matte metal. Then WITHOUT touching the material, swap the HDRI (a different environment) — notice the material stays plausible with no retuning. That is "scaling across lighting".
🧪 Test it (with artist eyes) ~15 min
Open a free Megascans/ambientCG material and take it apart channel by channel: where the albedo is, where the roughness mask is (wear, wetness), where the normal is. Then "break energy conservation": crank both the albedo and the highlight — you will get "glowing plasticine". That is what PBR forbids by construction.
Checklist: saw how roughness/metallic change the highlight; confirmed the material holds up when the HDRI changes; took a real material apart by channels; reproduced the "unphysical" look by breaking energy conservation.
Connections
foundation
Engines — UE4 (2014) and Unity (2015) made PBR the out-of-the-box standard; the engine is what decides which materials you author at all.
foundation
Hardware constraints — normal maps and PBR texture channels are "an index instead of data": the detail lives in the texture, not in the geometry.
adjacent
The 3D pipeline — PBR shading lives at the end of the pipeline (on pixels after rasterization), usually in a deferred pass over G-buffers.
Questions worth asking
If PBR is "physically correct", why is it still an approximation (Schlick, GGX) rather than real optics?
Because the goal is plausibility in real time on a budget of milliseconds, not a simulation of Maxwell's equations. Schlick is a cheap approximation of the Fresnel equations (the error is invisible to the eye), GGX is a convenient microfacet distribution with good tails. "Physically based" means "respects the laws (energy conservation, Fresnel, microfacets) and is parameterized by real-world quantities", not "solves the radiative transfer equation exactly". It is an engineering compromise of "enough physics that it transfers", the way fixed-point was "enough precision, cheaply".
Why is metallic almost binary? Aren't there "semi-metals"?
Optically a substance is either a conductor (metal: free electrons → no diffuse transmission, a colored specular F0) or a dielectric (an insulator: a diffuse term, a colorless ~4% highlight). There is essentially nothing in between in nature — a "semi-metallic" look (painted metal, rust, dust on steel) is a mixture at the texture level: some texels are metal, others dielectric, rather than a material with metallic=0.5. So the metallic channel is in effect a mask, not a smooth dial.
Why is roughness squared (α = roughness²)?
For a perceptually linear slider. The visual change in the highlight is nonlinear in the "real" roughness parameter α: at small values a tiny shift changes the image a lot, at large values it barely does. Squaring stretches the sensitive region so that moving the roughness slider feels even across its whole range. Pure UX on top of physics — like gamma correction for brightness.
Why did pre-PBR metal look like "painted plastic" under different lighting?
Because the highlight was baked for one particular lamp rather than derived from the material. The artist set a specular color and strength so it looked right in that scene; the physics (Fresnel at grazing angles, a metal's colored mirror, energy conservation) was not respected. Move the object into different lighting and the highlight is in the wrong place at the wrong strength, the diffuse is not damped in favor of the specular, and your brain reads "not metal". PBR removes the hand-baking: the highlight always follows from albedo/roughness/metallic and the current light.
PBR promises "one material under any light" — where does it still lie?
In everything the direct BRDF does not cover: indirect light (you need IBL / GI / ray tracing — otherwise metal in shadow is "dead"), subsurface scattering (skin, wax, marble — light goes inside, a separate SSS model), multiple bounces between microfacets (energy is lost on rough metal — cured with multiscatter compensation), thin-film interference (a soap bubble, gasoline). PBR is honest for "ordinary" surfaces; the exotic cases need extensions. Knowing the model's boundary matters more than believing in its universality.
Further reading