Getting Perfect Bakes In Blender

When I started learning about baking in Blender for the first time, I was so excited. I had followed this tutorial that I found on Youtube, where the tutor was adding some details into the default cube, and adding another default cube to the scene and transferring aka “baking” the data from the first cube to the lower poly cube.

It was a very simple tutorial and it had worked. It had gotten the message across. That was the whole point of the tutorial after all, wasn’t it? Well it had worked, until it didn’t.

A few remarks before we begin (Optional Read)

Have you ever gotten frustrated by your bakes? Were some parts of your low poly mesh looking weird after the process? Maybe there were some streches here and there? When you opened your normal map, you encountered those yellow marks. Perhaps you googled things like “How to stop texture stretching in Blender when baking normal maps?” or “How to get rid of yellow artifacts / black artifacts after baking”. Some of the methods you found in those tutorials possibly worked and some did not...

Today, I want to demonstrate (in my opinion) the perfect way to bake details to normal maps in Blender. In a lot of tutorials, instructors use basic shapes to show the fundamentals of baking process, which is understandable considering that they want to keep the process easy and simple to understand. But the problem with this method is, they make themselves indirectly overlook a very important problem. Let me explain it this way:

They put themselves in an environment where they won’t be able to replicate the issues that I assert and claim that almost every new Blender user will face when transfering high poly data to a low poly mesh.

With this tutorial, I hope that I will put an end to this “My baked normals look weird” closed loop.

Lazy Loaded Image

Your advertisement can be placed here for $200 permanently. Suggested resolutions: 1800x663 or 1400x1400. Contact us.

How to bake details to a normal map in Blender in the perfect way

Note: If you are tired of watching video tutorials and would like to see more text-based tutorials like this one from me, you can support me on Patreon so I can dedicate more time to creating them.

Lazy Loaded Image

My High Poly Mesh

As you can see here on my screen, I have my high poly mesh. A few important things that I want you to pay close attention to are:

  • My model is adjusted to real world scale.
  • My 3D cursor is placed at the world origin, so as my mesh.
  • I applied “All Transforms” (Shift + A => All Transforms) in object mode.
  • I recalculated my normals already. (Ctrl + N, in edit mode)

Let’s activate the “Face Orientation” feature from the overlays window.

Lazy Loaded Image

Despite the fact that I had calculated my normals, we still have some faces facing the wrong direction.

Clearly we got a problem here. If you are not familiar with how normal face orientation works, blue color represents the faces that face outside and the the faces highlighted with red color tell us that these parts facing inside.

We want all of our outer parts of the mesh to be blue.

So the lesson we should learn here is that even though we apply all of our transforms to our mesh, set the origin at the center, calculate the normals, we can still get miscalculations and due to this mistake margin, our bakes might bring in artifacts with them.

Fixing The Normals (Optional Stage)

I labeled this area as optional stage because I will be using an external plugin that gives me a cleaner looking workspace to retopologize my high poly mesh. And this plugin needs to read my mesh’s normal directions to work properly. If you are using a plugin with similar workflow, I suggest fixing your normals first as I am about to do here.

If you are using Blender’s default tools to retopologize, you can skip this entire section.

PS: I won’t be diving into re-topologizing or UV-unwrapping in this post. My assumption is you already know how to do these actions since you want to learn about baking. If you don’t know how to do them, I suggest learning them thoroughly first and come back to this post later.

Lazy Loaded Image

Flipping Normals

In edit mode, I select the faces appear red and flip the normals. To bring up the “Normals” window, I press the Alt + N keys at the same time and select the “Flip” option. I will repeat this action until there is no red area appears on the screen anymore.

