twirl

How to Use a Roughness Map in Unity URP

September 18, 2026·twirl

Unity URP uses smoothness instead of a direct roughness input. Learn how to invert a roughness map, pack it into alpha, and set up a Lit material correctly.

If you import a normal PBR texture set into Unity URP, you may have a roughness map but nowhere obvious to put it. The URP Lit shader exposes Smoothness, not a standalone Roughness texture slot. Those values describe opposite ends of the same surface property, so a roughness map has to be inverted before Unity can use it as smoothness.

There is one more detail that makes the setup less obvious: the standard URP Lit material usually reads smoothness from an alpha channel rather than from a separate grayscale texture. In the current Unity 6.7 documentation, Lit and Complex Lit can use a channel-packed texture with metallic in red, occlusion in green, and smoothness in alpha. That means a downloaded PBR set with separate metallic and roughness files needs a small conversion before it matches the built-in URP material layout.

Roughness and smoothness are inverse values

A roughness map controls how broadly a surface reflects light. Higher roughness produces wider, blurrier reflections, while lower roughness produces tighter, sharper reflections. Unity's Smoothness control expresses the same idea in the opposite direction. A smoothness value of 1 produces a sharp reflection, while 0 produces a broad rough highlight. Unity documents that behavior in the URP Lit material settings.

For a normalized texture value, the conversion is simply smoothness = 1 - roughness. White areas in a roughness map become black in smoothness, and black roughness becomes white smoothness. Mid-gray stays near the middle.

Do not connect an unmodified roughness texture anywhere Unity labels Smoothness. The image may still create visible variation, but every feature will respond in the opposite direction. A rough stone patch intended to scatter reflections will become the smooth part of the material, while polished areas will become rough.

Our roughness map vs gloss map guide covers the same inversion more generally. In Unity terminology, a smoothness map is effectively the gloss-side representation of this property.

Where smoothness goes in a URP Lit material

In the built-in URP Lit shader, smoothness is commonly stored in the alpha channel of another texture. Unity's current material reference lets the Smoothness Source use either the Metallic Map alpha or the Base Map alpha. Metallic Alpha is the default option.

For a typical opaque PBR material, packing smoothness into the metallic texture's alpha is the cleaner choice because it keeps Base Map alpha available for workflows that use transparency or alpha clipping. The exact choice still depends on the shader and material. If your project already uses Base Map alpha for another purpose, do not overwrite it just to follow a generic texture layout.

Unity 6.7 also documents a newer channel-packed layout for URP Lit and Complex Lit materials: red = metallic, green = occlusion, blue = unused, alpha = smoothness. The Unity channel-packed texture documentation says to disable sRGB on this packed texture and assign it to the material's Metallic and Occlusion properties. Unity then reads the relevant channels for each property.

If you only have separate metallic and roughness maps, you do not need to invent data for every channel. Invert roughness into smoothness, place metallic in red and smoothness in alpha, then use the channels required by the material. If you also have AO, the current URP packed layout can place it in green.

How to convert a roughness map for Unity URP

The safest conversion happens before the texture reaches the Lit material. Open the roughness image in an image editor or texture-processing tool, invert the grayscale values, and treat the result as smoothness. Then pack that smoothness image into the alpha channel of the texture Unity will use as its Metallic Map.

If the source material has a metallic map, place metallic in the red channel. For the Unity 6.7 packed Lit layout, AO can go into green and smoothness into alpha. Blue is currently unused by that documented layout. If your project uses a custom Shader Graph, a package-specific shader, or an older pipeline convention, follow that shader's inputs instead of assuming the built-in Lit packing applies.

You can also perform the inversion in Shader Graph with a One Minus operation. That is useful when you want to keep the original roughness texture untouched or when a custom shader already samples separate maps. For the built-in Lit shader, pre-packing the texture is usually simpler because the material inspector already expects smoothness from an alpha channel.

Keep the roughness source and converted smoothness clearly named. A file called stone_roughness.png should not silently contain smoothness values after conversion. Names such as stone_metallicSmoothness.png or another convention established by your project make the data easier to identify later.

A stone surface with visible roughness variation makes it easy to check whether Unity is reading roughness and smoothness in the intended direction.

Example prompt

weathered limestone floor, pale warm stone, fine pores, worn patches, subtle surface variation

Albedo
Normal
Roughness
Metallic
Height

Albedo, normal, roughness, metallic, and height — tileable PNGs.

Generate a PBR material

Using twirl roughness maps in Unity URP

twirl currently provides separate albedo, normal, roughness, metallic, and height maps. The roughness and metallic files stay separate because that source layout is portable across Blender, Unreal Engine, Unity, and other PBR workflows, but Unity URP needs the roughness data converted to smoothness for its built-in Lit material.

For a URP material, use the twirl albedo as Base Map and import the normal as a normal texture. Invert the roughness map to create smoothness, then pack smoothness into the alpha channel expected by your chosen Lit setup. The separate metallic map provides the metallic data. twirl does not currently export a ready-made Unity URP packed texture, and the Unity plugin is (coming soon), so the engine-specific packing remains a manual step.

The twirl Unity material page covers the broader Unity workflow. If you need a new tileable source set, the AI PBR material generator creates the separate five-map material before engine-specific conversion.

Disable sRGB on metallic, smoothness, and packed mask data

