Free · runs in your browser · nothing is uploaded

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.

Loading the baker...

How to bake a normal map

  1. 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. 2

    Load the low-poly

    Drop the simple, UV-unwrapped mesh in the same position and scale. No UVs? Unwrap it first.

  3. 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. 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.

BlenderOpenGL (Y+)
UnityOpenGL (Y+)
GodotOpenGL (Y+)
three.js, glTF / GLB, SketchfabOpenGL (Y+)
MayaOpenGL (Y+)
Unreal EngineDirectX (Y-)
3ds Max, CryEngineDirectX (Y-)
Substance 3D PainterEither (DirectX by default; set it in the project)

What happens in a bake

UV mappingEvery pixel of the map is matched to the point of the low-poly that sits on it in the UV layout.
Ray castFrom 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 spaceThe 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 occlusionOptional: from each hit, rays go out over the hemisphere and the share that is blocked darkens grooves and corners.
Seam paddingEach 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.

Frequently Asked Questions

Baking copies the surface detail of a high-poly model onto a low-poly one as a texture. For each pixel of the low-poly UV map, the baker finds the matching spot on the high-poly and stores its surface direction as a colour. In a game engine the low-poly then lights up as if it had all the small detail, at a fraction of the triangles.
It is free with no signup, and nothing is uploaded. The models are read and baked inside your browser by a Web Worker on your own device, and the PNG files are saved straight from the page.
Use OpenGL (Y+) for Blender, Unity, Godot, Maya and glTF / three.js. Use DirectX (Y-) for Unreal Engine and 3ds Max. Substance 3D Painter can use either. If the bumps look like dents, you have the other one: switch the toggle and download again; it does not need a new bake.
It should be a bit larger than the biggest gap between the two surfaces. Start at the default 3% of the model size. If the map has holes (pink in the 2D view with "Show ray misses" on), raise it. If detail from another part of the model shows up, for example across a thin gap or between fingers, lower it.
The normal map is an image laid over the low-poly through its UV map, so the baker needs that layout to know which pixel belongs to which part of the surface. A mesh without UVs has nowhere to bake to. Unwrap it first (for example Smart UV Project in Blender) and load it again.
Common causes: the two models are not in the same position or scale; the ray distance is too small (holes) or too large (wrong surface); UV islands overlap; or the low-poly has smooth normals over a hard 90 degree edge. Split the UVs at hard edges and mark them sharp, then bake again.
Yes. Tick "Also bake ambient occlusion" and the baker writes a second PNG with soft shadows in grooves and contact areas, from the high-poly detail. It is slower because it casts about 20 extra rays per pixel; AO distance sets how far a crease can be shadowed from.
No. This baker needs two 3D models and transfers real geometry from one to the other. The normal map generator makes a normal map from a single photo or texture image by guessing depth from the picture. Use the baker when you have a high-poly model, and the generator when you only have an image.
The high-poly can be GLB, OBJ, FBX, STL, PLY, DAE, 3MF or 3DS. The low-poly can be GLB, OBJ, FBX, PLY or DAE, since it needs UVs (STL has none). Files up to 100 MB. The maps are 8-bit PNG files at 512, 1K, 2K or 4K (4K on desktop).