Some Notes (Optinal Read): Unfortunately there is no built-in feature that could help us to select all of the red marked areas therefore we’ll need to do this action manually. You might try the method of “Select (This button is placed at the top right corner of the screen, next to “View” and “Add” buttons > Similar and then press “Alt + N” to bring up “Normals” window > Flip” but sadly, based on my experience this method does not work properly 90% of the time. You do not need to make everything appear blue by the way. As long as there is not a huge area marked in red color, it should be good to go.

Lazy Loaded Image

Fixed Normals

Preparing The Low Poly Mesh For Baking

Lazy Loaded Image

Preparing The Low Poly Mesh For Baking

If your mesh will appear in the distance, it’s okay to keep it very low poly. If it’s going to be relatively close to the camera, I suggest bringing up the poly count of your mesh a little bit higher. The reason behind this suggestion is that polycount of our low poly mesh has direct impact on how “good” our bake will look on our low poly mesh.

The mesh I am displaying here is going to be far away from the camera. Not too far but distant enough to get away with its low poly count.

While retopologizing, please make sure of that you place more faces on the areas where there are a lot of details in your original mesh. As I underlined above, polycount has an impact on how “sharp” our details appear across the surface of our low poly mesh.

When I’m done with retopologizing, I always make sure of that there is no ngons or triangles in my mesh. First, I start with smoothing my mesh. Then I switch to Edit mode (make sure nothing in your mesh is selected) “Select > Select All by Trait > Faces by Sides” to check if there is any ngons or triangles in my mesh.

Lazy Loaded Image

“Select => Select All by Trait => Faces by Sides” to check Ngons and Triangles

After that, I am unwrapping my low poly mesh.

Lazy Loaded Image

Unwrapping the low poly mesh

Make sure of that there is no streching. Try to get as straight UVs as possible. Streched UVs is one of the major reasons why you might be getting a “bad” bake.

Preparing The High Poly Mesh For Baking

Lazy Loaded Image

Preparing The High Poly Mesh For Baking

Now, I’ll hide my low poly mesh and select my high poly one. I’ll “Smart UV Project” it. I am using the default values for this method.

  • Angle limit: 66
  • Island Margin: 0.000
  • Area Weight: 0.000
  • Correct to Aspect: Checked
  • Scale to bounds: unchecked

After the unwrapping action is done, I will turn on my face orientation again and check for normal directions.

Lazy Loaded Image

Incorrect Face Orientations

And we have some faces facing the wrong direction here. If you did not read the optional part above: The color blue means these faces are facing outside. Red color means those faces facing inside.

Outer parts of our mesh should always be in blue. I’ll select the faces marked in red and flip them. To do this, you can bring up the “Normals” window by pressing “Alt + N” keys at the same time in “Edit Mode” and then select the “Flip” option. After this action, selected faces should appear in blue. To make the process a bit easier, I switch to “Circle Selection” by pressing “C” key in edit mode.

When I am done, I’ll switch back to “Object Mode” and check both of my low and high poly meshes’ normals one more time just to make sure of that everything is in order.

Important Note: Faces not pointing in the correct direction is the reason why your bakes might be appearing in black after the baking in Cycles.

The Baking

Lazy Loaded Image

Low and high poly meshes should be intertwining.

In object mode, make sure of that your high and low poly meshes are nested together. Then we can go to the material editor and give both meshes the same material. I’ll make an image texture node pop up there and create a new texture.

A very important thing is, size of the texture we are about to create has a great influence on the details of our bake. In other words, lower texture resolution => blurry outlines, higher texture resolution => sharper outlines

When deciding about the texture’s resolution, think of where this mesh is going to be used. Does it need to contain a lot of details? Will it be on the screen all the time? And other things that have effect on your resource usages.

I’ll be naming this texture as “normal_bake_base”. You can name it however you wish. After the texture is created by Blender, make sure of that it is set to “Non-Colour data” since normals maps contain non-color data.

Lazy Loaded Image

Non-Colour Data option in “Image Texture” node

Do not plug any pin to anything at this stage. Leave everything as it is. If we connect them to the master shader, Blender will throw the error of “Circular dependency” and it’ll ruin our bake.

After the material setup is done, in object mode,

select your high poly mesh first

, then the low poly mesh. Make sure of that you are using “Cycles” as render engine. Scroll down until you find the area labeled as “Bake”.

Lazy Loaded Image

“Bake” category in Cycles.

Set the bake type to “Normal”. We’ll activate the “Selected to Active” option since we are transferring the data of high poly mesh (selected) to our low poly mesh (active). You can tweak the extrusion settings but usually 0.1 and 0.5 values work for me the best.

Extrusion option decides how much of the high poly mesh should be extruded so the details can be reflected across the surface of our low poly mesh. If you did a good job on re-topologizing, the scale gap in between these two objects should not be huge so that the values I provided above should work in more than most cases. But if you encounter an issue, the reason might be the dimension differences between high and low poly meshes so it’s always good to know what this option is doing.

Max. Ray distance option is there to tell Blender from which point to start the baking action over the low poly mesh. I don’t want to dive into the details too much since the post already became very long but I suggest reading the documentation even though there is not a lot of details about it there, if you’d like find out more about it. If you guys would like to know more about it, please leave a comment so depending on the volume, I might write a separate post about it.

After the baking is done, we can connect our pins as usual and adjust the strength of our bake.

Lazy Loaded Image

Do not forget to go to “Image Editor” and save your image since Blender does not automatically save generated images.

And that’s it. I hope everything was clear. As usual, if you have any questions or want to add something, feel free to contact me!