Sun glints add realism to your map

By Aileen Buckley, Mapping Center Lead

Sun Glints - Thumb

Sun glints are a way to add a more realistic effect to your map by modulating the tone of water features. We rarely see flat tones in nature, so using sun glints simulates the subtle tonal variations caused by the reflection of sunlight off a water surface. This method was first described in Tom Patterson’s article, “Getting Real: Reflecting on the New Look of National Park Service Maps” on his Shaded Relief web site. Although he describes how he achieved the effect using Photoshop, this tip describes how you can use ArcMap to accomplish the same thing.

The example used a map of the southwestern part of Oregon in the Crater Lake area (figure 1).

Sun Glints - SW OR Map

Figure 1. Crater Lake area map

In essence, sun glints are symbolized using a gradient fill for the water polygons (figure 2). The angle of the gradient fill varies randomly from feature to feature.

Sun Glints - No Glints Sun Glints - With Glints

Figure 2. Water polygon features symbolized without sun glints (left) and with sun glints (right).

To achieve this effect, you only need a water polygon feature class.

Step One

Using a random number calculation, you can add an attribute that distinguishes which features will be symbolized with gradient fills from varying angles. To do that, for the layer that contains the water features, open the attribute table, add a new field, and calculate it to contain random numbers:

  1. Right click the water polygons layer in the table of contents and open the attribute table.
  2. At the top left of the Table dialog box, click the Table Options button and click Add Field.
  3. Name the field and keep it a short integer type.
  4. Click OK.
  5. Right click the name of the field and click Field Calculator.
  6. Choose the option to use the Python parser.
  7. Also choose the Show Codebook option.
  8. In the Pre-Logic Script Code area type the code as shown in the figure below. Note that the following expression calculates random values from 1 to 4—you can modify these values if you want but realize that you will need to define a new symbol for each random number.
    Sun Glints - Thumb
  9. Type the following at the bottom, under where your new field name is shown: getRandomValue()
  10. If desired, click the Save button to save the expression so you can use or modify it later.
  11. Click OK.
  12. Verify that the field now contains random numbers for the range you defined.
  13. Close the attribute table.

Step Two

The next step is to symbolize the features:

  1. Right click the layer in the table of contents and click Properties.
  2. Click the Symbology tab, and choose to use the Categories > Unique values renderer.
  3. Set the value field to the attribute you added in step one.
  4. Click Add All Values.
  5. Right click any symbol and click Properties for All Symbols.
  6. On the Symbol Selector dialog box, click Edit Symbol.
  7. On the Symbol Property Editor dialog box, change Type to Gradient Fill Symbol.
  8. Right-click the color ramp Style and click Properties.
  9. Click the Color 2 option to enable the second color.
  10. Click the Color 2 color patch to change the color.
  11. Select a light blue color or click More Colors to define your own color (this example used RGB 191 233, 255).
  12. Click the Color 1 color patch to change the color.
  13. Select a darker blue color or click More Colors to define your own color (this example used RGB 0, 168, 230).
  14. Click OK on the Edit Color Ramp dialog.
  15. On the Symbol Property Editor dialog, right-click the modified color ramp and click Save to Style.
  16. Give it a name so that you will recognize it when you see it in your personal style.
  17. Change Intervals to 50, Percentage to 100, and Angle to 135 (figure 3). What this does is adds a smoother appearance to the color gradation by using more intervals, applies the gradient fill across 100 percent of the polygon features, and changes the angle of the gradient fill from E (90) to SE (135).
    Sun Glints - Symbol Property Editor
    Figure 3. Symbol Property Editor
  18. Click OK.
  19. On the Symbol Selector dialog box, change Outline Color to No Color.
  20. Click OK.
  21. Click Apply to see your changes so far.

Step Three

The final step is to modify the symbols so the features with different attribute values have gradient fills with different angles.

  1. Decide which symbol will retain the symbology definition you just set.
  2. Right-click one of the other symbols, click Properties for Selected Symbol(s), then click Edit Symbol.
  3. Change Angle to 45, click OK, and click OK.
  4. Repeat steps 2 and 3 above for the other symbols using other angles (for example, 225 and 315).
  5. Verify that the symbols appear different for each value (figure 4).
    Sun Glints - Layer Properties
    Figure 4. Layer Properties dialog box
  6. Click OK to save your changes.

The results, when combined with other methods that promote a feeling of realism on a map, such as hillshading and elevation tinting, provide a much more aesthetically pleasing impression (figure 5).

Sun Glints - With Glints and Hillshade

Figure 5. The sun glints with other “realistic” symbology such as hillshades and elevation tints

On the final map, the sun glints add a subtle professional touch (figure 6).

Sun Glints - With Glints on Final Map

Figure 6. The sun glints on the final map

Thanks to David Barnes, Cartographic Product Engineer, for his Crater Lake area map.

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

Leave a Reply


  1. kmayall says:

    I’m curious as to why you would add the random directions to the sun glint. Wouldn’t the sun’s direction be the same for all the water bodies?

  2. abuckley says:

    Sun glints occurs when the sun’s light bounces off the water’s surface. If you study the way the sun glints off water as you fly over an area with multiple water bodies, you will notice that the sun does not, in fact, glint off each water body in the same direction. This is primarily due to the fact that water moves, unlike other reflective surfaces such as glass. So waves caused by wind and currents (in larger water bodies) modified by the size of the water body, will cause the actual angle of reflection of the sun’s light to vary. Therefore, when we use sun glints, we can add even more realism to the map by varying the angle of the glints, and the glints will appear to be more realistic if those angles are random.

    Here is an interesting article about sun glints:

  3. SamIAmOz says:

    I’m wondering how I can achieve a similar effect on a single polygon – a winding river that dominates one side of my map?

  4. abuckley says:

    You can certainly use a gradient fill on the river feature. The only issue I see is that you will want to dissolve it first so that it is a single polygon. Using multiple features with multiple angles will not work as the gradient fills will not blend properly where the features connect. But a single polygon using a linear gradient fill will work pretty well.

    Another idea is to use a shoreline vignette – here is a blog entry we wrote about how you can do that:

  5. lygismav says:

    There is a typo in step one part 8.
    import numpy.random as Rdef getRandomValue() should be two lines not one.

    For example:

    In the Pre-Logic Script Code area type the following (note that the following expression calculates random values from 1 to 4—you can modify these values if you want but realize that you will need to define a new symbol for each random number):
    import numpy.random as R
    def getRandomValue():
    return R.random_integers(1,4)