Introducing the ArcGIS bump map tools

By Rajinder Nagi, Esri Research Cartographer

Bump Map thumbnail

We are pleased to announce the release of the new ArcGIS Bump Map Tools! This new toolbox contains tools to help you create and symbolize “bump maps” which are used by cartographers to add texture to a hillshaded surface. This technique is most often used to give the illusion of a realistic vegetated surface, though Jeff Nighbert has also talked in some of his papers and presentations about using it to represent rocky outcrops and other surfaces as well. Jeff introduced the technique to ArcInfo users at the 2003 Esri User Conference.

Bump mapping is done by first creating a random point pattern, using that pattern to create bumps as a raster surface, adding the bumped surface to the underlying DEM, hillshading the DEM, and then symbolizing the results.

Symbolizing the results includes two steps – 1) symbolizing the hillshade, and 2) symbolizing the vegetation overlay with a layer tint or other color. We will talk about this on our next blog post, Symbolizing the bump map.

The bump map model that Esri developed creates an output raster that represents the combination of multiple “bumped” surfaces, each relating to a different type of vegetation. It allows users to specify the parameters for each type of vegetation, including cones (for coniferous vegetation) or domes (for deciduous vegetation), as well as vegetation density (spacing), radius, and height. The model was built using two scripts that were written in the open source Python scripting language so they can be modified with ease. You can use other outputs from the model to symbolize the bumped areas that were created by the model. In addition, we build a No Bumps script that you can use to symbolize the areas where there are no bumps in the texturized surface. We will talk more about symbolizing the bump map in our next blog entry.

With these resources, you can easily and quickly create and symbolize data that gives a more realistic impression of hillshaded vegetated surfaces.

Let’s look the Bump Map model in a little more detail.

How the model is structured

The model was built using two scripts “Bump Map Script – Part 1″ and “Bump Map Script – Part 2″, where Part 1 creates the random point pattern(s) based on user defined inputs about how the bumps for the vegetation should appear, and Part 2 creates the bumps (figure 1). Each vegetation type is represented by “bumps” that are defined by type (cones for coniferous vegetation or domes for deciduous vegetation), density (spacing), radius, and height. The vegetation pattern or patterns are then added to the DEM and hillshaded to create the final output. If necessary, the DEM is resampled, so the smaller the “bumps” (i.e., the user-defined radius), the longer the DEM will take to resample.

Bump Map Model Structure

Figure 1. The structure of the Bump Map model.

Users should not run the scripts (Parts 1 and 2) individually as these are embedded in the Bump Map Model for seamless functionality.

Using the Bump Map model

First unzip the Bump Map Tools you can download from here. Take a moment to review the contents of the file once you unzip it. You will see the following (figure 2):

Bump Map Directory Structure

Figure 2. The contents of the download

Take a minute to read the readme.txt file for some detailed information on the contents of the download. Note that there is a ToolData directory and a Scratch directory. If you look in the ToolData directory, you will find some DEM and vegetation data that you can use to try out these tools. Intermediate data will be written to and deleted from the Scratch directory automatically when you run the tools.

One preparatory step is to make sure that the DEM and vegetation mask rasters you want to use are in the same coordinate system, and that they are projected so that the linear units are in either meters or feet.

Now you are ready to use the model. In ArcMap, right click in the ArcToolbox window and select “Add a Toolbox”. Navigate to the location of your download and select the BumpMapTools toolbox. Open the toolbox and double click the Bump Map Model. The user interface will look like figure 3:

Bump Map Model Interface

Figure 3. The user interface for the Bump Map model.

The input parameters include:

    1. Input Raster(s) (Vegetation Mask): The vegetation mask raster is a binary raster with the same value for cells in which the vegetation is present and NoData for all other cells. Here are two examples:

Bump Map Model User ConiferAn input raster for vegetation that is only conifers.

Bump Map Model SedgeAn input raster for vegetation that is only sedge.

    1. Cones or Domes: This is a drop down menu option where the user can select cones (to create a surface that represents coniferous vegetation) or domes (to create a surface that represents deciduous vegetation).

