PLAYTEX Blog

PBR Texture Maps Explained: What Every File Actually Controls

A map-by-map reference for base color, normal, roughness, metallic, AO, height, opacity, and emission, including color-space and packing pitfalls.

PBR mapsbase colornormal mapsroughness
A single material separated into base color, normal, roughness, metallic, AO, height, and emission maps

Key Takeaways

  • Base color stores surface color; normal stores direction; roughness stores reflection spread; metallic classifies metal versus dielectric regions.
  • Color images and numeric map data require different color-space treatment.
  • AO is a restrained local-occlusion aid, not a replacement for scene shadows.
  • Map names are not enough: the shader contract must define channel packing and inversions.

Who Informed This

A renderer-aware reference designed to help artists identify and debug map meaning before import.

How It Was Evaluated

Each map is viewed independently, assigned through an explicit shader contract, and checked under changing light and exposure.

Proof And Evidence

PLAYTEX map names follow common PBR concepts, while the target shader determines the final interpretation.

Limits And Caveats

PBR implementations differ. Specular-glossiness, metallic-roughness, clear coat, transmission, anisotropy, and custom shaders may require additional maps or different packing.

A PBR material is a small agreement between images and a shader. The base-color file cannot decide to become roughness halfway through import, and a packed texture is meaningless until someone states which channel holds what.

This reference uses the common metallic-roughness workflow. Other workflows exist, so treat the target shader as the contract.

The map reference

MapWhat it controlsTypical treatmentCommon mistake
Base color / albedoSurface color or reflectance tintsRGB colorBaked shadows and highlights
NormalPer-pixel surface directionLinear data; normal compressionWrong green-channel orientation
RoughnessSpread of reflected lightLinear grayscale dataUsing brightness as roughness
MetallicMetal versus dielectric classificationLinear mask, mostly 0 or 1Gray noise on ordinary materials
Ambient occlusionSmall-scale indirect-light reductionLinear grayscale dataPainting heavy permanent shadows
Height / displacementRelative surface elevationLinear data, sometimes higher bit depthAssuming every dark pixel is low
OpacityVisibility or cutout coverageLinear mask or alpha channelConfusing blend and cutout behavior
EmissionSelf-lit color or maskColor or mask plus intensityBaking the surrounding glow into base color

Base color is not a photograph

Base color records the material's visible color without scene lighting baked into it. Roblox's PBR documentation draws a useful distinction: diffuse images often include shading that is better produced by normal, roughness, and metalness behavior. Unreal similarly defines Base Color as the material's overall color and provides measured reference ranges for several materials.

Remove cast shadows and specular highlights from a photo-derived base color. Keep real pigment, stains, paint, and the characteristic tint of a metal.

Normal maps bend light, not geometry

A tangent-space normal map stores XYZ directions in RGB. It creates the lighting response of scratches, pores, grooves, and small bevels without changing the silhouette. A flat tangent-space value is near RGB 128,128,255.

Normal data should not receive ordinary color correction. Mark it as a normal map or Non-Color data in the destination tool. If raised details become dents, check the green-channel convention before rebuilding the map.

Roughness controls reflection shape

Low roughness produces a tight, clear reflection. High roughness spreads the reflection into a broad, soft response. Roughness does not simply mean dark, old, or dirty. A black rubber surface can be rough; a white ceramic tile can be smooth.

Some shaders ask for smoothness or gloss instead. Those are inverse concepts. Confirm whether the engine expects roughness directly, smoothness, or a value packed into another map's alpha channel.

Metallic is a material class

In a metallic-roughness workflow, clean metal regions are near 1 and dielectric regions such as wood, stone, plastic, paint, and dirt are near 0. Intermediate values can describe mixed pixels at transitions, thin grime, or antialiasing, but broad mid-gray noise often creates implausible response.

Painted metal usually has non-metal paint over metal. Let scratches reveal the metal rather than making the whole painted area half-metal.

AO should whisper

Ambient occlusion can reduce indirect light in small creases. It should not become a second set of dramatic shadows. Heavy AO locks one lighting assumption into the material and can make corners look dirty even in bright indirect light.

Some engines apply AO through a dedicated input; others pack it with roughness and metallic. If the shader already calculates strong real-time occlusion, compare the material with the texture AO reduced.

Height can mean several rendering costs

A height map is scalar elevation. It can feed a normal conversion, parallax technique, tessellation/displacement path, or offline geometry operation. Each use has a different performance and quality profile. Simply exporting a height file does not make the engine move vertices.

Use higher bit depth when smooth displacement gradients reveal banding. For shallow real-time detail, a normal map may be cheaper and more stable.

Color space is part of the data

Base color and colored emission are usually authored as display color and sampled with the expected color conversion. Normal, roughness, metallic, AO, height, and masks are numeric data. Blender's color-management guide explicitly says normal and displacement images should be marked Non-Color so no color-space conversion changes their values.

Packed maps need labels

glTF packs occlusion separately but defines roughness in the green channel and metallic in blue for its metallic-roughness texture. Unreal projects often use an ORM pattern: occlusion in red, roughness in green, metallic in blue. Unity shaders may pack smoothness into alpha. These are conventions, not universal laws.

Write the layout into the preset name and documentation. A file named wall_masks.png is a future bug. A file named wall_orm.png plus a documented ORM contract is a usable asset.

When a material looks wrong, inspect one map at a time and ask what the shader thinks that value means. PBR debugging becomes much less mystical once every file has only one honest job.

Sources

About the author

PLAYTEX Editorial Team

Technical documentation focused on texture authoring, material validation, and engine handoff.

Read the PLAYTEX editorial policy