Creating normal maps from a high resolution model is a common task in a game developers work flow. It can add an extra level of detail that otherwise would be impossible within a game environment. Today I will be showing you how to create normal maps in Blender 2.5. The process used to do this is called “baking”, it enables us to project all of the detail from a high resolution model onto a low resolution, or lowpoly game model to create the normal map. This is a relatively painless process that can be done quite quickly once you have the know-how. Let us begin!

Note: Normal map baking requires a recent version of Blender 2.5, which can be downloaded from http://graphicall.org for all operating systems. Baking is broken in the official Blender 2.5 alpha 2 release.

Part 1 – Preparing the models

The first step to creating normal maps, is to prepare the models. This primarily involves UV unwrapping the lowpoly model. Before doing that, though, let’s take a look at the models we will be using today in figure 01-02:
01

Figure 1
02

Figure 2

As you can see, we have a highpoly model of a statue, with a large amount of detail, much more than could feasible be used in a game. Then we have a lowpoly version of the same model. To bake the normal map, we must first unwrap the UVs for the lowpoly (the highpoly has no need for UVs and may be left as is) then we need to assign a blank image to those UVs that will become the normal map.

To unwrap the lowpoly: enter Edit Mode by pressing TAB while the lowpoly model is selected

2. Select the vertices shown in figure 3 then press CONTROL + E > Mark Seam

3. Repeat this step for the vertices in figure 4, ensuring the selection starts at the previous seam and continues all the way down to the bottom of the model.

03
Figure 3

04
Figure 4

You should now have all of the necessary seams placed to cleanly unwrap the model:

Select all of the vertices that make up the model by pressing A (you may need to press it twice if you previously had anything selected) then press U > Unwrap

2. This will unwrap the UVs of the model, to see them switch your viewport window time to the UV/Image Editor as displayed in figure 6

05
Figure 5

06
Figure 6

07
Figure 7

You now need to add a new image to the UVs simply by pressing the “New” button. If you need to adjust the size of the newly created image immediately press F6 and modify as needed.

Part 2 – Baking the normal map

Let us now bake out the normal map by switching back to the 3D View and then going to the Render Properties:

First select the highpoly model with RMB then select the lowpoly model with SHIFT + RMB

2. Toggle down the “Bake” options under the Render Properties

3. Change from “Full Render” to “Normals”

4. Switch from “Camera” space to “Tangent” space

5. Ensure “Selected to Active is checked

6. Press “Bake”

Upon completion of the bake, you should see the normal map displayed in the UV/Image Editor.

08
Figure 8

09
Figure 9

10
Figure 10

11
Figure 11

12
Figure 12

That is all it takes to bake normal maps! It is really quite simple, Blender does most of the work for us. However, in order to really see the fruits of our labor we are going to take it a step further so we may view normal map in real time.

Part 3 – Viewing the normal map in real time

The way we are going to do this is by adding a material to the lowpoly model that will contain the normal map and tell Blender how to use it:

Begin by adding a new material to the lowpoly model, name it if you wish

2.Switch to the Texture panel and add a new Image texture

3. Select the normal map from the buffer as the image source

4. Check the “Normal Map” box and change the space type to “Tangent” from the default “Camera”

5. Change the Image Mapping type to UV

6. Uncheck the “Color” box under the “Diffuse category of Influence

7. And finally check the “Normal” box under the “Geometry” category of Influence

13
Figure 13

image014
Figure 14

15
Figure 15

image016
Figure 16

image017
Figure 17

image018
Figure 18

Now we are almost ready to see the normal map in action. All that is necessary now is to change the viewport rendering method over to GLSL for real time shading.

Press N while hovering your mouse over the Viewport to bring up the Viewport Properties

2. Scroll down to the “Display” category and change the “Shading” method to “GLSL”

3. Select the highpoly model and press H to hide it, allowing us to see the lowpoly model properly

4. Press ALT + Z to turn on GLSL shading

image019
Figure 19

image020
Figure 20

You should immediately see a result. If everything is correct, you should see the normal map applied to your lowpoly model in real time. Be sure that you have at least one light in your scene or you will not see anything. Speaking of which, if you move the light around in your scene you will see the lighting change on your model. The normal map is being displayed in the viewport just as if it were in a game.

That is it! You have now baked a normal map in Blender 2.5. Once you have become accustom to the process, it can be done in under five minutes. This is a very useful feature and works remarkably well. If you find your normal map are receiving artifacts then it may be necessary to tweak some of the settings under the Bake panel. I will not get into that today. For the time being, enjoy and happy baking!

image021

Figure 21

image022

Figure 22

image023

Figure 23

You must be logged in to upload images. Register

Discussion