Bump Map Cones and Domes

  1. Vegetation Density: This parameter will dictate how dense or sparse the cones/domes will be. Input a lower value to create a pattern that is denser and a higher value to create a pattern that is sparser. In essence, what happens is that a point will be placed randomly within each quadrilateral of an array that is defined by the value you input. If you input a value of 10, one point will be randomly placed within each quadrilateral of an array that is comprised of quadrilaterals that are 10 units by 10 units in size. The units for the value that you input to define the size of the quadrilaterals in the array is derived from the coordinate system for the input vegetation mask raster (usually either meters or feet).
  2. Vegetation Radius: Input a value that relates to how wide you want the bumps to appear. The value is the radius of each bump. The unit for the value that you input is derived from the coordinate system for the input vegetation mask raster. This value could have an impact on the amount of time it takes for this tool to run. If you input multiple vegetation masks, the LOWEST value for this parameter will be used to dictate the resampling for the DEM, if necessary, to which the bumps will be added. The new cell size will be the lowest radius value divided by 11 so that the bumps will appears to be nice and smooth. This means that if you input a 10 meter DEM and set a radius of 10, the output cell size for the final bump map and all the vegetation bump rasters will be less than one meter (i.e., 10/11).
  3. Vegetation Height (optional): Input a value that relates to how high you want the bumps to appear. This is a required value for creating cones, but not for domes. The unit for the value that you input is derived from the coordinate system for the input vegetation mask raster.
  4. Input Raster (DEM): This is the input DEM (not the hillshade!)
  5. Output Raster (Bump Map): This is the output raster that includes bumps for all the vegetation classes as well as the hillshade for the underlying DEM.

The model was developed to work in batch mode so that you can input parameters for multiple vegetation types. As with any other ArcGIS geoprocessing tool that runs in batch mode, each row represents a process and within each row, each cell represents one of the tool’s parameter (figure 4).

Bump Map Model Batch Mode

Figure 4. Typical interface for batch mode processing

Tip: Before running the model, please make sure the DEM and vegetation mask raster’s are in the same coordinate system and are projected so that the linear units are in either meters or feet.

Model output

This model creates a hillshaded raster that represents the combination of multiple “bumped” surfaces atop with the underlying DEM, where each type of bumped surface relates to a different type of vegetation, as shown in figure 5.

Bump Map Model Bumps

Figure 5. The output from the Bump Map model — in this example, the taller cones represent conifers and the lower domes represent sedge

In our next blog entry, Symbolizing the bump map, we will talk about how you can symbolize the output from the model to create a stunning looking bump map (figure)!

Bump Map Model Colored Results

Figure 6. A symbolized bump map

Additional Resources


Buckley, A. and R. Nagi. 2009. “ArcGIS Bump Map Model”, presentation at NACIS PCD 2009 – Sacramento.

Nighbert, J. 2007. “Making Noise with ArcGIS”, presentation at the 27th Esri UC.

Nighbert, J. 2003. “Characterizing Landscapes for Visualization through Bump Mapping and ESRI’s Spatial Analyst”, presentation at the 23rd Esri UC.

Nighbert, J. 2002. “Using ArcGIS to Apply Textures and Materials to Relief Backdrops in Cartographic Presentations”, presentation at the 22nd, Esri UC.


Nighbert, Jeffrey. 2003. “Characterizing Landscapes for Visualization Using ArcView Spatial Analyst.” Proceedings of the 23rd Annual Esri User Conference, July 7-11, San Diego, CA.

Nighbert, Jeffrey. 2002. “Using ArcGIS to Apply Textures and Materials to Relief Backdrops in Cartographic Presentations.” Proceedings of the 22nd Annual Esri User Conference, July 8-12, San Diego, CA.

Nighbert, Jeffrey. 2002. “Using Remote Sensing Imagery to Texturize Layer Tinted Relief.” Cartographic Perspectives, Number 36, Spring 2000, pp. 94-96.

This entry was posted in Imagery, Mapping, Migrate and tagged , . Bookmark the permalink.

