Specular Glossiness to Metallic Roughness Converter

To convert spec/gloss to metal/rough, drop your diffuse, specular and glossiness maps below (glossiness can sit in the specular alpha). The tool works out metallic from how bright the diffuse and specular are, sets roughness to 1 minus glossiness, and gives you base colour, metallic, roughness and a packed ORM PNG. It runs in your browser, is free, and the result is an approximation.

Free · no signup · your maps stay in your browser

Loading the tool...

How to convert spec/gloss maps to metal/rough

  1. 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. 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. 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 / glossinessMetallic / roughness
ColourDiffuse: the colour of non-metals; black for bare metalBase colour: the colour of non-metals, and the reflection colour of metals
ReflectionSpecular (RGB): how much and what colour light reflects; about 4% grey for non-metals, tinted for metalsMetallic: 0 for non-metals (reflection fixed near 4%), 1 for metals
Surface finishGlossiness: white = smooth and shinyRoughness: white = rough and matte (1 - glossiness)
Colour spaceDiffuse and specular RGB sRGB; glossiness linearBase colour sRGB; metallic and roughness linear
Where it is usedOlder game pipelines, Unity Specular setup, the archived glTF extensionglTF 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

Frequently Asked Questions

Yes. The Khronos spec/gloss extension defines glossiness as 1 minus roughness, so the tool inverts the glossiness map. Engines turn roughness into reflection blur in slightly different ways, so if the old material came from a different engine you may want a small levels tweak afterwards.
Spec/gloss does not store metallic, so it is estimated per pixel with the method published alongside the Khronos KHR_materials_pbrSpecularGlossiness extension. The diffuse and specular colours are converted to linear, their perceived brightness is compared, and metallic is solved from that, with any specular below 4% treated as non-metal. It is an approximation, so check it in your engine.
The estimate can land between 0 and 1 where the diffuse and specular do not clearly say metal or non-metal. Real materials are almost always fully metal or not, and Unreal recommends 0 or 1 for pure materials. Turn on "Snap metallic to pure 0 or 1" to round every pixel, and the base colour is solved again for the snapped value.
Diffuse and specular RGB are read as sRGB, as the Khronos extension defines them. Glossiness, smoothness and roughness maps are read as linear data. If your specular map was saved as linear data, tick "My specular map is linear". The base colour PNG is written as sRGB; metallic, roughness and ORM are linear.
Yes. When the specular map has alpha and no glossiness map is added, the tool reads glossiness (smoothness) from the specular alpha. The PNG decoder keeps the specular colour exact even where alpha is 0. You can also use a separate glossiness map, a roughness map as is, or one value for the whole material.
ORM packs occlusion in red, roughness in green and metallic in blue, the layout glTF and Unreal use. glTF reads roughness from green and metallic from blue, so the ORM PNG works as a glTF metallicRoughness texture. This tool has no occlusion input, so red is white (no occlusion). For a Unity mask map or other layouts, use the texture channel packer.
Not here yet: converting GLB and glTF files is coming soon. Today the tool converts the texture maps. If your model is a glTF file, the open-source glTF Transform tool has a metalrough command that converts the materials inside the file.
No. The maps are decoded and converted in your browser, so they never leave your device. Maps up to 4096 x 4096 pixels work, and maps of different sizes are resized to the largest one.