Updated
Why engines pack channels
Metallic, ambient occlusion and smoothness are each a single value per pixel, so each needs only one channel. Shipping them as three separate RGB textures triples the memory and makes the shader sample three textures instead of one. Packing them into the red, green, blue and alpha channels of one texture is free performance, which is why every modern engine expects it.
The HDRP mask map layout
- Red: metallic. 0 is non-metal, 255 is metal. Leave at 0 for materials with no metal.
- Green: ambient occlusion. 255 means no occlusion, so use 255 when you have no AO map.
- Blue: detail mask. Controls where the detail map shows. Use 255 if you do not use detail maps.
- Alpha: smoothness. 0 is rough, 255 is mirror-smooth.
URP and the built-in pipeline are different
The URP Lit shader and the built-in Standard shader do not use a mask map. Their Metallic Map reads metallic from the red channel and smoothness from the alpha channel, and ignores green and blue. Ambient occlusion goes in a separate Occlusion Map slot that reads the green channel.
An HDRP mask map therefore also works as a URP metallic map and as a URP occlusion map at the same time: assign the same texture to both slots.
Roughness is not smoothness
Substance Painter, Quixel, Blender and most texture libraries export roughness. Unity wants smoothness, which is the same information inverted: smoothness = 1 − roughness. If you put a roughness map straight into the alpha channel, shiny areas turn matte and matte areas turn shiny. Invert it while packing.
Unreal, Godot and glTF use ORM instead
Outside Unity the common layout is ORM: occlusion in red, roughness in green, metallic in blue. glTF defines it that way, Godot has an ORMMaterial3D built around it, and it is the usual convention for Unreal Engine materials. Note that ORM keeps roughness as roughness, so nothing is inverted.
Import settings that matter
- Turn off sRGB. These channels are data, not colour, and sRGB decoding shifts every value. In Unity, untick sRGB (Color Texture).
- Keep the alpha channel. Some exporters and image editors drop or premultiply alpha, which destroys the smoothness channel or the colours under it.
- Do not judge the file in an image viewer. With smoothness in alpha, it looks partly transparent. That is correct.
The matching normal map
A packed mask map covers everything except surface direction. If the material has no normal map yet, you can derive one from its height map or from the albedo. Unity expects the OpenGL (Y+) convention.