Import checklist
Unreal generally detects normal maps from their names and appearance, but the import settings still deserve inspection.
- Use the DirectX normal export
- Confirm Normalmap compression for the normal texture
- Disable sRGB for height, roughness, metallic, AO and ORM
- Use the ORM channels as R=AO, G=Roughness, B=Metallic
Displacement
Use the 16-bit height export when a workflow actually deforms geometry. The additional precision reduces stepping, but tessellation, virtual heightfield mesh and material setup remain engine-side decisions.
Export the right normal map for Unreal Engine
Select the Unreal preset to export a DirectX-style −Y tangent-space normal map. The filename records the convention so it remains clear after the texture enters the Content Browser. Unreal's standard normal workflow expects this green-channel direction. If a source map was created for Blender, Unity, Godot or another +Y workflow, convert it once by inverting green or export a dedicated DirectX version.
Test with a simple raised feature and a movable light before building a complex material. If the vertical lighting response is reversed while horizontal response is correct, inspect the green convention. If artifacts follow UV seams, triangle edges or mesh deformation, investigate tangents, smoothing and triangulation rather than repeatedly flipping channels.
Verify normal-map import settings
Unreal often recognizes a blue tangent-space normal from its name and content, but automatic detection should still be verified. Open the Texture asset and confirm a normal-map compression setting is active and sRGB is disabled. Normal compression is designed for directional channel data and may reconstruct the blue component, so the imported preview does not need to match a generic color texture byte for byte.
Connect the texture through a Texture Sample intended for normals and into the material Normal input. Keep the tangent-space assumption consistent with the mesh. Start at the authored strength; if a custom material scales normals, normalize the result correctly and avoid extreme values that amplify source noise or compression blocks.
Import albedo and mask textures
Base Color normally uses sRGB because it represents color. Roughness, Metallic, Ambient Occlusion, height and packed masks store numerical data, so disable sRGB for them. A Masks compression preset can be useful for channel-packed textures because it treats the image as non-color data, but the best format depends on the target platform and whether every channel needs equal precision.
Inspect channels individually in the texture or material editor. A packed image can look strange as RGB because it contains unrelated grayscale signals. That appearance is expected. What matters is that each channel reaches the correct material input without gamma conversion, unintended inversion or compression that destroys the useful range.
Connect the exported ORM map
Normal Map Maker exports ORM with ambient occlusion in red, roughness in green and metallic in blue. Add one Texture Sample with sRGB disabled, then route red to Ambient Occlusion, green to Roughness and blue to Metallic. This packing is convenient for Unreal materials because three masks can share one sample, but it is still worth keeping the separate source maps for editing and repacking.
Check each channel against material identity. Metallic should usually be near binary for clean material regions, roughness should produce stable highlights and AO should remain subtle. Color-derived generation cannot know whether a bright patch is metal, paint or reflection, so correct layered surfaces and exposed edges before accepting the pack as final.
Use height and displacement deliberately
Height represents relative elevation, but the available displacement technique depends on the Unreal version, rendering path, material and target platform. Virtual Heightfield Mesh, parallax-style material functions and geometry displacement have different setup and performance costs. Treat the exported map as input data and follow the chosen technique's midpoint, scale and texture requirements.
Use the 16-bit height export when visible geometry deformation needs smooth gradients. Provide enough mesh or virtualized surface resolution for the feature scale, and begin with a small displacement amount. Height that looks correct on a plane can produce broken silhouettes or intersections on an asset, so validate it on final geometry and under production camera distances.
Manage UVs, tangents and mesh seams
Tangent-space normal maps depend on the mesh basis used to interpret them. Preserve intentional hard edges, UV seams, vertex normals and triangulation between baking, export and Unreal import. A convention mismatch reverses one texture axis everywhere; a tangent mismatch produces face gradients, seam discontinuities or changes around mirrored islands.
For tiling materials, use Repeat-style addressing and test opposite texture borders on a flat mesh. For unique baked assets, add adequate padding around UV islands so mipmaps do not pull unrelated colors into the seam. Normal-map edge colors should be dilated consistently rather than left transparent or black outside the islands.
Choose compression and mip behavior
Normal compression, mask compression and grayscale height data have different priorities. Apply the suitable texture group and platform override, then compare the result with an uncompressed reference. Block artifacts around shallow normals, lost roughness variation and AO banding may appear only after cooking for the target hardware. Avoid solving compression artifacts by exaggerating the source maps.
Mipmaps reduce aliasing as textures recede, but high-frequency normal and roughness patterns can still shimmer. Judge the asset at gameplay distance and reduce detail that cannot survive the final texel density. Packed channels share resolution and mip behavior, so a tiny AO crack and broad roughness gradient may not always be ideal candidates for the same delivery texture.
Troubleshoot common Unreal material errors
Reversed vertical bumps indicate an OpenGL source or an extra green flip. Washed-out or skewed normals suggest sRGB or the wrong compression. A completely glossy surface may have no roughness connection or a value sampled from the wrong channel. Metallic paint usually means the generated threshold mask needs semantic correction.
If AO darkens direct lighting or appears permanently printed into the surface, check that it was not multiplied into Base Color. If height steps visibly, confirm 16-bit source handling and the displacement method. Isolate Base Color, Normal, Roughness, Metallic and AO one at a time in a simple test material before debugging the full graph.
Unreal Engine validation checklist
Import the DirectX −Y normal, confirm normal-map compression and keep sRGB off. Import ORM as mask data, route red to AO, green to Roughness and blue to Metallic. Check that Base Color remains sRGB and all numerical textures remain linear. Validate UV seams, mipmaps, platform compression and any height technique on the actual mesh.
Move a light around a clear surface feature, test several reflection environments and review the asset at its production distance. Preserve convention-labeled exports and separate maps next to the packed runtime texture. That handoff information prevents later artists or automated import scripts from applying an unnecessary second conversion.
- Unreal preset: DirectX −Y
- Normal texture: normal-map compression and sRGB off
- ORM texture: R ambient occlusion, G roughness, B metallic
- Height: validate precision, midpoint and geometry method
Document the material instance controls
Expose only useful runtime adjustments such as normal intensity, roughness bias or AO influence in a Material Instance, and give them conservative ranges. These controls help art direction without rewriting source textures, but they should not conceal an incorrect import. Record the expected ORM layout and normal convention in the parent material or asset naming rules. When several teams share a master material, a clear channel contract prevents one texture from being interpreted differently across levels, platforms or automated import pipelines.
Ready to verify the workflow? Open the texture workspace and use the matching engine preset before export.
