Over the "digital ages," the battle for more efficient texturing algorithms has never stopped. Graphics hardware and software leap-frog each other in both the gaming and technical industries in an effort to make textures look more realistic. Many new technologies fall by the wayside before most of us ever hear of them, but some of them endure for years. I'm going to discuss 3 of those enduring texture mapping methods today. They are...
- Bump Maps
- Normal Maps
- Displacement Maps
Here's a slightly technical explanation of each Map type, and my video at the end does a pretty good job of showing the major differences in a 3D environment (the video is less technical - just more fun to watch). It's about 14 minutes long.
Bump Maps
A bump map is a grayscale image (generally an 8-bit image so it has 256 values) that tells the renderer how to tweak the surface face-by-face. It doesn't actually tweak the geometry though; just the resulting lighting.
Pros
1) It's been around the block a long time, so every renderer knows how to use it.
2) It's easy to create by hand by starting with a black surface, and painting grayscale on it.
Cons
1) Because it's 8-bit grayscale, it's limited in the amount of detail resolution you can represent. If you try to show too much depth, you could start to see ridges.
2) Because it doesn't actually deform geometry, any profile edges will still appear flat (see the top example in the image at right).
3) most renderers are not fast enough to render bump maps in real-time.
Potential Applications: Good for pre-rendered or pre-baked animations where the camera doesn't get too close and the camera doesn't get too parallel to the surface to reveal how flat the surface is.
For More Info, see this article at Wikipedia.org.
Normal Maps
According to Wikipedia, Normal map technology became public around 2003. They are arguably the next generation of bump maps. Normal maps are RGB instead of greyscale, so they contain triple the amount of data. They use a direct RGB->XYZ correlation of the surfaces normal vector, which means the colors tell the render engine what direction the surface normals point in 3D space. The rendering algorithm is more efficient that way since the normal is already calculated. Because of that, normal maps are a great candidate for real-time rendering. Game engines like Xbox 360 and PlayStation 3 now include normal map support.
Pros
1) More efficient to calculate than bump maps, so they can be used real-time in game engines, etc.
2) Higher level of detail quality because they contain more texture data than greyscale bump map data.
1) As with the greyscale bump map, normal maps don't actually deform geometry, so any profile edges will still appear flat (you can see this in the top two examples in the image above).
2) I have found that the nature of normal maps makes them a little bit blurry when you look too close.
3) Normal maps cannot be easily drawn by hand. You need a program like Genetica, or "bake" it from your 3D application.
Potential Applications: Games are using this more and more because it is the best of both worlds - closer to displacement quality, but real-time graphics.
For More Info, see this article on PixLogic's website. It's more technical, but has several great illustrations.
Displacement Maps
As the name describes, these maps "displace" the underlying surface mesh, and so give you the detail you great close-up detail. Displacement maps are greyscale like Bump Maps, but the geometry is generally the limiting factor in resolution here, not the image. The smaller the mesh size, the more texture detail you can have. Generally displacement maps are not used on their own, but are instead used for the larger details, and bump or normal maps then handle the smaller shadow details. Displacement maps dramatically affect memory usage because more mesh data has to be held in memory.
Pros
1) This is the only method that allows you to see detail on the horizon (profile) of the geometry. You can see this at the top edge of the displacement example above.
Cons
1) Can you say MEMORY HOG? Don't even think about using this method in games.
Potential Applications: Use for macro close-ups where you need hyper-detail. It's also a good idea to displacement maps with normal or bump maps when you have a very large range of texture detail. An example would be to create a coarse giant mesh, use the displacement map as the height detail of the mountain, and then apply the bump or normal map for the closeup details.
For More Info, see this article at Wikipedia.org.
Conclusion
Each map serves a purpose. Bump maps are the closest to retirement, but there's still plenty of life left in all of them. Normal maps are the best of both speed and visual quality. Watch the video below to see the effects of using each one in a 3D rendering environment.
Genetica generates Bump Maps by default, and Genetica Pro and Genetica Studio easily generate Normal Maps as well. Learn more about Genetica's features here (opens in a new window). All the images in this tutorial video were created with Genetica. The 3D app I used is Blender.