Crazy Bump Tutorial: Understanding Settings for Better Normal Maps
Crazybump is a quick and easy tool for creating normal maps from a texture. The default settings however are hardly ideal for any texture, and are meant as a starting point for normal map creation. In this tutorial we will cover how to setup textures with ranging levels of detail, and break down the settings needed to achieve our desired results.
Before we begin, its important to understand how Crazybump is going to affect our texture. When a texture is imported it’s converted to grayscale and run through a shader, which is used to generate the results. Its a good idea to modify the texture prior to export into Crazybump to ensure we are generating results from the right information. I’ll go into more specifics as we move through the tutorial.
Using a test texture of different grayscale values, we can see the effects the settings are having on the output of the texture. After importing this texture, it becomes obvious that Crazybump responds to contrast between the different shades as opposed to the value as a whole. As such, the more contrast information you have in your image, the more Crazybump can use it to build details into the normal map. My test texture has very little information in it, allowing us to see how the settings are applied.
Intensity - This serves as a multiplier for the end result. The higher the value, the more the others settings will impact the final result. Inverting this number inverts the texture its-self in case you chose the wrong starting image before this step.
Sharpen - Very self-explanatory, this will sharpen the image, producing a grainier looking effect. It can add a lot of noise to a normal map, but it can be useful for enhancing textures that have a lot of natural chaos in them such as fabrics or canvas.
Noise Removal - This is a stepped setting with 3 levels that will selectively blur the normal map. It will attempting to remove some of the noise and smoothing out the areas where there is a lot of close shade variation. This is mostly used as an after thought once the detail settings have been used to produce an overall output to the texture.
Shape Recognition – This setting attempts to add directional lighting information, derived from the constant value areas of the texture. As seen in our test map, it adds additional information to objects that have more white, making our square shapes more pronounced. Its one of the only settings that responds to the solid values of the image, pushing out whiter areas and recessing darker ones. It should not be used alone, but rather in tandem with other detail settings.
Fine Detail - This setting adds greater contrast to areas where the shade changes from one value to another. Because it does not affect the areas where there is a constant value, it makes for a great stand alone setting for small detail textures like paint buildup or wall stucco. It also serves an a good way to increase the sharpness when using the medium and large detail settings.
Medium & Large Detail – These settings work in a similar fashion to fine detail with one exception: the edges where the color value changes are blurred to different degrees. This allows the normal to bevel into the areas where the values change, enhancing their shape. Because of their blurring effects when carving out areas of contrast, they are seldom used without the sharpness aid from either the Shape Recognition or Fine Detail settings.
Very Large Detail - This setting operates slightly differently than the rest of the detail sliders. It responds best to areas where their is a large difference in value between two areas. As this setting is dialed up, it erodes away more of the smaller contrast areas in an attempt to highlight the biggest parts of the textures shape. The large multiplier on this effect makes it very useful for textures defined by large shapes such as rock faces or desert sand.
Different Types of Texture Detail
To highlight practical uses for the settings described above, I’ve chosen three textures to highlight the way in which these settings are used together. I’ll be covering them in three different texture types: large detail, medium detail and small detail textures.
Large Detail Textures
Most large detail textures revolve around rocks, dirt or formations in nature. Large details read well from a distance, so most of the settings that are applicable here are the large detail ones. Things like rocks also benefit from the Shape Recognition setting to enhance the cracks, creating more of a range of depth to the normal map. I also used 1 step of the Noise Removal setting to soften some of the noise on this texture, as it will only be seen from a distance.
Textures with big shapes can also benefit from stacking multiple normal maps on top of one another. This will accentuate the largest details, making the shapes more pronounced. To achieve this, you will need to use an additional toolset for from either Nvidia (Nvidia Tools) or Xnormal (Xnormal Website). Both have a normal map utility called Normalize, which brings the color range back to 0-1 space.
To stack normal maps, duplicate the texture a few times and set the blend mode to overlay. Combine the layers into a single merged layer so that it can be normalized. We need to do this because the blue channel has become overblown from stacking layers, producing white values outside the 0 – 1 (or 0 – 255) color range. While photoshop will clamp these in its display window, they will be saved with the overblown color information without running a normalize filter.
To normalize using Xnormals tools, you should have a toolset in your filters near the bottom called Xnormal. Select the merged normal map and go Filter -> XNormal -> Normalize Normal Map. You should notice the texture become slightly dimmer. The texture is now ready to be saved.
To normalize using Nvidia’s tools, look for Nvidia them near the bottom of the filters dropdown. Select the merged normal map and go Filters -> Nvidia Tools -> NormalMapFilter. A dialog box will appear with a variety of settings. Select the ‘Normalize only’ option and press ok. You should notice the texture become slightly dimmer and is now ready to be exported.
If we compare the two normal maps side by side, we can see the difference stacking the normal map has made.
Below we can see the 3 variations of the rock texture. The left has no normal map while the center one has our settings from Crazybump. The Right texture is the layered normal map we made in Photoshop.
Medium Detail Textures
I chose to use a wooden siding texture for this demonstration on using more mid level details. Because this texture would have a greater closeness to the player, I used the noise removal to remove some of the wood grains from being process through the normal map filter. To accenuate the edges between the planks, I decided to use some Shape Recognition in addition to the Fine Detail setting. To contrast these sharpening effects on the texture, it was necessary to tone down the intensity of the overall normal map. Mid detail textures like this are hard to get right, especially if the player is going to get close to them. They should read well from a distance while not being overblown should the player gets close to them.
While this normal map isn’t super noticeable in the UDK, it helps sell the overall look of the texture, especially in more of the recessed areas.
Fine Detail Textures
To demonstrate how to properly use fine detail, I decided to use this sheet metal. This normal map is a two part setup, beginning in photoshop. Because metal by its very nature has details that are exclusive to its surface, it was necessary to run it through the High Pass filter (located under Filter -> Other -> High Pass). This filter erodes down the color range of the texture, bringing the smaller highlights and shadows toward a middle grey. Its incredibly useful for eliminating surface details as seen below.
I used a very low setting (around 1.5 I think) to wipe away the ware on the metal sheets while preserving the edges of the plates.
When generating the normal map for this texture, I dialed up the fine detail while turning off all other sliders except some of the medium detail to push the plate edges. Because there is little detail in this texture, I boosted the sharpness of it to bring out more of the smaller scratches and dings. This texture is very light, and its supposed to be. Not every normal map has to have a lot of information in it, only what is needed to push the depth of the texture. Since metal is better conveyed through the spec than the normal, I chose to only highlight the plates and rivets.
Because this normal map was so faint, I brought it back into Photoshop and stacked it like the rock texture. This helped push more of the plate shapes when displayed in UDK.
Other Tips and Tricks
I seldom export a texture directly out of crazybump without binging it back into photoshop first. This is because the intensity may not always be right and in case it needs to be dialed back, it can do so here. By creating a layer under the normal map with the default normal map color (128, 128, 255), The top layer can be set to overlay and its opacity turned down.
Likewise, when the texture is in the UDK we can use a material procedure to turn the normal maps intensity. By multiplying the texture by a constant 3, we can tune each channel up or down in engine to get our desired settings. This is a simple way in which you can quickly decide how to modify your normal map to fit the environment it is in (though whether or not it is a suitable substitute for a texture alone will depend on the circumstances of the project).
I hope this helps you get a better understanding of how to use crazybump correctly to generate your texture derived normal maps.