Recommended export

Select the Unity preset in the workspace. It chooses OpenGL (+Y), the convention identified by current Unity documentation. Download the complete ZIP so the convention remains visible in the normal-map filename.

  • Set the normal file Texture Type to Normal map
  • Disable sRGB (Color Texture) for height, roughness, metallic, AO and ORM
  • Use Repeat wrap mode for tileable textures
  • Check channel packing against the shader you use

URP and HDRP

Unity pipelines do not use one universal ORM layout. HDRP commonly uses a mask map with its own packing, while URP materials expose metallic and smoothness workflows. Treat the supplied ORM as a source pack and repack if your shader requires a different channel contract.

Choose the Unity normal map convention

Current Unity documentation identifies Unity normal maps as Y+, commonly called OpenGL format. Select the Unity preset or OpenGL (+Y) before export. This differs from older assumptions that group Unity with every DirectX-based engine. The convention describes tangent-space channel direction, not the graphics API selected by the player build.

If an imported asset was authored for Unreal Engine or another −Y workflow, flip its green channel once or regenerate an OpenGL version. Test an obvious raised detail under a moving directional light. When only the vertical response is reversed, convention is the likely cause; seams and face-dependent changes usually point to mesh tangents or UVs instead.

Import the normal texture correctly

Place the exported file in the Unity project and select it in the Project window. Set Texture Type to Normal map so Unity imports and samples the channels as normal data. Do not enable Create from Grayscale for an already generated RGB normal texture. Apply the settings and check the material on the target mesh rather than relying only on the texture thumbnail.

Assign the texture to the normal input exposed by the active shader and start with a moderate normal scale. Normal mapping changes lighting but not the silhouette, collision or shadow geometry. Broad shape should remain in the mesh or an appropriate height technique, while the normal texture carries smaller grooves, pores and bevel detail.

Configure albedo and linear data maps

Albedo or base color normally uses sRGB sampling because it represents display-referred color. Height, roughness, smoothness, metallic, ambient occlusion and packed masks represent numerical material values and should not receive the same color transform. For Default texture imports that store those values, disable sRGB (Color Texture) so the shader receives the authored numbers.

Normal maps use their dedicated Texture Type rather than being treated as generic color. Check platform overrides and compression after the basic import is correct. A data map can look different in the Inspector preview and still be numerically correct; judge it through the material under controlled lighting and compare against an uncompressed setting when diagnosing artifacts.

Use roughness, smoothness and metallic in Unity

Normal Map Maker exports roughness, where white is rough and black is smooth. Unity shaders frequently expose smoothness, the inverse relationship. Depending on the render pipeline and shader, smoothness may use a scalar, an alpha channel or a pipeline-specific packed mask. Invert roughness deliberately and place it in the exact channel required by that material instead of assuming a filename will trigger conversion.

Metallic should follow material identity: bare conductive metal is metallic, while paint, rust, stone, plastic and wood are not. The generated metallic texture is an editable approximation derived from the source and cannot identify substances reliably. Correct layered materials and worn regions by hand before packing them for runtime use.

URP, HDRP and custom mask layouts

There is no single packed layout that fits every Unity shader. URP Lit materials commonly use metallic and smoothness controls, while HDRP uses a pipeline-specific mask map with defined channels. Shader Graph and third-party shaders can establish their own contracts. Treat the exported ORM file as a convenient source pack rather than a universal Unity mask.

The supplied ORM stores red ambient occlusion, green roughness and blue metallic. Split, invert and repack these channels for the selected shader. Keep the separate source maps so a pipeline change does not require regenerating the material. Import any packed mask with sRGB disabled and verify each channel using a diagnostic shader or temporary single-channel preview.

Height, parallax and displacement decisions

A height map stores relative elevation but does nothing until the shader or geometry workflow uses it. Some Unity materials offer parallax or height-based effects; custom shaders can perform displacement or tessellation where the target platform supports it. The expected midpoint, direction and scale vary, so begin with a small effect and confirm whether white should move outward.

Use 16-bit height when real vertex displacement needs smooth gradients, and ensure the mesh has enough subdivisions to deform. Eight-bit height may be adequate for subtle parallax or bump. Do not expect a normal map to change silhouettes, and avoid combining strong height and strong normal detail when they describe contradictory surface directions.

Tiling, filtering and texture compression

Use Repeat wrap mode for textures prepared to tile and Clamp for decals or isolated images. Check every seam on a plane with repeated UVs before applying the material to a complex mesh. Mipmaps improve stability at distance, but excessive high-frequency normal or roughness detail can still shimmer when it collapses into smaller levels.

Review platform-specific maximum size and compression because desktop, mobile and console builds may not use the same format. Normal-map compression should preserve directional data, while packed masks need settings suitable for independent numerical channels. Compare against an uncompressed test when blocks, banding or lost roughness variation appear only after import.

Troubleshoot a Unity material

If bumps look vertically reversed, confirm the source is OpenGL +Y and that no shader operation flips green. If the entire response looks weak or oddly curved, verify Texture Type is Normal map and remove sRGB treatment. Visible UV seams can come from the source, mirrored islands, mismatched tangents or a mesh exported with different triangulation than the bake.

A material that looks uniformly glossy may have roughness connected where smoothness is expected. Metallic-looking paint indicates an incorrect metallic mask. AO that remains black under direct light may have been multiplied into albedo instead of connected to an occlusion input. Isolate one map at a time and restore the complete material only after each channel behaves predictably.

Unity import checklist

Export the OpenGL normal, import it as Texture Type Normal map and assign it to the active material. Keep albedo in sRGB and numerical PBR maps linear. Translate roughness into the shader's smoothness workflow, repack masks for URP, HDRP or the custom shader and test height with the correct midpoint. Verify Repeat, mipmaps, maximum size and platform compression.

Finish by moving a light around the actual mesh and reviewing the material from gameplay distance. Compare editor and target builds, since platform overrides may change texture quality. Preserve the separate maps and convention-labeled export so the asset can be adapted later without guessing how its channels were authored.

  • Unity preset: OpenGL +Y
  • Normal file: Texture Type set to Normal map
  • Material masks: sRGB disabled
  • Roughness: invert or repack when the shader expects smoothness

Ready to verify the workflow? Open the texture workspace and use the matching engine preset before export.