Skip to content
Normalforge

Normal maps and PBR textures in your browser

Roughness Map Generator

Make a roughness map from a photo or albedo and set its range, so shiny and dull areas read right in a PBR shader.

Free · runs in your browser · nothing is uploaded

Open on Normalforge

This embed was switched off for this website. Open on Normalforge

Add this tool to your siteFree embed code, no sign-up. Keep the credit link.

Embed this tool

Copy this code into your website, blog or class page. The tool runs inside your page.

Optional settings, added to the address after embed=1: &accent=0f6b5c (colour, 3 or 6 hex digits). Other parameters are ignored.

Please keep the credit link below the tool.

A roughness map generator turns a photo or texture into the grey map that tells a physically based shader how blurry its reflections are at each point: black for mirror-smooth, white for completely matte. This page offers four ways to read roughness from an image (inverted brightness, brightness, local detail only, or brightness remapped), then fits the result between a minimum and a maximum you set, so the map stays inside a believable range for the material. It also accepts a glossiness or smoothness map as input and inverts it, which makes it a quick converter between the two conventions. The result is linear data, previewed on a 3D sphere under a moving light before you download it.
Roughness map generator example

How to use the Roughness Map Generator

  1. Drop a photo, texture or gloss map on the tool, paste it or press Choose image. Try a sample loads a brick wall.
  2. Choose Roughness from: Inverted brightness (bright = smooth; default), Brightness (bright = rough), Local detail only, or Brightness, remapped.
  3. Set Roughness minimum (default 0.3) and Roughness maximum (default 0.9). Values from 0 to 1 are squeezed into this range, so nothing ends up below the minimum or above the maximum.
  4. Use Contrast (0.2 to 4, default 1) to spread or squeeze the values before they are remapped.
  5. Raise Smooth (blur) (0 to 10 px, default 0) if grain in the photo makes the reflections look speckled.
  6. Tick Input is glossiness or smoothness when you load a gloss or smoothness map; it is inverted first.
  7. Switch Show in the 3D preview to Roughness only to see the map, or Lit material to see reflections, then press Download Roughness.

The stats line shows the minimum, maximum and mean of the result; on the brick sample with defaults they are 0.632, 0.811 and 0.7, a fairly matte surface, as brick should be. To convert an existing roughness map into smoothness, load it, choose Inverted brightness and set the range to 0 and 1.

Judge the map on the lit sphere rather than as a grey picture. Drag the light (Shift + drag) across the surface: where the highlight stays tight, the map says smooth; where it spreads into a dull sheen, it says rough. If the whole surface looks like wet plastic, raise the minimum.

Roughness versus glossiness: how do I convert?

Invert the map: smoothness or glossiness = 1 − roughness, and roughness = 1 − glossiness. A roughness of 0.3 is a smoothness of 0.7. Engines in the metallic/roughness workflow, glTF among them, want roughness; shaders built around smoothness or the specular/gloss workflow want the inverted map.

RoughnessSmoothness / glossinessReflections
0.01.0sharp, mirror-like
0.30.7glossy, slightly blurred
0.70.3broad and dim
1.00.0none visible, fully matte

On this page, tick Input is glossiness or smoothness and the input is inverted before anything else; the ORM Texture Packer does the same automatically when it fills the alpha channel of a Unity HDRP mask map, which holds smoothness.

How does an image become a roughness map?

The image is turned to grey, optionally inverted as a gloss input, blurred, passed through the chosen mode, stretched by contrast around mid grey and finally remapped to the minimum and maximum. In Inverted brightness mode, bright parts become smooth; in Brightness mode, bright parts become rough; Local detail only keeps the small variation around mid grey and ignores large light changes.

Can colour brightness determine physical roughness?

Only loosely. Dust, scratches and worn paint are often lighter and rougher at the same time, while dark wet stone is smooth. Brightness is a hint, so the minimum and maximum keep the map within a plausible range for the material.

What do the four modes do?

ModeValue before remappingUse it for
Inverted brightness1 − greyworn or polished highlights on dark surfaces
Brightnessgreydust, chalk or scratches that are lighter and rougher
Local detail only0.5 + (grey − its blur)photos with uneven light, keeping only small variation
Brightness, remappedgrey, range set only by the sliderswhen you want the minimum and maximum to do all the work

Local detail only compares each pixel with a blurred copy of the image (at least 8 px wide), so a shadow across half the photo no longer turns half the surface rough.

Questions and answers

What is a roughness map?

A grey linear map where 0 means a perfectly smooth surface with sharp reflections and 1 a fully rough one that scatters light evenly.

Should roughness maps use sRGB?

No. Roughness is data, not colour; import it with sRGB turned off, or the mid values shift.

Why does the output range matter?

Real materials rarely reach pure 0 or pure 1. Keeping the map within, say, 0.3 to 0.9 avoids mirror spots and dead-flat patches the material would never have.

Which mode should I start with?

Inverted brightness for most photos of stone, brick or wood, Local detail only when the photo has uneven light you cannot remove.

Can I make a roughness map from a normal map?

Not here; roughness comes from a colour or grey image. Use the photo the normal map was made from.

How do I put roughness into an ORM texture?

Download it and load it into the green slot of the ORM Texture Packer, together with AO and metallic.

Why is my roughness map almost one flat grey?

The photo has little contrast, or the minimum and maximum are close together. Raise Contrast or widen the range.

Do I need a 16-bit roughness map?

Rarely. Roughness changes smoothly, so the 8-bit PNG default is usually enough; pick PNG 16-bit in the File format menu if your pipeline keeps 16-bit data.