Home Technical Talk

Bump Vs Normal Maps

SuperSparkplug
polycounter lvl 9
Offline / Send Message
SuperSparkplug polycounter lvl 9
Lately while researching, I've noticed that bump & normal maps essentially seem to do the same thing, even though they look completely different. I was wondering, what is the difference between bump and normal maps? What does one do that the other doesn't?

Also, how does one go about making a proper bump map? I've done it a few times myself, but I've seen mixed results ranging from decent to flat out horrible.

Replies

  • low odor
    Options
    Offline / Send Message
    low odor polycounter lvl 17
  • joeriv
  • EarthQuake
    Options
    Offline / Send Message
    So theres really three things:
    1. Greyscale bump map
    2. Normal map generated from bump map
    3. Normal map baked from high poly mesh.

    1 and 2 are essentially the same thing at the end of the day. 3d engines/renderers can not render a "bump map" without first converting it into a normal map (if your renderer takes a grayscale bump map, it converts it to a normal map behind the scenes without any control over the conversion). Taking this into consideration, it is never a good idea to use a grayscale bump map. Converting it to a normal map yourself gives you full control over the conversion, which is a very good thing. Tools like nvidia's normal map filter, Xnormal's normal map filter, nDo2, Crazybump, knald, etc can be used to convert bump to normal.

    With that out of the way, a baked normal map is something completely different. Baked normal maps and bump maps/converted normal maps are in no way interchangeable. A baked normal map samples high resolution geometry and projects it down onto the lowpoly, to capture the details from the high res and display them on the low res. But not only details, it captures all of the vertex normal information as well which allows you to duplicate the smoothing of the highpoly mesh on the low poly mesh, essentially duplicating the look of the high on the low. A painted bump map can never do this, as a baked normal map contains all kinds of complex gradients/maths to account for the vertex normals (smoothing) of your lowpoly.

    Most people will use a combination of a baked normal map and a painted normal map, which allows you to add an extra level of detail for things like scratches, text, patterns, etc things that are complex to model in the high poly but easy to paint in photoshop. This gives you the best of both methods.
  • metalliandy
    Options
    Offline / Send Message
    metalliandy interpolator
    EarthQuake wrote: »
    So theres really three things:
    1. Greyscale bump map
    2. Normal map generated from bump map
    3. Normal map baked from high poly mesh.

    1 and 2 are essentially the same thing at the end of the day. 3d engines/renderers can not render a "bump map" without first converting it into a normal map (if your renderer takes a grayscale bump map, it converts it to a normal map behind the scenes without any control over the conversion). Taking this into consideration, it is never a good idea to use a grayscale bump map. Converting it to a normal map yourself gives you full control over the conversion, which is a very good thing. Tools like nvidia's normal map filter, Xnormal's normal map filter, nDo2, Crazybump, knald, etc can be used to convert bump to normal.

    With that out of the way, a baked normal map is something completely different. Baked normal maps and bump maps/converted normal maps are in no way interchangeable. A baked normal map samples high resolution geometry and projects it down onto the lowpoly, to capture the details from the high res and display them on the low res. But not only details, it captures all of the vertex normal information as well which allows you to duplicate the smoothing of the highpoly mesh on the low poly mesh, essentially duplicating the look of the high on the low. A painted bump map can never do this, as a baked normal map contains all kinds of complex gradients/maths to account for the vertex normals (smoothing) of your lowpoly.

    Most people will use a combination of a baked normal map and a painted normal map, which allows you to add an extra level of detail for things like scratches, text, patterns, etc things that are complex to model in the high poly but easy to paint in photoshop. This gives you the best of both methods.

    Just a small correction to your post EQ.

    Bumping directly from a heightmap is possible now and has been since 2010. Blender has been using it for over a year now too :)

    Those people who want to learn more about the more technical aspects of this can read the following paper (by Morten S. Mikkelsen)

    https://dl.dropboxusercontent.com/u/55891920/papers/mm_sfgrad_bump.pdf

    Demos of it in action:
    http://threejs.org/examples/webgl_materials_bumpmap_skin.html
    http://mmikkelsen3d.blogspot.co.uk/2011/12/so-finally-no-tangents-bump-demo-is-up.html
  • chrisradsby
    Options
    Offline / Send Message
    chrisradsby polycounter lvl 14
  • Farfarer
    Options
    Offline / Send Message
    Just a small correction to your post EQ.

    Bumping directly from a heightmap is possible now and has been since 2010. Blender has been using it for over a year now too :)

    Those people who want to learn more about the more technical aspects of this can read the following paper (by Morten S. Mikkelsen)

    https://dl.dropboxusercontent.com/u/55891920/papers/mm_sfgrad_bump.pdf

    Demos of it in action:
    http://threejs.org/examples/webgl_materials_bumpmap_skin.html
    http://mmikkelsen3d.blogspot.co.uk/2011/12/so-finally-no-tangents-bump-demo-is-up.html
    As I understand it, it's still not really tangent-less bump mapping, is it? You still need to have the renderer/baker synced and the tangents have to match up. And, in fact, you need to store more information about the texture to have it work properly.
  • metalliandy
    Options
    Offline / Send Message
    metalliandy interpolator
    Wow haven't seen that before Andy, thanks! :D
    No problem, mate!
    Farfarer wrote: »
    As I understand it, it's still not really tangent-less bump mapping, is it? You still need to have the renderer/baker synced and the tangents have to match up. And, in fact, you need to store more information about the texture to have it work properly.
    No, it's is entirely tangentless as in it doesn't use any per vertex tangents. Everything is done at a pixel shader level.
    Granted it intended for reasonably high fidelity geometry but it is tangentless all the same. :)
  • uncle
    Options
    Offline / Send Message
    Polycount always delivers, thanks for interesting read.
Sign In or Register to comment.