← Back to Blog 3d-modeling

Mikktspace Tangent Space in Blender: Fix Normal Map Seams and Baking Errors for Game Assets

By BitSoul Team5/22/2026Updated 8/1/20265 min read75 views
Mikktspace Tangent Space in Blender: Fix Normal Map Seams and Baking Errors for Game Assets

If you've ever baked a perfect-looking normal map in Blender only to import it into Unity or Unreal Engine and see harsh seams at UV borders, you've hit the most misunderstood problem in game asset texturing: tangent space mismatch. The normal map isn't wrong — the tangent basis used to generate it doesn't match the one the engine uses to read it. The fix is straightforward once you understand Mikktspace.

Why Tangent Space Mismatches Break Normal Maps

Normal maps don't store world-space direction vectors. They store vectors *relative to the surface* — specifically, relative to a tangent frame made of three vectors: tangent (T), bitangent (B), and normal (N). Every renderer and baker computes this tangent frame slightly differently, and when baking and rendering use different calculations, seams and shading errors appear along UV splits.

The problem shows up most visibly at UV island borders. On one side of a seam, the tangent frame points one way; on the other, it points slightly differently. The normal map encodes the correct offset for the baker's tangent basis — but the renderer interprets it with a different basis, producing a discontinuity.

Historically, every engine and DCC tool had its own tangent space algorithm: 3ds Max, Maya, xNormal, and Blender each computed slightly different frames for the same mesh. This made cross-application normal map baking a minefield.

Why Tangent Space Mismatches Break Normal Maps — illustrated

Mikktspace Explained: The Game Engine Standard

Mikktspace is a tangent space algorithm developed by Morten S. Mikkelsen and published as part of his 2008 thesis. It was created specifically to give bakers and renderers a shared, deterministic tangent basis so that normal maps baked in one app render correctly in another — as long as both implement Mikktspace correctly.

Mikktspace is now the de facto standard across the game industry:

| Application | Mikktspace Support |
|---|---|
| Blender (Cycles/EEVEE baker) | ✅ Default since 2.80 |
| Unity Standard, HDRP, URP | ✅ Default |
| Unreal Engine 5 | ✅ Default |
| Godot 4 (StandardMaterial3D) | ✅ Default |
| Substance Painter | ✅ Default |
| xNormal | ✅ Available (select "MikkTSpace") |
| Marmoset Toolbag | ✅ Default |

As long as your entire pipeline — from baker to engine shader — consistently uses Mikktspace, normal maps will render without seams. The problems arise when one step in your pipeline breaks the chain.

Setting Up Correct Mikktspace Baking in Blender

Blender's Cycles baker uses Mikktspace by default since version 2.80, but several easy mistakes can still break the tangent basis.

Step 1: Apply all transforms before baking. Unapplied scale is the most common cause of baking errors. Run `Ctrl+A → All Transforms` on your mesh before starting a bake.

```python
import bpy

# Apply all transforms to selected objects before baking
for obj in bpy.context.selected_objects:
bpy.context.view_layer.objects.active = obj
bpy.ops.object.transform_apply(location=True, rotation=True, scale=True)
```

Step 2: Set the bake to "Tangent" space. In Properties → Render → Bake, set *Space* to Tangent (not Object or World). This is the default, but double-check.

Step 3: Triangulate before baking. Mikktspace is defined on triangles. Blender auto-triangulates during bake, but the triangulation during baking must match the triangulation during export. Add a Triangulate modifier (Method: Fixed, or Beauty) *before* exporting, and do not apply modifiers mid-pipeline without re-baking.

Step 4: Consistent UV seam placement. Place UV seams at hard edges (edges where the mesh has a sharp edge split). This ensures the tangent frame discontinuity at the UV seam coincides with the geometric discontinuity, hiding the transition.

Setting Up Correct Mikktspace Baking in Blender — illustrated

Exporting and Verifying in Unity, Unreal Engine 5, and Godot 4

Correct baking is only half the battle. The export and import settings must preserve the tangent data.

GLB / GLTF export from Blender: Use the built-in GLTF exporter. Under *Geometry*, enable Apply Modifiers and set Tangents to Include if your target engine needs precomputed tangents. For most engines, letting the engine compute tangents from the Mikktspace algorithm at import is fine — but if you see seams only in one engine and not another, forcing tangent export can resolve discrepancies.

Unity: Unity recomputes tangents at import using Mikktspace by default. In the mesh import settings, set *Normals* to Import (not Calculate) and *Tangents* to Calculate Mikktspace. If you set Tangents to *Import*, Unity uses whatever tangents are in the file; if the exporter wrote non-Mikktspace tangents, seams will appear.

Unreal Engine 5: UE5 computes tangents at import via its own Mikktspace implementation. No extra settings are required. The most common mistake is importing with *Recompute Normals* enabled — this discards your baked normal map data entirely. Leave normals set to *Import Normals and Tangents*.

Godot 4: Godot 4's `StandardMaterial3D` uses Mikktspace by default. When importing a GLB, Godot recomputes tangents if none are present. If you see seams after import, open the mesh import settings, enable *Force Generate Tangents*, save, and reimport.

Common Pitfalls and How to Fix Them

Here's a checklist of the most common Mikktspace-related baking failures and their fixes:

Getting Mikktspace right is a one-time investment. Once your pipeline consistently uses the same tangent basis — Blender bake → GLB export → engine import — normal maps just work, seam-free, across Unity, Unreal Engine 5, and Godot 4.

Need game-ready assets with clean UVs, correct tangent space, and baked normals already applied? Browse the BitSoul marketplace for hundreds of verified, engine-ready models in GLB and FBX format. Every asset on the BitSoul marketplace is tested for Mikktspace compatibility so you can drop it straight into your project without re-baking.

Tags: blender normal-maps tangent-space baking game-assets unity unreal-engine-5 godot

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models