43 Responses to “Normal Map Baking in Blender 2.5”
  1. dsoft81
    Posts: 2

    Hi Jonathan, Thanks once again for this great tutorial. It is kind of hard to follow the steps (bit confusing due to too figure) after baking the model. I know i am asking alot from you, but can we request a same as a video tutorial, which is way much easier to understand

    #
    1
    Jun 30, 2010 at 8:51 pm
  2. Shane
    Posts: 10

    The citizen download contains a docx file (two copies actually) not a pdf – I have had no luck converting it to anything that includes the pictures.

    #
    2
    Jun 30, 2010 at 9:38 pm
  3. haqzaf
    Posts: 51

    Hi, thanks
    Please check.
    Text on left side is not fit in the browser window.few letters from a word not visible througout the tutorial.
    I coppied complete web tutorial and paste it at my word document I can read the text in its entirety.I don’t know if it is my browser problem or it is on your side.

    #
    3
    Jun 30, 2010 at 9:40 pm
  4. Posts: 299

    Man – looks like this one is a mess… Let me rehook-up the download and check to make sure not a div tag isn’t causing trouble.

    #
    4
    Jun 30, 2010 at 9:55 pm
    • Posts: 299

      Okay – download updated to contain PDF and .blend. If you have a screen shot of what you are seeing with the text drop it over to wes@cgcookie.com and I will work to trouble shoot. I wasn’t able to repro the text on IE8, FF, or Chrome… but doesn’t meant it isn’t just hiding from me. :)

      #
      4.1
      Jun 30, 2010 at 10:06 pm
  5. Posts: 260

    looks fine on my end :P i’m using firefox 3.6.6

    #
    5
    Jun 30, 2010 at 10:07 pm
  6. haqzaf
    Posts: 51

    Hi,Wes,
    I sent you an e-mail containing image, I captured from my browser. This is what I see.

    #
    6
    Jun 30, 2010 at 10:37 pm
  7. Santiago Moliterno
    Posts: 7

    Thanks a lot!! i´ve been waiting for this kind of tutorials for a long time, hope there is to be some more explaining the other maps, but this is great! thank you very much. Baking, Maps, and all those things are my weaker point in blender.

    #
    7
    Jul 1, 2010 at 12:33 am
  8. Daniel
    Posts: 13

    Aha! So it’s broken in the official release! No wonder I couldn’t get it working. Thanks a heap.

    #
    8
    Jul 1, 2010 at 6:05 am
  9. Animaticoide
    Posts: 6

    Cool, good information man. Yeah a Video tutorial would be much easier to follow and understand. I know, it takes a lot of work.

    Good Job.

    #
    9
    Jul 1, 2010 at 10:46 am
  10. Posts: 158

    the “bake” button has always frightened me and tutorials explaining the whats, whys, and hows are seemingly scant. i’m happy you have this topic in your tut library now.

    #
    10
    Jul 1, 2010 at 1:02 pm
  11. Posts: 4

    Thanks for this simple, but helpful tutorial on normal maps! I and I’m sure tons of other people were having quite a bit of trouble understanding this subject. Thank you :)

    #
    11
    Jul 1, 2010 at 1:31 pm
  12. Santiago
    Posts: 7

    Yes we did, hope there`s more to come on these subject.

    #
    12
    Jul 3, 2010 at 5:41 pm
  13. Posts: 299

    We are working to produce a video tutorial of this hopefully next week. :)

    #
    13
    Jul 3, 2010 at 5:54 pm
  14. Santiago
    Posts: 7

    Hope you get down to others texturing skills like specular maps, ambient oclussion, and other things that actually have no good tutoring around the net.

    Thank you Blender Cookie and Jonathan.

    #
    14
    Jul 5, 2010 at 5:49 pm
  15. Posts: 13

    when I bake my own mesh. I only get solid purple.

    #
    15
    Jul 9, 2010 at 8:58 pm
    • Posts: 1415

      If you are baking from one mesh to another be sure you have both meshes selected, with the lowpoly mesh being the primary selection. If only the lowpoly is selected you will get a solid purple bake as Blender is unable to retrieve any normal data.

      -Jonathan

      #
      15.1
      Jul 9, 2010 at 11:10 pm
      • Posts: 13

        thank you. Now I kinda feel like an idiot.

        #
        15.1.1
        Jul 10, 2010 at 10:20 am
      • Posts: 1415

        No need to feel like an idiot, it’s an easy thing to miss :)

        -Jonathan

        #
        Jul 10, 2010 at 11:18 am
      • Posts: 11

        ok so im doing this right (i think). but when it bakes it bakes all pixlated and weird im not sure how to describe it. its just not even close to looking like the high poly. there are like green triangles every where

        #
        15.1.2
        Nov 15, 2011 at 4:17 pm
      • Posts: 1415

        Can you send me a screenshot of the bake result?

        -Jonathan

        #
        Nov 15, 2011 at 4:24 pm
      • Posts: 11

        how would i do that? i have the screenshot, how do you wish i send it?

        #
        15.1.3
        Nov 15, 2011 at 4:44 pm
      • Posts: 1415

        http://pasteall.org works great!

        #
        Nov 15, 2011 at 4:58 pm
      • Posts: 11
        #
        15.1.4
        Nov 15, 2011 at 5:22 pm
      • Posts: 11

        uupp nevermind, i fixed it. it was a big problem with what else i had going on

        #
        15.1.5
        Nov 16, 2011 at 5:42 pm
  16. NinthJake
    Posts: 9

    Really nice tutorial Jonathan.

    On a side-note, where can I request tutorials? I have searched for some sort of contact page for (feels like) an eternity now.

    If I can make requests here I would like to see a tutorial/quick-tip on how to make a wireframe render in Blender 2.5

    Thanks a bunch ;)

    #
    16
    Jul 12, 2010 at 11:58 am
  17. Posts: 24

    Great Tutorial!

    I did run into a problem though. The normal map doesn’t line up properly along the seams that I made to when UV unwrapping.

    #
    17
    Jul 12, 2010 at 10:15 pm
  18. rafa
    Posts: 2

    please, do a video wich this tutorial, i don’t want do it here :( (and the tutorial of monkey dosent abord normalmaps…)

    #
    18
    Aug 9, 2010 at 5:59 pm
    • rafa
      Posts: 2

      correct –> “i COLDN’T do it here” (sorry my english!)

      #
      18.1
      Aug 9, 2010 at 8:25 pm
  19. J Rogers
    Posts: 1

    Thanks! I’ve had all kinds of troubles with normal baking in 2.5, now i can finally drop down to my low poly base models again in my scenes :D

    Some of them were getting far too complex lol…

    #
    19
    Aug 16, 2010 at 5:34 pm
  20. FreeMind
    Posts: 43

    You missed one step:
    Turn on “Normal map” in “Image sampling” submenu, otherwise GLSL won’t display the normal map.

    Can someone explain what do the “Image sampling” items do and why are they needed? why can’t Normal maps be displayed by default when you check “Normal map” in the “Influence” submenu?

    #
    20
    Aug 17, 2010 at 3:31 am
  21. shennanigans
    Posts: 1

    Hey guys i have been trying to figure this out for over a week now. I have only been using blender for about 2 months and have actually only been teaching myself 3d graphics for the same amount of time. I am not sure if this is a bug in blender or not but when i tried to bake with the split tab on automatic blender would freeze i had to switch the split tab to fixed and finaly it baked for me. Thanks for all the tuts everyone.

    #
    21
    Nov 18, 2010 at 8:10 pm
  22. Posts: 26

    Hey Jonathan I have a quick question. What exactly does GLSL shading do?

    #
    22
    Oct 8, 2011 at 2:28 pm
    • Posts: 1415

      It basically shows real time shading and materials within the viewport. It doesn’t detect Ray Tracing but allows you to see image textures, buffer shadows and other aspects of your scene right in the viewport or through the Game Engine.

      -Jonathan

      #
      22.1
      Oct 8, 2011 at 8:25 pm
  23. Posts: 25

    ahhhh brain hurts

    #
    23
    Oct 24, 2011 at 3:24 pm
  24. FilmReale
    Posts: 1

    Thanks for the great tutorial. I have one question though:

    Let’s say you bake your normal map, but then you also want to bake other maps like displacement and AO. How do you indicate to blender which texture you want to bake to?

    #
    24
    Nov 5, 2011 at 9:47 pm
  25. Posts: 9

    “No objects or images found to bake to”

    #
    25
    Dec 12, 2011 at 7:52 pm
    • Posts: 9

      This important topic REALLY needs a video tutorial. All I get is a black object. =[

      Thanks in advance.

      #
      25.1
      Dec 12, 2011 at 8:02 pm
    • Posts: 1415

      Hi Arn,

      Before baking you have to select all your UVs while the low-res model is in Edit Mode and assign a new image to them. Then you can bake.

      -Jonathan

      #
      25.2
      Dec 13, 2011 at 9:02 am
  26. Posts: 4

    I have a problem where the normal map just bakes as flat purple islands… why is the detail not baking properly? I’ve looked at the process in detail but can’t figure out what I’m doing wrong.

    #
    26
    Jan 7, 2012 at 6:15 am
    • Posts: 4

      Other objects seem to bake their normals to the low poly mesh, but the high poly mesh I derived the low from just bakes a flat normal map! argh…

      #
      26.1
      Jan 7, 2012 at 6:56 am
      • Posts: 4

        I found a hack workaround:

        I created a new object, then assigned the mesh data from my high poly to it. Then I baked with this new object and it worked!

        Weird, because the mesh data is the same data block, only the object data block is different. what on earth could be wrong?

        #
        26.1.1
        Jan 7, 2012 at 7:08 am
    • Posts: 4

      SOLVED: The render visibility of the High Poly somehow had been set to off. So it was not rendering its detail to the Low Poly.

      #
      26.2
      Jan 7, 2012 at 9:30 am

Leave a Comment