Jump to content


What's the difference? (if any)


  • You cannot reply to this topic
8 replies to this topic

#1 starstutter

    Senior Member

  • Members
  • PipPipPipPip
  • 1039 posts

Posted 09 March 2008 - 03:38 PM

Quick question.

Can someone please explain the difference between bump mapping and normal mapping? I've heard that they're different methods in some places, but others say they're just different names for the same thing.

One thing that is consistant though is that those who say that they are different always say that bump mapping is primitive while normal mapping is more recent. I can't see any immediate visual difference between the two from pictures so that would lead me to belive that it's more evident with dynamic lighting.

Thanks in advance.

#2 Reedbeta

    DevMaster Staff

  • Administrators
  • 4979 posts
  • LocationBellevue, WA

Posted 09 March 2008 - 04:53 PM

Well, when people say bump mapping today, they nearly always mean normal mapping - that is, the technique based on a normal map, i.e. a texture that contains normal vectors whose x y z components are stored in the r g b channels of the image.

There is an older bump mapping technique, basically never used anymore (except maybe on embedded platforms with limited graphics capabilities?), which does not use a normal map, but works directly from the height map. This is called shift and subtract bump mapping and you can google for things to read about it if you want. But it is much less versatile than normal mapping.
reedbeta.com - developer blog, OpenGL demos, and other projects

#3 Kenneth Gorking

    Senior Member

  • Members
  • PipPipPipPip
  • 911 posts

Posted 09 March 2008 - 05:17 PM

I think there is a tutorial on NeHe that does this kind of bumpmapping. It even ran on my old Voodoo3 :)
"Stupid bug! You go squish now!!" - Homer Simpson

#4 starstutter

    Senior Member

  • Members
  • PipPipPipPip
  • 1039 posts

Posted 09 March 2008 - 07:12 PM

Reedbeta said:

There is an older bump mapping technique {...} which does not use a normal map, but works directly from the height map. This is called shift and subtract bump mapping.

Shift and subtract...

So that phrase bring to mind the idea that you simply take a heightmap and darken the color where the depth is lower? I'm sure there's a way that this somehow interacts with dynamic light (otherwise there would be no motivation for it, instead just putting it in the origional texture).

#5 Reedbeta

    DevMaster Staff

  • Administrators
  • 4979 posts
  • LocationBellevue, WA

Posted 09 March 2008 - 07:29 PM

I'm not too familiar with the details of shift and subtract myself, but I believe the "shift" part involves shifting the texture coordinates on each polygon by a small amount in the direction of the light source. So it responds to dynamic light in that limited sense. But like I said, there's plenty on google about it if you want to learn more.
reedbeta.com - developer blog, OpenGL demos, and other projects

#6 TheNut

    Senior Member

  • Moderators
  • 1473 posts
  • LocationThornhill, ON

Posted 10 March 2008 - 11:38 AM

Bump mapping has many techniques. Most commonly it involves converting an image to grayscale and then embossing it a bit to darken/lighten the edges, giving it an extruded look. This is still widely used today when dealing with 2D images as opposed to 3D models. Using normal maps is another form of bump mapping reserved only for the purpose of realtime 3D graphics rendering. If you don't have a normal map, you can convert your image to grayscale, apply an emboss filter, and then convert the grayscale image into a normal map. Works quite well, albeit limited in bump detail. Another way to generate a normal map (the best way) is to take your very high polygonal model and export the normals to a texture. Then lower the resolution of your model to something more practical and use the normal map for lighting calculations.

Normal mapping itself also has several techniques, but always involves an RGB image with precomputed normal vectors. The following are two techniques to apply normal mapping:

1) Object Normal Mapping: Faster as there are fewer computations, but visually not accurate with objects that have fewer polygons or as the object moves further away from view with mipmapping enabled.

2) Texture Space Mapping [Standard Approach]: Slower as there are more computations, but visually accurate and does not suffer from object normal mapping problems.
http://www.nutty.ca - Being a nut has its advantages.

#7 Goz

    Senior Member

  • Members
  • PipPipPipPip
  • 574 posts

Posted 10 March 2008 - 06:57 PM

Well TheNut has probably given the best answer. Though his explanation of grayscaling an image is just one way (And a rather crap way, imho) of generating a bump map.

Bump mapping is, simply, adding surface lighting detail to a triangle as defined by some form of texture mapping. Normal mapping is a type of bump mapping. Shift and subtract (Better known as emboss bump mapping) is another type of bump mapping. Parallax bump mapping is another. Blinn bump mapping is another. All ways of getting a similar effect. Some give better visual effects than others but, in general, the better the effect the more expensive it is to render.

#8 starstutter

    Senior Member

  • Members
  • PipPipPipPip
  • 1039 posts

Posted 11 March 2008 - 12:45 AM

TheNut said:

1) Object Normal Mapping: Faster as there are fewer computations, but visually not accurate with objects that have fewer polygons or as the object moves further away from view with mipmapping enabled.

2) Texture Space Mapping [Standard Approach]: Slower as there are more computations, but visually accurate and does not suffer from object normal mapping problems.

Are you just trying to say per-pixel vs. per-vertex?
Yes, I've implemented both and vertex normal mapping is teh suck :P

Thanks all for the answers. I've always known everything about normal mapping, but the term "bump mapping" is used so loosley it just gets confusing.

#9 Reedbeta

    DevMaster Staff

  • Administrators
  • 4979 posts
  • LocationBellevue, WA

Posted 11 March 2008 - 01:26 AM

I'm not sure exactly what TheNut was talking about. But there is something called object-space normal mapping (as opposed to texture-space aka tangent-space normal mapping). However, object-space normal mapping does not mean normals are stored per vertex, it just means the normal map is stored in object coordinates instead of tangent space coordinates. It can be a speedup for rigid objects (that don't deform), but I'm not aware of any visual quality degradation as compared to tangent space normal mapping.
reedbeta.com - developer blog, OpenGL demos, and other projects





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users