Intermediate Baking

Normal Map Baking — Common Errors and How to Fix Them

Normal map baking errors are one of the most frustrating parts of the game art pipeline. Dark patches appear out of nowhere, seam lines show up exactly where you don't want them, and shading goes the wrong direction in-engine. This guide breaks down every common error and exactly what to do about each one.

⏱ ~9 min read · 6 sections · Intermediate

Section 01

UV Seam Lines

The most common baking artifact: dark or bright lines visible exactly at UV seam boundaries. They appear because the bake samples slightly differently on either side of a UV island edge, creating a visible discontinuity right where two islands meet.

Cause UV islands too close together — insufficient padding
Fix Increase UV island padding. At 2048×2048 resolution, aim for at least 8–16px of space between every island and the texture border. In Blender's Pack Islands tool, set the margin to 0.01 or higher.
Cause Edge dilation (padding) not enabled in the baker
Fix Enable edge dilation (also called "margin" or "padding" in most bakers). This extends map data slightly beyond each UV island edge, filling the gap between islands and preventing seam bleed during mip-mapping. Set it to at least 4px at 2K resolution.
Cause Seams placed on visible silhouette edges
Fix Move UV cuts to less visible areas — undersides, back edges, panel lines, material boundaries. Seams in prominent spots are harder to hide even with correct padding. Place them where the player won't look.
Test with a checker pattern first. Before baking, apply a checkerboard texture and look at the mesh in your 3D viewport. Any visible seam lines in the checker pattern reveal problematic UV placement — fix seam positions before investing time in a full bake.
Section 02

Black Spots and Shadow Bands

Dark patches appearing on the baked normal map — not at seams, but in the middle of faces — indicate areas where the baker's rays hit the inside of the mesh or missed the high-poly surface entirely. This is one of the trickier errors to diagnose because the cause isn't always immediately obvious.

Cause Ray distance too short — rays miss the high poly
Fix Increase the max ray distance (or Extrusion in Blender) so the baker casts further from the low-poly surface to find the high-poly. Increase in small increments — too high and you'll get bleed artifacts from the opposite side of the mesh.
Cause High-poly geometry extends beyond the cage or ray distance
Fix Expand the cage manually in problem areas, or increase ray distance uniformly. Visually check that the cage (or the inflated ray volume) fully encompasses all high-poly geometry before baking.
Cause Nearby geometry casting shadow onto the bake
Fix Bake each object in isolation — hide all other scene objects or use per-object baking mode. Nearby meshes in the scene can occlude rays and produce black patches on unrelated geometry.
Section 03

Smoothing Group Errors

Diagonal shading artifacts — dark bands running across faces that should be flat — almost always come from incorrect smoothing group setup. This is the error that trips up the most beginners because everything looks fine in the modelling software but breaks in the engine.

The rule is simple but critical: every UV seam must be a hard edge, and every hard edge must have a UV seam. When this relationship is broken, the tangent space used for baking doesn't match the tangent space the engine uses at render time — and the result is visible banding across faces.

Cause UV seams don't match hard edges
Fix — Blender In Edit Mode, select all seam edges and go to Edge menu → Mark Sharp. Enable Auto Smooth in Object Data Properties → Normals, set angle to 180°. This ensures every seam is also a hard edge.
Cause Hard edges exist without corresponding UV seams
Fix Select all hard edges on the mesh and mark them as UV seams. Any hard edge without a seam creates a tangent space discontinuity at that edge boundary — the normal map shading will look wrong in-engine even if the bake looks fine in isolation.
Why does this matter? Normal maps are encoded in tangent space — relative to the surface normals of the low-poly mesh. If the tangent space differs between your baking tool and the engine (because hard edges and seams don't match), the normal map shading is incorrect even though the bake itself was technically accurate. Matching seams to hard edges ensures consistent tangent space everywhere.
Section 04

The Green Channel Flip — Inverted Normals in Engine

If your baked normal map looks correct in your baking tool but shows inverted lighting in-engine — bumps appear as dents, highlights go the wrong direction — you have a green channel mismatch. This is caused by two competing normal map conventions used by different software and engines.

DirectX convention (Y-)

Green channel points downward in texture space. Used by: Unreal Engine, most Microsoft tooling, older game engines. Normal maps baked for DirectX have a darker green in the upper portions of curved surfaces.

OpenGL convention (Y+)

Green channel points upward in texture space. Used by: Unity, Godot, Blender, most modern tools. Normal maps baked for OpenGL have a brighter green in the upper portions of curved surfaces.

EngineNormal Map ConventionGreen Channel
Unreal Engine 5DirectXY− (inverted)
UnityOpenGLY+ (standard)
Godot 4OpenGLY+ (standard)
Blender viewportOpenGLY+ (standard)
Cause Baked in OpenGL convention, importing into Unreal (DirectX)
Fix Either flip the green channel in your image editor (invert the G channel only) before importing, or re-bake with the DirectX convention selected in your baker. Trumble's Unreal export preset applies the correct convention automatically.
Cause Texture imported with wrong compression type in Unreal
Fix In Unreal's texture importer, set Compression Settings to Normal Map. This automatically handles the Y-flip for DirectX convention and sets the correct compression format (BC5) for normal map data.
Section 05

Pre-Bake Checklist

Most baking errors are preventable. Running through this checklist before every bake catches the vast majority of issues before you commit time to a full bake — only to discover a problem in the output.

Mesh setup

  • High poly and low poly are aligned in world space — both meshes perfectly overlapping at world origin
  • All transforms applied on both meshes — scale (1,1,1), rotation (0,0,0)
  • Face normals pointing outward on both meshes — check with Face Orientation overlay
  • No interior faces or duplicate geometry on the low poly

UV setup

  • Low poly fully UV unwrapped with no overlapping islands in channel 0
  • All UV islands within the 0–1 space
  • Adequate padding between islands — at least 8px at 2048 resolution
  • Every UV seam is a hard edge and every hard edge has a UV seam

Baker settings

  • Baking in Tangent Space — not Object Space or World Space
  • Correct normal map convention selected — DirectX for Unreal, OpenGL for Unity/Godot
  • Edge dilation / margin enabled in baker output settings
  • Output resolution is power-of-two — 1024, 2048, or 4096
  • Ray distance / extrusion set appropriately for the gap between high and low poly
Section 06

Baking Normal Maps in Trumble

Trumble's Bake tool is designed to minimise the configuration needed to get a clean normal map. Import your high and low poly meshes, set the extrusion distance, choose your target engine convention (DirectX or OpenGL), and bake. Edge dilation is applied automatically to the output.

After baking, inspect the result in Trumble's 3D viewport with a neutral grey albedo and a test lighting setup. Any seam lines, black spots, or shading artifacts are immediately visible at this stage — catching them in Trumble is faster than discovering them after export and engine import.

Auto convention

Select your target engine and Trumble applies the correct DirectX or OpenGL normal map convention automatically — no manual green channel flip.

Inspect in 3D

Preview the baked normal map on your mesh in real time before export. Rotate around the asset to check for seam lines, dark patches, and shading direction.

Edge dilation

Trumble applies edge padding to every baked map automatically, reducing seam artifacts without any manual configuration in the output settings.

If your bake still has errors after following this guide: The most productive approach is to isolate the problem area. Break the mesh into individual parts and bake each piece separately. Clean bakes on isolated parts tell you whether the issue is geometry-level (smoothing groups, hard edges) or bake-level (ray distance, cage). Narrow it down before reworking the whole asset.