Leave a Reply


  1. wwithington says:

    I’m trying to get this tool to work and can’t manage to get any output. I’m using the supplied data to test and have set the workspace and scratch workspace according to the article. Has anyone had any success with this?

  2. abuckley says:

    I am not sure why this won’t work for you. It was put through the paces before we released it. Maybe you can use our Ask a Cartographer option (third tab at the top of the page) to send us your question, a bit of your data, and the aramters you are using so we can test things our from our end.

  3. abuckley says:

    One thing that came to mind is to check your geoprocessing environment settings. Click Tools – > Options on the top bar menu, then click the Geoprocessing tab. Click the Environments button and check the Current and Scratch workspace directories on the General tab. They should be pointing to the ToolData and Scratch workspaces respectively.

  4. wwithington says:

    Sorry to take so long to reply. I’ve retested and still cannot get an output. I’m going to post to Ask a Cartographer as suggested. Thanks!

  5. abuckley says:

    We have learned that good practice is to put the tool download in a directory that has: 1) no spaces in the name, and 2) a “shortish” path. Both of these relate to issues of processing in which that pathnames can become corrupted. Try using the tools from a directory towards the top of the directory structure and from a directory with no spaces in the name.

    Additionally, we have learned that the bump map tool won’t generate output if, for CONES, the radius is larger than the height (we made the tool so that it would require the height to be the higher value as that is most often what conifers are like in “reality”.)

  6. bluegiraffe77 says:

    Unfortunately, i also experience difficulty…

    * I am running with ArcEditor (ArcMap 9.3)
    * Spatial Analyst Extension is ticked on.

    My rough steps as follows:
    1) Tools / Options / Geoprocessing Tab / Environment / General Settings:

    * Current Workspace: D:WORK1_DATAESRI_ScriptsBumpMapToolsBumpMapToolsBumpMapToolsToolData

    * Scratch Workspace:

    2) ADD DATA:
    * conifer_only
    * craterlakedem

    3) Within ArcToolbox:
    * right-clicked and choose “ADD TOOLBOX”
    * Navigate to the BumpMapToolbox (the red toolbox icon titled BumpMapTools).
    * Now that it is visible in ArcToolbox, i double-click on the “Bump Map Model” it to start. Note: I have not touched the Bump Map Script – Part 1 or Part 2 buttons.

    4) Now that the Bump Map Model Dialog box appears, I enter the following:
    * Input Raster (Vegetation Mask): Conifer_only
    * Cones or Domes: Cones
    * Vegetation Density: 10 (as suggested in the main article at the top of this blog (step3)).
    * Vegetation Radius: 10 (as suggested in the main article at the top of this blog (step 4)).
    * Vegetation Height: 20 (Note: For Cones, the Radius must be smaller that the height as described in your comment posted Friday Apr 02).
    * Input Raster (DEM): Craterlakedem
    * Output Raster Dataset (Bump Map): I provided a name called “output” within the ToolData Folder (alongside the 3x test rasters (conifer_only, craterlakedem, sedge_only)).

    5) Press “OK” to Run/Execute the Bump Map Model….

    As it processes, key information is seen within the “Details”…

    Executing: BumpMapModel conifer_only Cones 10 10 20 craterlakedem D:Work1_DATAESRI_ScriptsBumpMapToolsBumpMapToolsBumpMapToolsToolDataoutput
    Start Time: Wed May 12 17:50:18 2010
    Executing (Bump Map – Part 1): BumpMapPart1 conifer_only Cones 10 10 20 %scratchworkspace%ppat%i%
    Start Time: Wed May 12 17:50:18 2010
    Running script BumpMapPart1…
    Generating point pattern…
    Point pattern generated…
    Completed script BumpMapPart1…
    Executed (Bump Map – Part 1) successfully.
    End Time: Wed May 12 17:50:51 2010 (Elapsed Time: 33.00 seconds)
    Executing (Bump Map – Part 2): BumpMapPart2 craterlakedem D:Work1_DATAESRI_ScriptsBumpMapToolsBumpMapToolsBumpMapToolsToolDataoutput
    Start Time: Wed May 12 17:50:51 2010
    Running script BumpMapPart2…
    Generating Euclidean distance…
    Euclidean distance generated…
    ***Provide height as it is a required parameter for creating cones***

    (: I dont know why it states this when i clearly input 20 )

    Creating Cones…
    There is only one vegetation pattern to add to DEM…
    Vegetation pattern resolution is 1.81818181818…
    DEM resoultion is 10…
    DEM provided has less resolution as compared to vegetation patterns (trees) generated and will be resampled to match trees resolution. DEM should have equal or better resolution than trees generated to get better results.
    Resampling DEM…
    DEM resampled…
    Adding resampled DEM to vegetation pattern…
    Completed script BumpMapPart2…
    ***Failed to execute (Bump Map – Part 2)***
    End Time: Wed May 12 17:51:26 2010 (Elapsed Time: 35.00 seconds)
    ***Failed to execute (BumpMapModel)***
    End Time: Wed May 12 17:51:27 2010 (Elapsed Time: 1 minutes 9 seconds)

    6) Comment: Therefore, no output was created? (no output automatically added to ArcMap or visible within the ToolData Folder).

    Question: Is there anything that i may have missed etc?
    Question: Based on your test data supplied, what numbers do you suggest I input within:
    * Vegetation Density: ?
    * Vegetation Radius: ?
    * Vegetation Height: ?

    Perhaps you could submit a youtube video from start to finish including environment settings etc… and then post a link.

    BAppSc Geomatics (Hons 1st Class)
    Geospatial Scientist

  7. rajnagi says:

    @ bluegiraffe77
    It seems you are following right steps and I am not sure why it didn’t work for you. I have tried at my end and its working fine. We have uploaded a revised version of Bump Map Tools and I would suggest you to try once again and in case you have issues, you can use “Ask a Cartographer” section to post your question.
    Also, let me clarify that the Vegetation Density and Radius of 10 mentioned in blog’s step 3 and 4 are just for explaining the concept and are NOT the recommended values as these values depend upon the scale of the map for which you are producing bumps. The Crater Lake map used in the blog was designed for 1:63600 scale and we used following parameter for CONES (units in meters):
    * Vegetation Density: 18
    * Vegetation Radius: 50
    * Vegetation Height: 200
    You can also shorten your directory path like this: D:Work1_DATAESRI_ScriptsBumpMapToolsToolData. Bump Map tools have detailed help explaining its usage and would recommend to read that also.

  8. erikfernandez says:

    I was able to get this to work after playing around with changing the environments and setting the workspace. However I can’t recreate it now. Haven’t changed anything. Before, and now again I keep getting the following error. Any ideas on what I’m doing wrong are appreciated. It’s a great tool (if you can get it to work).

    ERROR 000865: Input raster: C:WorkSpaceBumpMapToolsBumpMapToolsScratchppat2 does not exist.


  9. rajnagi says:

    You need to delete the content from the scratch folder before running it again. It might have text file from your previous unsuccessful run. If you still have issues, you can send us question through ‘Ask a Cartographer’ section ( of Mapping Center site.

  10. erikfernandez says:

    Thank you, that solved the problem. I appreciate the quick response.

  11. abuckley says:

    Glad you are back on your feet again!

  12. magnuss20 says:

    Is this supposed to work on ArcGIS 10.0? I have tried many times, and get an unspecific error at the start of part 2.

  13. kbruce82 says:

    We would like to use the bump map to assist with a viewshed that is impacted by vegetation. To do this we need to covert the hillshade back to a DEM. Is this possible?

  14. kbruce82 says:

    Is there any way to use this hillshade with vegetation heights for a viewshed analysis?

    • rajnagi says:

      For viewshed analysis you need a DEM not hillshade. In this tool, vegetation heights (cones or domes) are first added to DEM and then hillshade is generated. So you can use the output when vegetation is added to dem. Look at the script and see where that is being written and use it for your analysis. Just to remind you that since the vegetation heights are randomly generated, you won’t get accurate viewshed analysis.

  15. kbruce82 says:

    Excellent. This is a great tool. However,I do not know too much about scripting, can I just go into the script-2 and delete the portion about hillshading? or do I re-write the script?
    Any info would be helpful.
    thank you!

    • rajnagi says:

      You don’t need to re-write the script. You can either comment out the hillshading part i.e. gp.Hillshade_sa(VegPlusDEM, BumpMap, InAzimuth, InAltitude) in script 2 or if you are not comfortable with the script just grab the vegplusdem raster after running the tool. Tool is writing vegplusdem output at the folder location you set for current workspace in the environment settings. Hope this helps!

  16. Neelum says:

    I really appreciate these tools. I am intending to download these tools but didn’t found any working link. Could you please let me know from where I can download these tools. Secondly, I am not sure whether these tools are compatible with ArcGIS 10.5?

    • Rajinder Nagi says:

      Neelum, The link to download is updated in the article under heading “Using the Bump Map model”, so you should be able to download now. I wrote these a while back (9.x) and it might work as is in 10.x. If not, you can easily update as these are python scripts.

  17. dpodolsky says:

    For those of you wishing to create a bump map but are unsure of what values to begin with, here is a small sampling of increasing values for reference. It is not meant to be an exhaustive list but rather a small illustrative set to get you started.