twirl

PBR texture color space: which maps use sRGB vs Non-Color?

September 8, 2026·twirl

Learn which PBR texture maps should use sRGB and which should use Non-Color data in Blender, plus what changes in Unreal Engine and other renderers.

If a PBR material looks too glossy, too dull, strangely flat, or just a little wrong after you import it, check the texture color spaces before changing the maps themselves. For the standard PBR set twirl generates, the rule is straightforward in Blender: albedo uses sRGB. Normal, roughness, metallic, and height use Non-Color.

Those four maps are carrying numerical data for the shader, not colors that should be interpreted for display. An image can contain the right pixels and still feed the wrong values into the material if Blender applies a color transform to data that was meant to stay unchanged.

Which PBR maps use sRGB vs Non-Color?

Base color or albedo is the main sRGB texture in a typical metallic/roughness material because it represents visible surface color. Roughness, metallic, height, ambient occlusion, masks, and tangent-space normal maps are different. Their pixel values describe things like roughness amount, material class, elevation, occlusion, or surface direction, so they should be read as data rather than display color.

Blender's current color space documentation calls this out directly for normal and displacement maps, explaining that these images encode data rather than actual colors and should be marked as Non-Color Data. For a normal twirl material in Blender, albedo stays sRGB while normal, roughness, metallic, and height are set to Non-Color.

Why sRGB changes a roughness map

A roughness map stores values that the shader expects to read numerically. If a pixel represents a particular roughness amount, that stored value needs to reach the Roughness input without a display-oriented transfer function changing it along the way.

When a roughness image is incorrectly treated as sRGB, the midtones no longer arrive as the same numerical values that were authored. The material can read noticeably glossier or otherwise shift the balance of its reflections even though the texture itself looks normal in an image viewer. Changing contrast in the texture is a bad first fix because it compensates for an import problem by changing the source map.

Set the map correctly first, then decide whether the roughness actually needs art-direction changes. Our roughness map vs gloss map guide covers the other common roughness problem, where the values are correct but the destination shader expects the inverse convention.

Normal maps are data even though they are RGB

Normal maps look like colorful images, but that purple-blue appearance does not make them color textures. The red, green, and blue channels encode the direction the surface normal should point at each pixel, and Blender's Normal Map node interprets those channels as vector data.

Set the normal texture to Non-Color, then run it through a Normal Map node before connecting it to the Principled BSDF Normal input. If the bumps appear inverted after that, color space is probably not the issue. You may have an OpenGL versus DirectX normal convention mismatch instead, which we cover in our OpenGL vs DirectX normal maps guide.

Metallic maps should also stay Non-Color

A metallic map is usually close to a mask. Black means non-metal and white means metal, with limited use for intermediate values where a pixel covers a transition or mixed surface. Those values should reach the Metallic input directly, so the texture should be treated as Non-Color data.

Adobe's PBR guide also describes metallic as a grayscale linear map rather than a color texture. If the map itself is confusing, our metallic map black or white guide explains how painted metal, rust, dirt, and exposed metal should be handled.

A complete material like this makes the color-space split easy to see: albedo carries visible color while the other maps carry shader data.

Example prompt

brushed anodized aluminum, fine horizontal grain, subtle fingerprints, soft wear, dark graphite finish

Albedo
Normal
Roughness
Metallic
Height

Albedo, normal, roughness, metallic, and height — tileable PNGs.

Loading preview…

Generate a PBR material

Height maps are data too

A height map is another grayscale data texture. Its brightness represents relative elevation rather than visible color, so it should be Non-Color in Blender. How you use that data is a separate decision: feeding height into a Bump node changes the shading while leaving the silhouette alone, while true displacement can move geometry and needs enough mesh density to represent the detail.

Blender's Bump node documentation describes how it derives a perturbed normal from a height texture. If you want actual mesh displacement, our Blender height map displacement guide covers the setup and when the extra geometry is worth it.

What about albedo and base color?

Albedo or base color is different because the image is supposed to represent color, so in the normal workflow it stays in sRGB. The useful distinction is whether the texture represents a color that a person is meant to see or numerical data that a shader is meant to consume.

A typical base color image contains the surface's visible color without baked lighting. Roughness is not visible color. Metallic is not visible color. Height is not visible color. A normal map only uses RGB channels as a convenient way to store vectors. Our PBR material maps guide covers the role of each map in the full set if you want the broader workflow rather than just the color-space setup.

The Blender setup for a twirl material

When you bring a downloaded twirl material into Blender manually, keep the albedo Image Texture on sRGB and connect it to Base Color. Set roughness to Non-Color and connect it to Roughness, then do the same for metallic. Set the normal image to Non-Color, pass it through a Normal Map node, and connect that node to Normal. Height should also be Non-Color and can go through Bump or displacement depending on the material and the shot.

The maps should share the same UV mapping so their surface details stay aligned. If a scratch appears in the albedo but its roughness or normal detail lands somewhere else, that is a mapping problem rather than a color-space problem. If you use twirl Connect for Blender, the current Blender integration can build the material from a completed twirl material for you, while manual ZIP downloads still work when you want to build the node graph yourself or use another application.

Unreal Engine uses the same underlying idea

Unreal does not use Blender's exact Non-Color label, but the distinction between color textures and data textures still applies. Epic's current Datasmith texture guidelines describe albedo as typically sRGB and normal, height, or bump data as linear. Epic also documents mask texture compression without sRGB in its rendering feature reference.

Base Color textures are normally treated as sRGB. Data maps should not be decoded as display color before they drive material values, and normal maps have their own import handling rather than behaving like ordinary color images. If an imported material looks different between Blender and Unreal, check the texture import settings before modifying the authored maps.

The same principle carries into other renderers even when the UI uses different names such as linear, raw, data, or gamma settings. The exact switch changes, but the texture still needs to be interpreted according to what its pixels represent.

Packed maps should be treated as data

Channel-packed textures such as ORM contain multiple material properties in one RGB image. The channels may look colorful when viewed together, but the combined image is still data. In a common ORM layout, red stores ambient occlusion, green stores roughness, and blue stores metallic.

Applying an sRGB transform to the packed image changes the values in those channels before the shader separates them, which defeats the purpose of packing known scalar data. Our ORM texture guide covers the channel layout and how it differs from other packed-map conventions.

A quick way to debug a material that looks wrong

When a PBR material imports badly, we usually separate setup problems from map problems before editing anything. Check whether the albedo is being read as color, whether the data maps are being read as raw or Non-Color data, whether the normal map is going through the correct node and orientation, and whether roughness has accidentally been supplied as gloss or smoothness.

Those checks remove a lot of false problems. Once the import settings are correct, you can judge the actual material instead of judging a color-space conversion layered on top of it. For twirl's current five-map output, the rule worth remembering is the same one we started with: albedo is sRGB; normal, roughness, metallic, and height are Non-Color data.

What to do next

Try it

Generate a PBR material

Type a surface and get tileable albedo, normal, roughness, metallic, and height maps. Five free generations a day.

Open twirl
Read next

Metallic map black or white? How metalness actually works in PBR

Learn when a metallic map should be black or white, why gray values are usually wrong, and how to use metalness correctly in Blender and Unreal Engine.

Continue reading

Sources

Blender Manual: Color Spaces

Blender Manual: Bump Node

Adobe Substance 3D: The PBR Guide, Part 2

Epic Games: Datasmith Export SDK Guidelines

twirl

© 2026 twirlTerms·Privacy