Skip to content

Commit 6a0be7d

Browse files
committed
tweak punctuation and phrasing
1 parent 7b14b8d commit 6a0be7d

File tree

1 file changed

+19
-19
lines changed
  • blog/2025/2025-05-09-blender-baking

1 file changed

+19
-19
lines changed

blog/2025/2025-05-09-blender-baking/index.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ authors: ['jaked']
77
tags: ['blender', 'baking', 'normal-maps', 'article', 'tutorial', 'showcase']
88
---
99

10-
Real time rendering performance is often limited by 3D assets as much as it's limited by code. Good low poly assets inevitably rely on baking, the process of transferring details from a high poly mesh with a complex material to a low poly one with a much simpler material. Unfortunately however there seems to be a lack of info regarding baking around, especially in Blender things can sometimes be a bit intuitive regarding baking. In the process of working on my game, A Short Odyssey, I came up with a workflow that works quite well for me, so I will share it with you today.
10+
Real time rendering performance is often limited by 3D assets as much as it's limited by code. Good low poly assets inevitably rely on baking, the process of transferring details from a high poly mesh with a complex material to a low poly one with a much simpler material. Unfortunately however, there seems to be a lack of info regarding baking around, especially in Blender things can sometimes be a bit unintuitive regarding baking. In the process of working on my game, A Short Odyssey (ASO), I came up with a workflow that works quite well for me, so I will share it with you today.
1111

