Normal Map Baker: High Poly to Low Poly
Drop your detailed high-poly and your game-ready low-poly with UVs. The baker casts a ray from every pixel of the low-poly texture to the high-poly and writes the surface detail into a tangent-space normal map, with an optional ambient occlusion map. Free, private and with no install.
How to bake a normal map
- 1
Load the high-poly
Drop the detailed model (sculpt, scan or subdivided mesh) as GLB, OBJ, FBX, STL, PLY, DAE, 3MF or 3DS.
- 2
Load the low-poly
Drop the simple, UV-unwrapped mesh in the same position and scale. No UVs? Unwrap it first.
- 3
Pick distance and format
Set the ray distance so the rays reach the detail, choose OpenGL (Y+) or DirectX (Y-) and a map size.
- 4
Bake and download
Check the lit 3D preview, then save the normal map (and AO map) as PNG at 512, 1K, 2K or 4K.
OpenGL or DirectX: which one your app needs
The two formats differ only in the green channel: OpenGL (Y+) has green pointing up, DirectX (Y-) has it pointing down. With the wrong one, bumps look like dents under the light. You can switch after the bake; the map flips without baking again.
| Blender | OpenGL (Y+) |
|---|---|
| Unity | OpenGL (Y+) |
| Godot | OpenGL (Y+) |
| three.js, glTF / GLB, Sketchfab | OpenGL (Y+) |
| Maya | OpenGL (Y+) |
| Unreal Engine | DirectX (Y-) |
| 3ds Max, CryEngine | DirectX (Y-) |
| Substance 3D Painter | Either (DirectX by default; set it in the project) |
What happens in a bake
| UV mapping | Every pixel of the map is matched to the point of the low-poly that sits on it in the UV layout. |
|---|---|
| Ray cast | From that point, pushed out by the ray distance (the cage), a ray goes inward along the low-poly normal and finds the high-poly surface. |
| Tangent space | The high-poly normal is written relative to the low-poly surface (tangent, bitangent, normal from the UVs), so the map works on a moving, deforming mesh. |
| Ambient occlusion | Optional: from each hit, rays go out over the hemisphere and the share that is blocked darkens grooves and corners. |
| Seam padding | Each UV island is grown outward by a few pixels (4 at 512 up to 32 at 4K), so mipmaps do not pull the flat background into the seams. |
Good to know
- The low-poly needs a UV map with islands inside the 0 to 1 square. Overlapping or mirrored islands bake, but they share the same pixels.
- Both models must be in the same place at the same scale, as exported from one scene. The baker does not move or align them.
- High-poly up to about 2 million triangles on a desktop. On a phone, more than 500k triangles may be slow or run out of memory.
- The 3D preview uses the same tangent frame as the bake, so it shows what you get. Another app that rebuilds tangents its own way (MikkTSpace) can show faint shading lines on very low-poly smooth meshes; hard edges with split UVs avoid that.
- Nothing is uploaded: the models are read and baked on your device. Close the tab and they are gone.
Retopo, bake, texture: the whole low-poly pipeline
Make the low-poly with AI retopology, bake the high-poly detail here, then paint the colour with AI. The baker is free; the AI tools use credits.
Only have a photo, not a high-poly? Make a normal map from an image instead.