AmonFlux
MEDIA & 3D TOOLKIT

PBR Maps from a Single Photo: What Can Be Derived and What Cannot

By Marco Caturano 10 min readPublished September 27, 2026

Every tool that turns a photograph into a set of PBR maps is making the same trade. A pixel in a photo is the result of three things at once: what colour the surface is, how it was lit, and which way it faces. A full material needs those separated, and a single image gives you one equation for three unknowns. Some of the maps that come out are good estimates; some are educated guesses; and some cannot be estimated at all and are really masks you paint with sliders. The difference matters, because it tells you where to spend your time.

What a photograph actually contains

A camera records how much light reached each pixel. That amount depends on the surface colour, on the direction and softness of the light, on the angle between the surface and the light, and on how shiny the surface is. None of these is stored separately. A dark pixel could be a dark material, a shadow, or a crevice facing away from the light, and nothing in that one number says which.

Single-image tools resolve the ambiguity with assumptions. The usual ones are that brightness changes slowly with lighting and quickly with surface detail, that raised areas tend to be lit and recessed ones shadowed, and that the surface is mostly flat on average. Where those assumptions hold, the results are convincing. Where they fail — a dark stain on a light floor, a flat printed pattern, a polished surface reflecting its surroundings — the maps inherit the mistake.

Map by map: how far each one can be trusted

MapDerived fromReliability
AlbedoThe photo with slow lighting gradients removedGood, if the light was even
HeightBrightness split into bands of detailGood for relief, fooled by stains and prints
NormalThe slope of the height mapAs good as the height map
CavityHeight compared with its local averageAs good as the height map
Ambient occlusionHow far points sit below their surroundingsPlausible; misses shadows between separate objects
RoughnessLocal detail in the albedo around a base valueAn educated guess
SpecularUsually a constant 4% reflectanceCorrect for almost every non-metal
MetallicNothing in the photoA mask you paint
SubsurfaceNothing in the photoA mask you paint
TranslucencyNothing in the photoA mask you paint
Reliability assumes a well-shot source photo in diffuse light.

The top of the table is where single-image generation earns its keep. The bottom is where it cannot help, and a tool that presents a metallic map derived from brightness as if it were measured is misleading you. Metal is not bright; polished metal is reflective, which in a photo can look bright, dark or coloured depending on what it reflects. That is why these masks start switched off.

Shooting a photo that works

Most of the quality is decided before the image reaches any software. A photo taken with the right light needs little correction; a photo taken in direct sun cannot be rescued by any setting.

  • Use soft, even light. An overcast sky is ideal. Direct sunlight bakes hard shadows into the albedo that no delighting removes cleanly.
  • Shoot straight on, with the camera square to the surface. An angled photo foreshortens detail and puts one side closer to the light than the other.
  • Avoid specular highlights. A shiny patch reads as a raised, bright area and turns into a bump in the height map.
  • Lock exposure and white balance, and switch off HDR modes, filters and heavy sharpening. They alter exactly the brightness relationships the maps are built from.
  • Keep the area generous. Seamless tiling blends the edges into each other, so a crop that barely contains the pattern loses part of it.
A circular polariser on the lens removes much of the surface glare from non-metals. It is the cheapest improvement you can make to a texture photo.

Why tiling fails even when the seams are perfect

The usual complaint about photo textures is not a visible seam but visible repetition: the eye picks out the same dark patch every metre across a wall. The cause is almost always lighting. A photo that is slightly brighter on one side becomes a brightness gradient that repeats with every tile, and a repeating gradient is far more noticeable than a repeating detail.

This is why lighting is removed before the image is made to tile, not after. Check the result in a repeated three-by-three view rather than as a single tile; a texture that looks flawless once can look obviously patterned at scale. Distinctive features — a knot in wood, a single large stone — repeat conspicuously however well they blend, and are often worth retouching out of the source.

Checking the result

  1. Look at the albedo alone. It should read as flat colour with no obvious shadows or highlights. Real-world albedo rarely falls below about 30 or rises above about 240 in 8-bit sRGB; pure black or pure white almost always means lighting was left in.
  2. View the normal map on a sphere under moving light. Relief that looks inverted means the height was read the wrong way round; invert it rather than turning normal strength negative.
  3. Check the tiled view at a distance for repeating patches.
  4. Put the material on the geometry it is meant for, at the scale it will be seen. Detail tuned at close range is often far too strong at normal viewing distance.

Bit depth, formats and conventions

An 8-bit height map has 256 levels. Used for displacement, that shows as visible terraces on any smooth slope. Height and other data maps belong in 16-bit PNG or TIFF, or in EXR; albedo is fine at 8 bits. EXR stores linear values, so an albedo saved as EXR is linear light rather than sRGB — correct, but it will look dark in an ordinary image viewer.

Normal maps come in two conventions that differ only in the sign of the green channel. OpenGL — used by Blender, Unity and glTF — points green up; DirectX, used by Unreal, points it down. A map in the wrong convention lights as if the surface were inverted along one axis, a mistake that is easy to miss on noisy materials and obvious on anything with a clear direction.

When one photo is not enough

Everything above is the ceiling of a single image. Measured maps need more observations, each varying one thing. Photometric stereo takes several photos from a fixed camera with the light moved between shots, and solves for the surface normal and true colour at each pixel. Cross-polarised photography separates diffuse colour from specular reflection, which also reveals metal, since metals have no diffuse component. Combined, they are the basis of professional material scanning.

Neither is exotic: both work with a tripod, a single movable light and two polarising filters. For a hero asset they are worth the extra shots. For background surfaces, a well-shot single photo and careful adjustment get most of the way at a fraction of the effort.

Common questions

Why does my height map show a bump where there is only a stain?

Because height is estimated from brightness, and a dark stain looks exactly like a shadowed dip. Single-image tools cannot tell them apart. Lower the band of detail at the stain’s size, or retouch the stain out of the photo used for height.

Can the metallic map be derived automatically?

Not from one photograph. Metal is recognised by how it reflects, not by its brightness, and a single image does not show that. Treat the metallic map as a mask: leave it at zero for stone, wood, fabric and paint, and paint it in where you know there is metal.

Which format should I export for Blender?

PNG 16-bit for height, normal and the other data maps, PNG 8-bit is enough for the albedo, and OpenGL normals. Set the data maps to Non-Color in the image node; only the albedo is sRGB.

Why does my EXR albedo look too dark?

EXR stores linear values and most viewers display them without converting to sRGB. It is correct; a 3D application reads it properly.

Try it yourself

The settings described above are all adjustable in the tool. Files stay on your device; nothing is uploaded to a server.

PBR texture generator

Related guides