Abnormally Baking Normals
On beginner's mind, AI hallucinations, and learning Blender (also a tutorial, I guess)
I’m learning the Blender 3D modelling program as part of my current work transition from full-stack web developer to 3D web developer (with half-full stacks?)
Yesterday, I went into Blender to bake some normals: converting the details of a 3D model to a 2D image placed atop a lower detail (low-poly) version of the same model. This baked normal map is used to interact with lights in the scene, effectively detailing a low-poly model without the computational cost of excess geometry.
The Blender baking learning curve was painful. Not a nightmare, but one of those “what have I gotten myself into?” moments. The process seemed easy enough on paper. In practice, I was jumping between different panels and modes all the time, and it was all a bit bewildering to a beginner like me.
The Trumpian confidence of ChadGPT
I used my go-to rubber-duck/search-engine-replacement, ChatGPT, to walk me through the Blender bake steps. It was largely OK and came up with a pretty good step-by-step tutorial. With one hiccup.
At one point, the LLM was very confident that you could bake normals from a high-poly to a low-poly model, even if the models are far apart. This is horse doodoo. To bake normals, Blender casts rays from the low-poly model towards the high-poly model, so the models must be on top of each other. ChatGPT’s very confident hallucination cost me a significant amount of time. It also, and not for the first time, shook my confidence in the reliability of LLMs.
A good old-fashioned 33-second human-made video tutorial helped me resolve the issue, and I finally got my normals baked properly. And, to be fair, ChatGPT did guide me through most of the process. It just pooped itself that one time and was so confident that no pooping occurred that I started questioning my intuition.

The process took me all day, and I felt like a novice juggler given fireballs and thrown into a live busker show. No one got burned, but my ego sure took a hit.
How to bake normals in Blender
In case you’re wondering, here’s the Blender normal baking process I followed1.
ℹ️ I’m using Blender 4.4 here.
Meshes and UV unwrapping
Create two meshes (two objects) that have the same basic size and position.
Leave one mesh as low-poly and add your details to the other, high-poly mesh.
UV unwrap the low-poly mesh and, in the UV Editing panel, name your texture image something like “NormalMap”.
⚠️ Make sure you’re in Edit mode when working on the UVs, and in Object mode for all other steps. Otherwise, you might krangle things.
Material
In the Shading editor, with the low-poly mesh selected, assign a new material.
Add an Image Texture node and set its linked image to the “NormalMap” you created above. Set the Color Space to Non-Color.
Add a Normal Map node and link the Color output of the Image Texture you just added to the Color input of the Normal Map node. ✋ Don’t connect the Normal Map output to anything yet (it can mess with the bake later).
Click the Image Texture node you added earlier and make sure it has a white outline. This designates the texture as the bake target.
Baking
In the Layout panel, select the high-poly object, then Ctrl + Click on the low-poly object (order matters here: you want the high-poly object selected and the low-poly object active).
In the Render Properties panel, make sure you have Cycles selected as the Rendering Engine.
Go down to Bake and set the Bake Type as Normal and Space as Tangent.
Check Selected to Active, unfold it to see its suboptions, and set Extrusion to
1.0
.Under Output, make sure the Target is Image Textures.
Click the Bake button.
If all went well, you should see a message saying, “Baking map saved to internal image, save it externally or pack it”.
Viewing the bake
Heed the call: Return to your UV Editing panel and save the image to a file.
Go to the Shading panel and connect the Normal Map output to the Principled BSDF Normal input.
Now, if you select either Material Preview or Rendered in the Viewport Shading options near the top of the window, you should see the low-poly model with your newly baked normal map.
Some gotchas
If you see a “Circular dependency” warning when you bake, you may have left your Normal connected to the Principled BSDF. This trips Blender up, so it’s a good idea to disconnect the Normal from the Principled BSDF node when baking. Remember to connect it afterwards, though.
It’s probably a good idea to hide your high-poly model when previewing your baked normals. Otherwise, you risk confusing your high-poly geometry with the low-poly normal map.
If you’re not seeing all your high-poly geometry bake to your normal map, try exaggerating your high-poly bevels, insets, grooves, etc. You can also try fiddling with the Bake settings, specifically Extrusion or Max Ray Distance, or using a custom Cage object.
Exporting to GLTF
I’m working on a three.js WebGL project, so I wanted a GLB (GLTF) export from Blender. If you’re doing the same, take care of the following to get your normal map exporting correctly.
Add a Triangulate modifier to each object you’re exporting.
In the export settings, under Mesh, check Apply Modifiers, Normals, and Tangents.
Triangulating your meshes allows Blender to generate the tangent data needed at export time. Otherwise, three.js has to calculate this data at runtime.
Annotated version
To get the bake working took me all day. So like I mentioned earlier, this whole experience left me with a bit of a crisis of confidence. I’ve been thinking, “If I can’t do something as simple as baking a normal map without this much trouble, how can I ever hope to work in this field?”
Writing out the previous tutorial—which was not my intention when I sat down to write this post, by the way—I can see that it’s an involved process. I’m glad I wrote it all down for future reference.
I suppose I have some deeply held assumptions I can question. I believe I should learn things quickly. I did well at school for a period, and I think it got to my head. I’m embarrassed to admit that a family member once called me a “genius”. Of course, that’s an image I like to cleave to. But I don’t know that a label like that is useful or even accurate.
I guess I like seeing myself as smart and quick to proficiency. Without this often-held image, my deeply held belief that I am worthless begins to emerge. This is likely where a lot of my stress is arising from. Yet things take as long as they take. Proficiency in complex tasks comes with time and practice.
So here’s my mantra: Learn to be a beginner, to be OK with not knowing. To enjoy the process and let go of the outcome.
Who knows?
Please feel free to correct my Blender bake normals recipe in the comments.