How to convert spec/gloss maps to metal/rough
- 1
Add your maps
Drop the diffuse and specular maps, plus a glossiness map if gloss is not in the specular alpha. Files named diffuse, spec, gloss or rough go to the right slot.
- 2
Check the options
Pick where glossiness comes from, say if your specular map is linear, and snap metallic to pure 0 or 1 if you want clean metal masks.
- 3
Download
Save base colour, metallic, roughness and ORM PNGs one by one, or all four in a ZIP, ready for glTF, Unreal, Unity, Godot or Blender.
Spec/gloss vs metal/rough: what each map means
| Specular / glossiness | Metallic / roughness | |
|---|---|---|
| Colour | Diffuse: the colour of non-metals; black for bare metal | Base colour: the colour of non-metals, and the reflection colour of metals |
| Reflection | Specular (RGB): how much and what colour light reflects; about 4% grey for non-metals, tinted for metals | Metallic: 0 for non-metals (reflection fixed near 4%), 1 for metals |
| Surface finish | Glossiness: white = smooth and shiny | Roughness: white = rough and matte (1 - glossiness) |
| Colour space | Diffuse and specular RGB sRGB; glossiness linear | Base colour sRGB; metallic and roughness linear |
| Where it is used | Older game pipelines, Unity Specular setup, the archived glTF extension | glTF 2.0 core, Unreal, Unity Metallic, Substance Painter by default, three.js |
Why glTF and modern engines use metal/rough
glTF 2.0 describes materials with base colour, metallic and roughness in its core spec. Spec/gloss was only ever an extension (KHR_materials_pbrSpecularGlossiness), and Khronos has archived it in favour of KHR_materials_specular, which adds specular control on top of metal/rough.
Newer glTF material features, such as clearcoat, transmission, sheen and iridescence, are designed for metal/rough, so a spec/gloss model cannot use them. Unreal Engine materials take Base Color, Metallic and Roughness, and Unity and Substance tools support both workflows with metal/rough as the usual default.
Metal/rough is also harder to get physically wrong: non-metals always reflect about 4%, and only the metallic map decides what is metal.
How the conversion works, and its limits
Roughness is simple: roughness = 1 - glossiness. Metallic is not stored in a spec/gloss material, so it has to be estimated. This tool uses the method published with the Khronos spec/gloss extension: diffuse and specular are decoded from sRGB to linear, their perceived brightness is compared, and metallic is the value that best explains both. A specular darker than 4% reads as non-metal. Base colour then blends the diffuse colour (for non-metals) and the specular colour (for metals), and is encoded back to sRGB.
Because metallic is estimated, some texels can come out partly metallic, for example dark plastics with a bright specular, or metals with leftover diffuse colour. Use "Snap metallic" for clean 0 or 1 masks, or paint the metallic map by hand where you know what is metal.
Some spec/gloss looks have no exact metal/rough match: non-metals with a specular far from 4% (gems, coloured or stylised highlights) need KHR_materials_specular or an engine Specular input to look the same. Engines also map glossiness to blur a little differently, so a roughness map may need a small levels tweak to match the old look.
More free texture tools
Texture channel packer
Pack metallic, roughness and AO into ORM, a Unity mask map or a custom layout, or unpack one.
Or regenerate PBR maps with AI
Describe the look and AI paints a new texture onto your 3D model, then makes its PBR maps.
Normal map generator
Make a normal map from any image, free in your browser.