12-
For this tutorial we are going to use this wooden bowl model from the fantastic website [Polyhaven](https://polyhaven.com/a/wooden_bowl_02)
12+
For this tutorial we are going to use this wooden bowl model from the fantastic website [Polyhaven](https://polyhaven.com/a/wooden_bowl_02).
1313

1414
![Bowl Rendered](bowl-rendered.webp)
1515

1616
<!-- truncate -->
1717

18-
As with all of the free CC0 models on Polyhaven this mesh has a fairly high number of small triangles, 4,666 to be exact, while that may not seem like a lot think about how big it is likely to be in a realtime scene. Most of the time the entire bowl might only be a few pixels tall! Especially given that small triangles are much more expensive than large triangles (due to quad occupancy) this is probably something we should deal with.
18+
As with all of the free CC0 models on Polyhaven, this mesh has a fairly high number of small triangles. 4,666 to be exact, while that may not seem like a lot think about how big it is likely to be in a realtime scene. Most of the time the entire bowl might only be a few pixels tall! Especially given that small triangles are much more expensive than large triangles (due to quad occupancy). this is probably something we should deal with.
1919

2020
![Small Bowl](small-bowl.webp)
2121

@@ -27,7 +27,7 @@ Open up your high poly model in Blender, I am using Blender 4.4, other versions
2727

2828
![High Poly Blender](high-poly-blender.webp)
2929

30-
You then will need a low poly version of the model. How create a low poly model is outside the scope of this tutorial, but it *must* be UV-unwrapped before proceeding and none of the polygons should be overlapping on the UV map.
30+
You then will need a low poly version of the model. How to create a low poly model is outside the scope of this tutorial, but it *must* be UV-unwrapped before proceeding and none of the polygons should be overlapping on the UV map.
3131

3232
![Low Poly Blender](low-poly-blender.webp)
3333

@@ -39,7 +39,7 @@ The first thing you need to do is make sure the high and low-poly models are dir
3939

4040
![Unit Scale](unit-scale.webp)
4141

42-
If it is not you can apply the scale with Ctrl+A -> Apply -> Scale, while the low poly object is selected in object mode.
42+
If it is not, you can apply the scale with <kbd>Ctrl+A</kbd> -> Apply -> Scale, while the low poly object is selected in object mode.
4343

4444
![triangulate](triangulate.webp)
4545

@@ -55,13 +55,13 @@ To create a linked duplicate, simply select your low-poly object and hit Alt+D,
5555

5656
![Outliner Names](outliner-names.webp)
5757

58-
I'm going to name the new object "Low Poly" and the first one "Bake Target" (The names don't matter but it's nice to be organized)
58+
I'm going to name the new object `Low Poly` and the first one `Bake Target` (The names don't matter but it's nice to be organized).
5959

6060
![Object Data](object-data.webp)
6161

62-
This next part is very important, you must set the Bake Target to source it's materials from "Object" instead of "Data" this way the two linked objects can have different materials. This is done as shown above in the material tab for the Bake Target Object
62+
This next part is very important, you must set the `Bake Target` to source it's materials from "Object" instead of "Data". This way the two linked objects can have different materials. This is done as shown above in the material tab for the `Bake Target` Object
6363

64-
You can then create a material for it which I will also call "Bake Target", I will also create a new material for the "Low Poly" object and call it "Low Poly"
64+
You can then create a material for it which I will also call `Bake Target`, I will also create a new material for the `Low Poly` object and call it `Low Poly`.
6565

6666
# Setting up Materials
6767

@@ -71,19 +71,19 @@ The rest of this process will be done in the shading tab so we can switch there.
7171

7272
![Material Nodes](material-nodes.webp)
7373

74-
With the bake target selected we will add 3 texture nodes to it's material. Because I'm doing PBR these will be Albedo, Normal & Roughness (I will get into metalness later in this tutorial). These texture nodes should have their colour space set to "sRGB" for the Albedo and "Non-Color" for the others. You should NOT connect these nodes to anything.
74+
With the bake target selected we will add 3 texture nodes to it's material. Because I'm using a PBR workflow, these will be Albedo, Normal & Roughness (I will get into metalness later in this tutorial). These texture nodes should have their colour space set to "sRGB" for the Albedo and "Non-Color" for the others. You should NOT connect these nodes to anything.
7575

7676
![Pasted Nodes](pasted-nodes.webp)
7777

78-
You can then copy & paste these nodes into the material for the "Low Poly" object. Then connect the nodes like shown here.
78+
You can then copy & paste these nodes into the material for the `Low Poly` object. Then connect the nodes like shown here.
7979

8080
![Invert Green](invert-green.webp)
8181

8282
If you use DirectX style normal maps (Like I do in ASO), you will need to add an "RGB Curves" node with the green channel flipped in order to invert the green channel of the normal map.
8383

8484
![Weird Shiny](weird-shiny.webp)
8585

86-
Your low poly will look weird and shiny, that is because our baked textures are all black at the moment, that is OK, it will look correct after we are done baking.
86+
Your low poly will look weird and shiny, that is because our baked textures are all black at the moment, that is OK. It will look correct after we are done baking.
8787

8888
Now that everything is set up, we can start looking at the actual baking UI.
8989

@@ -103,13 +103,13 @@ Expanding the bake controls will give you access to several new options.
103103

104104
![Normal Baking](normal-baking.webp)
105105

106-
We will start by baking the normal map. To do so we must first select "Normal" from the Bake Type combo box. You will also want to check "Selected to Active". For users of DirectX style normal maps like myself you will also need to set the G channel to "-Y". If you are using OpenGL style normal maps you can leave it as is.
106+
We will start by baking the normal map. To do so we must first select "Normal" from the Bake Type combo box. You will also want to check "Selected to Active". For users of DirectX style normal maps, like myself, you will also need to set the G channel to "-Y". If you are using OpenGL style normal maps you can leave it as is.
107107

108108
# Performing the Bake
109109

110110
![Selected To Active](selected-to-active.webp)
111111

112-
Ok its finally bake time, select your High Poly asset then press Ctrl and select your Bake Target this sets the High poly as selected and your Bake Target as Active. If everything is selected correctly your outliner should look like the image above. With a dark orange highlight on the high poly object and bright orange for the Bake Target.
112+
Ok its finally bake time, select your High Poly asset then press Ctrl and select your `Bake Target` this sets the High poly as selected and your `Bake Target` as Active. If everything is selected correctly your outliner should look like the image above. With a dark orange highlight on the high poly object and bright orange for the `Bake Target`.
113113

114114
![Select Normal Node](select-normal-node.webp)
115115

@@ -125,7 +125,7 @@ After some amount of processing time, you should see a preview of the normal map
125125

126126
![Messed Up Bake Normals](messed-up-bake-normals.webp)
127127

128-
As you can see looking at our "Low Poly" object something is very off.
128+
As you can see looking at our `Low Poly` object something is very off.
129129

130130
![Extrusion And Max Ray Distance](extrusion-and-max-ray-distance.webp)
131131

@@ -149,7 +149,7 @@ If our values are set properly we get a nice normal map without any artifacts.
149149

150150
![Bumpy Bowl](bumpy-bowl.webp)
151151

152-
We can also now look at our "Low Poly" object and see that it looks nice and bumpy. But there is one tiny problem, It's far too shiny! This is because its roughness map is entirely black or 0.0, this corresponds to a mirror like shine. So of course our next step should be to bake a roughness map
152+
We can also now look at our `Low Poly` object and see that it looks nice and bumpy. But there is one tiny problem, It's far too shiny! This is because its roughness map is entirely black or 0.0, this corresponds to a mirror like shine. So of course our next step should be to bake a roughness map.
153153

154154
# Baking a Roughness Map
155155

@@ -163,7 +163,7 @@ Select "Roughness" for Bake Type and hit Bake again.
163163

164164
![Roughness Result](roughness-result.webp)
165165

166-
After waiting for the bake to complete we now have a roughness map and the shininess of our bowl now looks correct. Last but certainly not least we need to bake albedo, this is the actual surface colour of our object.
166+
After waiting for the bake to complete we now have a roughness map and the shininess of our bowl looks correct. Last but certainly not least we need to bake albedo. This is the actual surface colour of our object.
167167

168168
# Baking an Albedo Map
169169

@@ -177,7 +177,7 @@ We set the Bake Type to "Diffuse" this time, but there is one more thing before
177177

178178
![Bake Influence](bake-influence.webp)
179179

180-
In the below the bake button under "Influence" you must uncheck "Direct" and "Indirect", otherwise blender will bake the lighting into your albedo texture. Now we can hit Bake
180+
In the below the bake button under "Influence" you must uncheck "Direct" and "Indirect", otherwise blender will bake the lighting into your albedo texture. Now we can hit Bake.
181181

182182
![Complete Bake](complete-bake.webp)
183183

@@ -203,11 +203,11 @@ There is however one tiny consideration for metallic materials. For some reason
203203

204204
![Hatchet](hatchet.webp)
205205

206-
Lets use this hatchet as an example. You need to take the metallic parameter for the high poly mesh's material and hook it up to the *Emission Color* output
206+
Lets use this hatchet as an example. You need to take the metallic parameter for the high poly mesh's material and hook it up to the *Emission Color* output.
207207

208208
![Emission Colour](emission-colour.webp)
209209

210-
Because ASO packs roughness and metal together I'm gonna send both through the Emission color using a "Combine Color" node (Note ASO uses R = Roughness, G = Metal, this is different from glTF). All you do now is locate the correct texture in your Bake Target and instead of baking Metal and Roughness you bake using "Emission" as the bake type instead.
210+
Because ASO packs roughness and metal together I'm gonna send both through the Emission color using a "Combine Color" node (Note ASO uses R = Roughness, G = Metal, this is different from glTF). All you do now is locate the correct texture in your `Bake Target` material and instead of baking Metal and Roughness you bake using "Emission" as the bake type instead.
211211

212212
# Considerations for Mirrored Objects
213213

0 commit comments

Comments
 (0)