A packed metallic-smoothness texture contains material values rather than display color. It should be imported as linear data. Unity's current URP channel-packing documentation specifically instructs you to disable sRGB (Color Texture) on the packed texture.

That matters because sRGB decoding changes midrange values. A roughness value that was inverted correctly can still produce the wrong reflection response if the resulting smoothness data is interpreted as color before it reaches the shader. Base color is different because it represents visible color and normally remains an sRGB texture.

Normal maps have their own import path. Set the texture type to Normal map rather than treating the RGB channels as ordinary color. If the material still looks wrong after fixing smoothness, check the normal import type before changing the roughness data again.

Our PBR texture color space guide explains why base color and data maps need different handling across 3D applications.

Do not confuse URP packing with an HDRP Mask Map

Unity URP and HDRP do not use the same packed texture layout. This is easy to miss because both pipelines talk about metallic, occlusion, and smoothness.

The current URP Lit channel-packed texture uses metallic in red, occlusion in green, and smoothness in alpha. HDRP's standard Mask Map uses a different channel convention, including its own placement for ambient occlusion and detail-mask data. A texture prepared for one pipeline should not be dropped into the other without checking the channels.

We have a separate Unity HDRP Mask Map guide for that workflow. Keeping the distinction explicit is safer than naming every packed texture mask and relying on memory later.

The same caution applies to Unreal-style ORM textures. ORM conventionally stores occlusion, roughness, and metallic in RGB, which is not the same layout as the current URP Lit packed texture. Our ORM texture guide explains the common packing orders and why a packed file needs to match the shader that reads it.

Why your Unity material can look too shiny after import

If a material becomes much shinier in Unity than it was in Blender or another DCC, check whether roughness was used as smoothness without inversion. That produces exactly the kind of reversed response that makes worn, chalky, or porous areas look polished.

The next check is color space. Smoothness, metallic, AO, and other mask data should not be gamma-decoded as sRGB color. After that, confirm that the smoothness data is actually in the alpha channel selected by the material's Smoothness Source setting.

Lighting can still make two correctly configured applications look different. Reflection probes, environment lighting, exposure, tonemapping, and the shader itself all affect the final image. Matching those conditions is a separate problem from getting the texture data into the correct slots. Fix the map interpretation first so you are not compensating for an inverted or gamma-shifted texture by changing lighting.

What if the material has no metallic map?

Many common surfaces are non-metallic throughout, including stone, unfinished wood, concrete, fabric, and most plastics. A material can still need detailed smoothness variation even when metallic is a constant zero.

In that case, you can still build the texture layout the shader expects. The metallic channel can remain black while the alpha channel contains the converted smoothness. The point of packing is not that every channel must contain complex artwork. It is that the shader knows where to read each property.

This is also why using the Smoothness slider alone is not equivalent to using a texture. A slider applies one overall value. A smoothness map lets worn edges, pores, polished patches, scratches, and other surface regions respond differently. Unity multiplies the sampled smoothness values by the material's Smoothness control, so the slider can still be used to scale the texture's effect after the map is connected.

What about height maps in URP?

A height map is not a replacement for roughness or smoothness. Height describes surface elevation, while smoothness controls the spread of reflections. A bright pixel in a height map might represent a raised area, but that says nothing by itself about whether the area should be glossy or matte.

Do not put a roughness map into a height input because a tutorial or older shader happens to show a slot there. Which height features are available depends on the shader and render-pipeline version. If a material needs parallax, displacement, or another height-driven effect, treat that as a separate part of the material setup.

The same separation applies to normal maps. Normal detail changes the direction used for lighting, while smoothness changes how concentrated the reflection is. A material often needs both because they describe different parts of the surface response.

A practical URP roughness workflow

When a PBR set gives you roughness but Unity URP asks for smoothness, keep the source roughness file intact and create a converted version for Unity. Invert roughness so that smoothness = 1 - roughness, then place that smoothness data in the alpha channel selected by the Lit material. For the current Unity 6.7 channel-packed Lit layout, metallic goes in red, occlusion can go in green, and smoothness goes in alpha. Disable sRGB on the packed data texture.

After import, check the material under reflections that make the surface response easy to read. Rough regions should produce broader reflections and smooth regions should produce sharper ones. If the response is backwards, verify the inversion. If the values feel shifted rather than reversed, check sRGB. If there is no texture variation at all, confirm the alpha channel and Smoothness Source before editing the artwork.

The conversion is small, but it is necessary because a standard roughness texture and Unity URP's built-in smoothness input do not use the same direction or storage convention. Once that distinction is handled, the rest of the PBR set is much easier to debug.

What to do next

Try it

Generate a PBR material

Type a surface and get tileable albedo, normal, roughness, metallic, and height maps. Five free generations a day.

Open twirl
Read next

Unity HDRP Mask Map: How to Pack PBR Textures Correctly

Learn how to build a Unity HDRP Mask Map from metallic, ambient occlusion, roughness, and detail textures, including roughness-to-smoothness conversion and channel packing.

Continue reading

Sources

Unity 6.7 Manual: Assign a channel-packed texture to a URP material

Unity 6.7 Manual: Complex Lit shader material Inspector reference

Unity 6.7 Manual: Prebuilt shaders in URP

twirl

© 2026 twirlTerms·Privacy