A roughness map and a gloss map describe the same basic surface property from opposite directions.
In a roughness map, black means smooth and reflective while white means rough and matte. In a gloss map, the values are reversed. White means smooth and glossy, black means rough.
That sounds simple until a material moves between Blender, Unreal Engine, Unity, an older texture library, and a renderer that still uses specular/gloss terminology. A map can be technically valid and still make the material look completely wrong because the destination shader expects the inverse convention.
Roughness map vs gloss map
The conversion is straightforward:
Roughness = 1 - Glossiness
So a roughness value of 0.75 is equivalent to a gloss value of 0.25. A roughness value of 0.1 is equivalent to gloss 0.9.
Both maps are describing microsurface behavior. The renderer uses that value to determine how concentrated or spread out a reflection should be. Blender's current Principled BSDF describes roughness as microfacet roughness, with 0 producing a sharp reflection and 1 producing a diffuse reflection. Unreal uses the same 0-to-1 roughness direction in its material system. Blender documents the Roughness input here, and Epic describes Unreal's Roughness input here.
The important part is not the filename. It is knowing whether light pixels are supposed to mean rough or smooth.
What a roughness map should look like
A roughness map is grayscale, but it should not usually look like a grayscale copy of the base color.
It is describing how the surface reflects light, not how bright the material is. A dark stain on concrete does not automatically mean that area is smoother. A white painted mark does not automatically mean it is rougher.
Useful roughness variation follows changes in the physical finish: fingerprints on metal, polished contact areas, worn varnish, dust, oil, wet patches, scratches, oxidation, or areas where a coating has been removed.
This is why roughness often does more for the feel of a material than adding more color detail. Two surfaces can have nearly identical albedo but read very differently when one has tight reflections and the other breaks them into a broad matte response.
We tend to judge roughness under lighting that gives us something clear to reflect. A flat 2D thumbnail can tell you where values are changing, but a grazing highlight on a sphere or plane tells you whether those values actually make sense.
Blender uses roughness directly
Blender's Principled BSDF has a Roughness input. A twirl roughness map can connect to it directly.
Set the image texture to Non-Color data. Roughness is numerical surface data, so it should not go through the same display color transform as an albedo texture.
If a texture package gives you a gloss map instead, invert it before the Principled Roughness input. You can do that destructively in an image editor or non-destructively in the shader with an invert-style node setup.
Our Blender material guide covers the rest of the PBR setup, including color spaces, normals, and height maps.
Unreal Engine also uses roughness directly
Unreal's standard material inputs use Roughness, with 0 representing a smooth mirror-like surface and 1 representing a rough matte surface. Epic also notes that most real surfaces benefit from mapped roughness variation instead of one uniform value.
For a standalone roughness texture, disable sRGB in the texture settings and connect the grayscale data to the Roughness input.
If your source texture is labeled Gloss or Glossiness, invert it first. In Unreal, a OneMinus node is a convenient way to test this without editing the source image. If the material suddenly goes from backwards-looking to plausible, there is a good chance the source was gloss data rather than roughness.
The same issue can show up inside packed textures. An ORM texture usually stores roughness in the green channel, while another pipeline may store gloss or smoothness in a channel instead. Our ORM texture guide goes deeper on packed channel conventions.
Unity commonly wants smoothness
Unity is where this naming difference becomes especially important.
Unity commonly exposes Smoothness rather than Roughness. Smoothness follows the gloss direction: higher values are smoother and lower values are rougher. Unity's documentation describes smoothness as the microsurface control used alongside metallic or specular workflows. In practical terms, a twirl roughness map needs to be inverted before it becomes Unity smoothness. Unity documents its smoothness workflow here.
The exact storage also depends on the render pipeline and shader. Smoothness can live in an alpha channel or inside a packed map rather than as a standalone texture.
That is why we recommend identifying the shader first, then preparing the textures for it. Do not build a Unity packing workflow from the assumption that every project expects the same channel layout.
Our Unity material guide covers the current Built-in, URP, and HDRP considerations at a higher level.
How to convert gloss to roughness
If the two maps are true inverses, converting between them only requires inverting the grayscale values.
In Photoshop, GIMP, Affinity Photo, or another image editor, invert the image and save a new file. If you want to keep the source untouched, do the inversion in the material graph instead.
For shader-based conversion, the operation is simply 1 - value. Blender can perform the inversion in nodes. Unreal has OneMinus. Other material systems have equivalent math or invert nodes.
For a handful of materials, doing this in the shader is convenient. For a production library, we usually prefer converting the source textures once and naming them clearly. That removes one hidden operation from every material and makes the files easier to inspect outside the renderer.
Why an inverted map can look almost right
This is one reason roughness and gloss problems can survive for longer than normal-map orientation mistakes.
A reversed normal map often looks obviously broken. Inverted roughness can still look like a plausible material, just the wrong one. Dust becomes polished. Fingerprints become matte patches. Scratched varnish becomes glossier than the untouched finish.
Neutral gray values make the problem even harder to notice because 0.5 remains 0.5 when inverted.
If a material feels strangely plastic, wet, or uniformly dull after import, we check a few things before changing the art:
- Is the file actually roughness, gloss, or smoothness?
- Is the data being treated as linear rather than sRGB color?
- Is the correct channel being read if the texture is packed?
- Does the roughness variation make physical sense under reflections?
Those checks usually tell you more than immediately pushing contrast or adding noise.
Roughness is not specular intensity
Roughness controls the spread of a reflection. It is not simply a slider for how much reflection exists.
This distinction matters when moving between older specular/gloss workflows and modern metallic/roughness materials. A gloss map is the inverse of roughness, but a specular map is a separate input describing reflectance behavior. You should not convert a specular texture into roughness by inverting it.
Modern metalness workflows separate those jobs more clearly. Roughness describes the microsurface. Metallic identifies whether a region behaves as metal or dielectric. Base color carries the surface color information appropriate to that material type.
If you are unsure what a downloaded grayscale map represents, inspect the material package or documentation before wiring it by appearance alone.
What twirl exports
twirl currently exports a roughness map as part of each generated PBR set, alongside albedo, normal, metallic, and height.
That means the map can connect directly to roughness inputs in Blender and Unreal. For a shader that expects glossiness or smoothness, invert the roughness values first.
We prefer keeping the generated source maps separate because they are easy to inspect, edit, and move between applications. Engine-specific inversions and channel packing can happen when you know the final destination.
If you are starting from a surface description, twirl generates the full PBR material set from a text prompt. Once the material looks right, adapt the roughness map to the convention your renderer actually expects.