Rig Bake

Bake a normal map

Bake high-poly detail into a normal map (and ambient occlusion) for a light version of the model — the xNormal workflow, in your browser. Drop one heavy model, or add your own low-poly and the maps bake onto its UVs. No upload, no account, no file size limit.

More than one file?

Batch processing runs this exact tool over a whole folder and hands back one zip — no file limit, still nothing uploaded.

What it does

The classic detail bake every desktop pipeline runs in xNormal, Marmoset Toolbag or Substance: the detail your low-poly cannot afford to carry as geometry is recorded into a texture instead, so the low-poly renders like the high-poly. It runs on your GPU, which is why a full 4K bake takes seconds rather than minutes.

Ambient occlusion is baked in the same pass, against the full-resolution high-poly rather than an approximation of it. Both maps come back inside a ready-to-use GLB.

Before a single ray flies, the model doctor runs with its fixes applied: wrong scale, broken bind poses and clearly inside-out meshes are repaired first — an inverted mesh would fire its bake rays the wrong way — and the full diagnostic report ships with the result.

One file, or two

Drop just your heavy model and the page makes the low-poly for you: it decimates to the fraction you choose (the same reduction as the reduce polygons page, so UVs, materials and skin weights survive), then bakes the detail the decimation removed back in as a normal map. A 400,000-triangle Meshy sculpt keeping 5% of its triangles plus a baked normal map is visually very close to the original — at a twentieth of the render cost.

Or bring your own retopologized low-poly as the second file: the maps then bake onto its UVs. The two models must sit on top of each other in space — same scale, same origin, exported from the same scene — because the bake works by matching the low surface to the high one point for point. If your low-poly has no UVs yet, it gets unwrapped automatically first.

Why it shades the same in every engine

The output GLB carries the bake’s own tangent frame as a TANGENT attribute, per the glTF spec. That pins the decode to the encode: Blender, Unity, Godot and three.js all reconstruct the same shading instead of guessing their own tangents against a bake they never saw.

When the low-poly is the decimated copy, its UVs are unchanged — so if your model already shipped a normal map, that texture-level detail is carried into the bake rather than silently dropped.

What it does not do

There is no cage editing — the search distance is measured for you, from how far each surface actually moved when it was simplified. Curvature, thickness, height and bent-normal maps are not baked (yet). Ambient occlusion bakes at up to 2048 px, which is more than a map that soft has any use for.

A bake cannot rescue two models that do not overlap in space. The result reports how much of the surface actually found the high-poly — if that number is low, fix the alignment and run again; the page is free and takes seconds.

How to use it

  1. Drop your high-poly model into the box above — .glb, .gltf, .fbx, .obj and more.
  2. Either pick what fraction of triangles the generated low-poly should keep, or drop your own low-poly in the second slot.
  3. Choose the map resolution and whether to bake ambient occlusion too.
  4. Press Bake maps. Everything runs on your GPU, in this tab — nothing is uploaded.
  5. Check the “surface matched” number, then download the GLB with the maps inside.

Questions

Is my model uploaded to a server?

No. The whole bake runs on your own GPU, in this tab. The files never leave your machine.

Do I need to make a low-poly first?

No. Drop one file and the page decimates it for you, then bakes the removed detail back as a normal map. Bring your own low-poly only if you have proper retopology you want the maps on.

Why does my baked model shade correctly in one engine and oddly in another?

Usually a tangent-frame mismatch — a map encoded with one tangent basis and decoded with another. This bake avoids that by writing its own tangent frame into the GLB as a TANGENT attribute, which glTF consumers are required to use. If you re-export the model through another tool, keep the tangents.

The “surface matched” number is low. What went wrong?

Much of the low-poly found no high-poly surface within reach, which almost always means the two models do not sit on top of each other — different scale, different origin, or different orientation. Export both from the same scene without moving either, and bake again.

Can I bake from a model with its own normal map?

Yes. On the one-file path the decimated low-poly keeps the original UVs, so the model’s existing normal map still applies — its detail is blended into the baked map instead of being lost. On the two-file path only geometric detail transfers, because your low-poly has different UVs.

Does it work on rigged characters?

Yes — on the one-file path the decimated low-poly keeps its skeleton and skin weights, and the maps bake in the bind pose. The output GLB still animates.

How is this different from the quad remesh page?

Quad remesh rebuilds the topology into clean quads and re-bakes the existing textures onto the new surface. This page keeps (or takes) a low topology and bakes new geometric detail — normal and occlusion — from the high-poly. For a character that deforms, remesh first for edge flow, then bake detail here with the remeshed model as your low-poly.

Why GLB and not separate PNG files?

The GLB carries the maps already wired to the material and the tangent frame they were encoded in — drop it into an engine and it just works. Need the raw images? Any glTF tool (Blender included) extracts the textures from a GLB in one step.

The other tools