PBR Cheat Sheet
the values that keep shading physically plausible · click to copy
…measured metals
Ground rules
- Dielectric albedo stays inside 0.02 – 0.9 linear. Nothing real is pure black or pure white — coal is ~0.02, fresh snow ~0.9. Check the albedo table for real anchors.
- Metal base color = its specular color, and it's bright. Measured metals sit at roughly 55 – 100% linear brightness; a dark "metal" usually means dirt, oxide or paint — which are dielectric layers.
- Almost every dielectric reflects ~4% at F0. That's IOR 1.5. Tweaking spec intensity per material is rarely needed — tweak roughness instead.
- Metalness is binary at the pixel level. Values between 0 and 1 only belong on transition pixels (edge anti-aliasing, layered dust) — not as a look-dev dial.
- Roughness carries the story. Fingerprints, wear, smudges and dust read through roughness variation long before color changes.
- Energy is conserved — trust the model. If a material looks too dark, fix lighting or albedo, don't boost specular past physical.
- Reference is measured, not remembered. Eyes adapt; photograph a gray card / chrome ball when you can, and use measured tables when you can't.
Albedo reality check (linear)
| Surface | Typical albedo |
|---|---|
| Charcoal / coal | 0.02 – 0.04 |
| Fresh asphalt | 0.04 – 0.07 |
| Worn asphalt | 0.10 – 0.15 |
| Dark soil (wet) | 0.05 – 0.10 |
| Bare soil (dry) | 0.15 – 0.25 |
| Green grass | 0.15 – 0.25 |
| Forest canopy | 0.08 – 0.15 |
| Red brick | 0.20 – 0.35 |
| Concrete | 0.20 – 0.40 |
| Desert sand | 0.30 – 0.45 |
| Human skin (dark – light) | 0.10 – 0.45 |
| White paint | 0.70 – 0.85 |
| Fresh snow | 0.80 – 0.95 |
Texture maps & color spaces
| Map | Space |
|---|---|
| Base color / albedo | sRGB no lighting, no AO, stay in the 0.02–0.9 linear band |
| Normal | Raw / non-color green channel: OpenGL Y+ (Blender, Maya, Unity, Substance default) vs DirectX Y− (Unreal, 3ds Max) |
| Roughness | Raw / non-color grayscale; where the surface story lives |
| Metalness | Raw / non-color binary per pixel; gray only on AA/transition pixels |
| AO | Raw / non-color into the dedicated AO slot — never baked into albedo |
| Height / displacement | Raw, 16/32-bit 8-bit height = stair-stepping artifacts |
| Emission | sRGB (usually) HDR values via intensity multiplier, not the map |
| Opacity / masks | Raw / non-color grayscale data |
Dielectric F0 / IOR
| Material | IOR | F0 | F0 (8-bit) |
|---|---|---|---|
| Water | 5 | ||
| Ice | 5 | ||
| Eye cornea | 6 | ||
| Skin | 8 | ||
| Plastic (acrylic) | 10 | ||
| Glass (soda-lime) | 11 | ||
| Amber | 12 | ||
| Flint glass | 14 | ||
| Sapphire / Ruby | 20 | ||
| Cubic zirconia | 34 | ||
| Diamond | 44 |
Conversions
- F0 = ((ior − 1) / (ior + 1))²…and back: ior = (1 + √F0) / (1 − √F0)
- specular slider = F0 / 0.08the 0–1 "specular" input (Disney/UE): 0.5 ≡ F0 0.04 ≡ IOR 1.5
- glossiness = 1 − roughnessspec/gloss ↔ metal/rough workflows; invert the map, nothing else
- α = roughness²most modern shaders square the artist value (Disney remap) before GGX — if a port looks too sharp or too blurry, this is why
Roughness bands
- 0.0 – 0.05mirrorpolished metal, still water, chrome
- 0.05 – 0.2glossycar paint clearcoat, glazed ceramic, wet surfaces
- 0.2 – 0.45satinbrushed metal, semi-gloss plastic, varnished wood
- 0.45 – 0.7matteskin, rubber, raw wood, most fabrics
- 0.7 – 1.0roughconcrete, chalk, dust, unfinished stone
UDIM numbering
tile = 1001 + u + 10 × v
| u | v | tile |
|---|---|---|
| 0 | 0 | 1001 |
| 1 | 0 | 1002 |
| 9 | 0 | 1010 |
| 0 | 1 | 1011 |
| 3 | 2 | 1024 |
Common mistakes
- ✕Baking lighting or AO into base color — kills the material under any other lighting.
- ✕sRGB tag on data maps (normal/roughness/metal) — subtly wrong shading everywhere.
- ✕Wrong normal-map handedness — bumps light from the wrong side; flip green, don't resculpt.
- ✕Pure 0.0 or 1.0 roughness across a whole surface — nothing real is uniform; add variation.
- ✕Dark metal albedo — real metals are 55–100% bright; dark = it's actually a dielectric layer.
- ✕Metalness used as a mix-dial — it's a per-pixel binary, not a look-dev slider.
- ✕Specular sliders touched before roughness — 0.5 (F0 0.04) is right for almost everything.
- ✕8-bit displacement maps — visible terracing; use 16-bit minimum, 32-bit float for terrain.
Measured metal base colors (linear sRGB)
Loading…