PBR Cheat Sheet

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)

SurfaceTypical albedo
Charcoal / coal0.02 – 0.04
Fresh asphalt0.04 – 0.07
Worn asphalt0.10 – 0.15
Dark soil (wet)0.05 – 0.10
Bare soil (dry)0.15 – 0.25
Green grass0.15 – 0.25
Forest canopy0.08 – 0.15
Red brick0.20 – 0.35
Concrete0.20 – 0.40
Desert sand0.30 – 0.45
Human skin (dark – light)0.10 – 0.45
White paint0.70 – 0.85
Fresh snow0.80 – 0.95
Diffuse reflectance of the surface itself, lighting excluded. If your grass texture averages 0.5 it will glow in any correct renderer.

Texture maps & color spaces

MapSpace
Base color / albedosRGB

no lighting, no AO, stay in the 0.02–0.9 linear band

NormalRaw / non-color

green channel: OpenGL Y+ (Blender, Maya, Unity, Substance default) vs DirectX Y− (Unreal, 3ds Max)

RoughnessRaw / non-color

grayscale; where the surface story lives

MetalnessRaw / non-color

binary per pixel; gray only on AA/transition pixels

AORaw / non-color

into the dedicated AO slot — never baked into albedo

Height / displacementRaw, 16/32-bit

8-bit height = stair-stepping artifacts

EmissionsRGB (usually)

HDR values via intensity multiplier, not the map

Opacity / masksRaw / non-color

grayscale data

Dielectric F0 / IOR

MaterialIORF0F0 (8-bit)
Water5
Ice5
Eye cornea6
Skin8
Plastic (acrylic)10
Glass (soda-lime)11
Amber12
Flint glass14
Sapphire / Ruby20
Cubic zirconia34
Diamond44
F0 = reflectance at normal incidence. The Fresnel-curve calculator plots the full angle falloff.

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
GGX perceptual bands — squared-roughness ("roughness²") inputs shift these lower.

UDIM numbering

tile = 1001 + u + 10 × v

uvtile
001001
101002
901010
011011
321024
u and v are 0-based tile offsets; a row holds 10 tiles (u 0–9), then v steps up. Filename token: texture.<UDIM>.exr.

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…
metal data: physicallybased.info · snapshot — · F0 computed as ((n−1)/(n+1))²