Model a 3D city block

Explore the map package

First, download the data. Then create a project in ArcGIS Pro.

  1. Download the naperville.zip compressed folder.
  2. Locate the downloaded file on your computer and extract it to a location you can easily find, such as your Documents folder.

    The data has been provided by the City of Naperville. The folder contains a map package, a scene layer package, and a file geodatabase.

    You will now create a blank ArcGIS Pro project and begin to import the data.

  3. Start ArcGIS Pro. If prompted, sign in using your licensed ArcGIS organizational account.
    Note:

    If you don't have access to ArcGIS Pro or an ArcGIS organizational account, see options for software access.

    When you open ArcGIS Pro, you're given the option to create a new project or open an existing one. If you've created a project before, you'll see a list of recent projects.

  4. Under New, click Start without a template.

    Start without a template

  5. On the Insert tab, in the Project group, click Import Map.

    Import Map

  6. In the Import window, browse to the Naperville folder you extracted and double-click Vector_Content_Naperville.mpkx.

    The Vector_Content_Naperville.mpkx global scene for the city of Naperville opens in ArcGIS Pro. In the Contents pane, you will see that the scene package includes the 2D BuildingFootprints layer and two 3D layers, StreetFurniture and BuildingShells.

    Contents pane

  7. On the Quick Access Toolbar, click the Save button.

    Save on the Quick Access Toolbar

    Tip:

    You can also press Ctrl+S to save your project.

  8. In the Save Project As window, browse to your extracted data location and name your project CityofNaperville.

Extrude 2D building footprints

One of the simplest methods for adding volumetric objects into a 3D view is extrusion. This method takes a 2D shape and pushes it vertically to create the appearance of a 3D object. Simple buildings are well suited for this method because they have vertical walls and their individual heights can be captured (or estimated) in a simple numeric field.

  1. In the Contents pane, in the 2D Layers group, right-click BuildingFootprints and choose Attribute Table.

    Open the BuildingFootprint layer attribute table.

  2. In the BuildingFootprints attribute table, review the Base Elevation, Building Height, and Number of Floors fields.

    BuildingFootprints attribute table with emphasis on fields for Base Elevation, Building Height, and Number of Floors

    These fields can be used to set the base elevation for buildings and for extrusion of the building features.

  3. Close the table.

    Before you can apply 3D vector symbology to the BuildingFootprints layer, you will move the layer into the 3D Layers group.

  4. In the Contents pane, drag the BuildingFootprints layer into the 3D Layers category.

    Drag BuildingFootprints into the 3D Layers group.

    The layer appears fragmented and uneven because the vertices of each polygon are being placed on the uneven surface, and their interiors are being calculated unevenly across it.

    Image showing uneven surfaces of Naperville

    If the elevation of each building footprint is set to a single value, they will appear flat.

  5. In the Contents pane, right-click the BuildingFootprints layer and select Properties.

    The Layer Properties window appears.

  6. In the Layer Properties window, click the Elevation tab. For Features are, choose At an absolute height.

    Chart showing At an absolute height selected

  7. Under Additional feature elevation using, for A field, choose Base Elevation from the field drop-down list.

    Window for Layer Properties: BuildingFootprints with Elevation tab selected

  8. Click OK.

    The building footprints display with flat interiors and are rendered at their correct base elevation.

    Review update scene

    Next, you will extrude each of the buildings up to their building height.

  9. In the Contents pane, ensure the BuildingFootprints layer is selected, and on the ribbon, click the Feature Layer tab.
  10. In the Extrusion group, click Type and choose Base Height.

    Base Height type

  11. In the Extrusion group, for Field, choose the Building Height.

    Choose Building Height field.

    The BuildingFootprints layer extrudes based on the Building Height value.

    Building layer displaying 3D building shapes

    Note:

    If you are working with data that doesn’t have a dedicated height field, you might be able to estimate building heights using an expression, for example, “Number of Floors * 3.5”.

  12. Save your project.

Add 3D symbology to buildings

Extrusion helps visualize the real-world space consumed by buildings, but it doesn't show other useful information, such as the number of floors for each building. This could be important for first responders and city planners. You can replace the solid-color display with a different kind of symbol—a procedural symbol—to incorporate additional information into the display.

A procedural symbol is a script that can construct additional geometry, colors, and textures from a source feature's geometry, and then apply that as a symbol within the scene. Learn more about Procedural symbology.

  1. In the Contents pane, ensure the BuildingFootprints layer is selected. On the ribbon, on the Feature Layer tab, in the Extrusion group, click the Type drop-down arrow and choose None.
  2. In the Drawing group, click Symbology.
  3. In the Symbology pane, click the symbol for the layer to modify it.

    Symbology - BuildingFootprints pane with Symbol selected

  4. In the Format Polygon Symbol pane in the search bar, type stack and press Enter.

    Format polygon symbology.

  5. From the results, click the Stacked Blocks symbol to assign it to the layer.

    The BuildingFootprints layer symbology updates.

    3D buildings shown as stacked polygon blocks

    Next, you will configure the procedural symbol to connect to individual feature attributes.

  6. In the Format Polygon Symbol pane, click the Properties tab and click the Layers tab.

    Modify polygon symbol properties.

  7. For Representation, choose Thin divider. For Units, choose Feet.

    Drop-down menu with Thin divider selected

  8. For TotalHeight, click the Set Attribute Mapping button.

    Set Attribute Mapping button for TotalHeight

    The Set Attribute Mapping window appears.

  9. In the Set Attribute Mapping window, choose BuildingHeight and click OK.

    Update TotalHeight using attribute field values.

  10. For Levels, click the Set Attribute Mapping button, choose Number of Floors, and click OK.
  11. At the bottom of the Symbology pane, click Apply.
    Tip:

    Symbol properties with attribute mapping have a blue database icon.

    Each building renders at its defined height, with striping that indicates the number of floors. These flat-roofed buildings, sometimes referred to as level of detail (LOD) 1 buildings, provide content that supports many 3D mapping needs.

    Updated scene

    However, not all buildings have flat rooftops. To model pitched-roof forms, you need to move away from simple extruded shapes and into a more comprehensive way of modeling buildings. There are a variety of methods for creating this type of data—some of which will be covered in later sessions—but, for this exercise, you will assume the data is preexisting or has been compiled by a data provider.

    Note:

    Other Learn ArcGIS tutorials are available, such as Extract Roof Forms for Municipal Development and Construct Realistic Buildings with Multipatch Editing for a lidar-centric roof extraction process.

    Next, you will explore a building with a rooftop that is not flat.

  12. On the ribbon, on the Map tab, click Bookmarks, and click Pitched Roof.

    Select the Pitched Roof bookmark.

    The scene zooms to a rectangular building.

    Rectangular building in 3D

  13. On the Map tab, in the Layer group, click Add Data. Browse to the Naperville folder and double-click NapervilleLidar.slpk.

    The lidar layer is added to your scene.

    3D image of building landscaped with trees

    The lidar points are currently too large, making it difficult to view the shape of the building.

  14. In the Contents pane, right-click NapervilleLidar and click Symbology.
  15. In the Symbology pane, for Symbol size, type 30 and press Enter.

    Change Symbol size on layer.

    The size of each lidar point is reduced, making the shape of the building more visible.

  16. In the Contents pane, turn off the BuildingFootprints and NapervilleLidar layers, and turn on the BuildingShells layer.

    Updated symbology in scene

    The BuildingFootprints layer consists of 2D polygons that you have extruded based on a height attribute. The BuildingShells layer contains true 3D features that are multipatch features that have their 3D properties maintained as part of the geometry and do not require attributes to be extruded and rendered correctly in 3D space. The lidar points line up with the roof shape; the multipatch layer’s (LOD 2) buildings more closely match the real world.

  17. Save the project.

Using procedural building texture

3D models are stored in the geodatabase as multipatch feature classes. A multipatch feature class is the same as other feature class types, like points and polygons, in that it contains per-feature geometry and per-feature attribute values. Additionally, it has specific options for how it can be symbolized.

The exterior shell of a multipatch can be painted in a variety of ways. It might use imagery, like a photo taken from the street, or it might use a color, like its zoning code, or it might be procedurally generated and added in real time. The exterior representation of a multipatch is often referred to generically as its texture. This exercise will use procedural texturing to convert the flat-white buildings into something more useful.

  1. In the Contents pane, expand the BuildingShells layer, and click the symbol to open the Symbology pane.

    Symbol for BuildingShells layer

  2. In the Symbology pane, click the Gallery tab.
  3. Ensure the search is set to All styles. In the search text box, type procedural and press Enter.

    Search procedural style in the Gallery pane

  4. In the results, click Multipatch Facades.

    Multipatch Facades symbol

    Tip:

    To see the full name of a texture, point to the texture.

    The multipatch draws with procedurally generated textures, using the symbol’s default settings.

    Updated scene

  5. In the Contents pane, for the BuildingShells layer, click the symbol.
  6. In the Symbology pane, click the Properties tab, and click the Layers tab.
  7. For Units, click the Set Attribute Mapping button, and in the Set Attribute Mapping window that appears, ensure it is set to Units and click OK.

    Change symbol units using an attribute field.

  8. In the Symbology pane, for Units, choose Feet.
  9. For EaveHeight, click the Set Attribute Mapping button. In the window that appears, choose the EAVEHEIGHT field and click OK.
  10. For Levels, click the Set Attribute Mapping button, and in the window that appears, choose Floor Count and click OK.

    Next, you will set the parameters for the vertical wall stripe texture.

  11. For FacadeTexture, choose Color. For FacadeColor, choose Gray 30%.
    Tip:

    To see the name of a color, point to a color.

    FacadeTexture and FacadeColor parameters

  12. Expand Options and set SeparatorPercentage to 10%.

    Options pane with SeparatorPercentage of 10 percent selected

  13. Click Apply.

    The layer symbology updates.

    Building in 3D

  14. Save the project.

Next, you will add additional vector layers to enhance the appearance of your 3D city block.

Add real-world-sized street elements

Apart from buildings, another commonly managed feature in a city is street furniture, such as benches, light poles, and bus stops. These are important locational elements that residents will be aware of, and refer to, in most urban environments. For this exercise, you only have a small set of example features, but the technique remains the same regardless of feature count.

  1. In the Contents pane, turn on the StreetFurniture layer.
  2. Right-click StreetFurniture and click Zoom To Layer.

    The scene zooms to a part of the city with street furniture.

  3. Pan and tilt the scene to view the StreetFurniture points at an angle relative to the street.

    Add scene street furniture

  4. Zoom in and out of the scene and observe the size of the StreetFurniture symbols.

    Zoomed out image of scene with street furniture

    The points are currently set to screen space size, which means the symbols render with a size based on the pixels on your screen. They are very effective for locational points because they are guaranteed to be seen at all viewing distances. However, they are not useful for representing real-world objects.

    Real-world-sized symbols render with a consistent volumetric size. This is consistent with life-sized interaction with the world, where objects that are farther away appear smaller.

    Next, you will update the symbology for StreetFurniture to real-world sized.

  5. In the Contents pane, right-click the StreetFurniture layer and click Properties.
  6. In the Layer Properties window, click the Display tab, and check the Display 3D symbols in real-world units check box.

    Layer Properties window Display tab

  7. Click OK.
  8. Zoom in and out of the scene and observe the size of the StreetFurniture symbols.

    Zoomed in view of pushpins representing street furniture

    Next, you will replace the pushpins with representative 3D models.

    The StreetFurniture data you are using for this exercise includes unique values to identify light poles and park benches. You will use these unique values in the data to create two classes. You can then apply a different 3D model symbol to each class. For your own data, you can use as many classes as you need.

  9. In the Contents pane, ensure the StreetFurniture layer is selected. On the ribbon, click the Feature Layer tab.
  10. In the Drawing group, click the Symbology drop-down arrow and choose Unique Values.

    Symbology drop-down showing Unique Values selected

  11. In the Symbology pane, for Field 1, confirm TYPE is selected.

    Symbology - StreetFurniture with Unique Values Field 1 showing TYPE

  12. On the Classes tab, click the Add All Values button.

    Update symbology classes.

  13. Click More and uncheck Show all other values.

    Show all other values selected

    Next, you will modify each type of street element.

  14. Click the symbol for Light.

    Symbology pane with Light selected as a modification

  15. Click the Gallery tab and search for light in All styles.

    Search gallery for symbols.

  16. In the 3D Street Scene section of the results, select the Overhanging Street – Light off symbol.

    3D Street Scene with Overhanging Street symbol selected

    The scene updates and lights are now displayed with overhanging street lights symbols.

    Review updated symbology in scene.

  17. At the top of the Symbology pane, click the back arrow, and on the Classes tab, click the symbol for the Park Bench.
  18. Search for bench in All styles and choose the Park Bench 2 symbol.

    Search for bench symbols in the Symbology pane.

    The points are now displayed with realistically sized models, but they are facing the wrong direction relative to the street.

    3D image with park benches facing the wrong direction

    Next, you will set attribute-driven rotation for the symbols.

  19. At the top of the Symbology pane, click the back arrow. Click the Vary symbology by attribute tab and expand Rotation.

    Rotation section on the Vary symbology by attribute tab

  20. For Direction (Z), choose ROTATION. For Rotation Style, choose Geographic.

    Rotation configurations

    The light symbols are rotated to hang over the street, and the street benches now face each other.

    Street benches facing each other

  21. Save the project.

The rotation values were precalculated for this data. For your own content, you can manually enter values for a few features, or use geoprocessing tools against nearby streets for many features.

Add thematic trees

Another primary element of most cities is vegetation and street trees. You can use the same technique for tree point features as you did for street furniture—that is, create a set of unique classes and define the symbols.

  1. On the Map tab, click Add Data and browse to the Naperville folder you downloaded and browse through the folders NapervilleAdditionalData.gdb and DS, and double-click TreePoints.

    Add Data window with TreePoints selected

    The TreePoints layer is added to the Contents pane.

  2. Click the symbol for TreePoints and search the gallery for trees and under 3D Vegetation- Thematic select Basswood.

    Ad Basswood tree symbol.

    Trees have been added to the map but they lay flat. You need to add in height for the trees to be their correct height.

  3. In the Contents pane, right-click the TreePoints layer and open the Properties.
  4. In the Layer Properties click the Elevation tab and set the following:
    • For Features are choose At an absolute height.
    • For A field choose HEIGHT.

    Set height for trees

    The Elevation has been set to the height field for each tree.

  5. Click OK.
  6. If necessary, zoom out to better view the added TreePoints layer.

    All symbology changes for preset layers are automatically applied, and the TreePoints layer, with the applicable height defined for each feature, is added to the scene.

    Street tree features shown in 3D

Create useful bookmarks

The city scene is looking good, but it can be difficult to get to specific locations, especially if you are not familiar with the geography of Naperville. Bookmarks store important viewpoints in the scene and can help users quickly zoom to key locations in the scene.

  1. On the Map ribbon tab, in the Navigate group, click Bookmarks and click Manage Bookmarks.

    Manage Bookmarks

    The Bookmarks pane appears.

  2. In the scene, navigate to a view that shows a ground-level view of the street furniture features.

    Ground-level view of the scene

  3. In the Bookmarks pane, click New Bookmark.

    Bookmarks pane with New Bookmark selected

  4. In the Create Bookmark window, for Name, type Street Furniture and click OK.

    Create Bookmark window

    Earlier in this tutorial, you used a bookmark to zoom to an example of a pitched roof. You no longer need this bookmark for the scene, so you will delete it.

  5. In the Bookmarks pane, hover over Pitched Roof and click the Remove button.

    Remove button selected in the Bookmarks pane

    Some cities have well-known landmarks or points of interest. It can be helpful to create bookmarks for these locations so users can get there quickly. You will create an additional bookmark for the local high school.

  6. On the Map tab, in the Inquiry group, click Locate.

    Locate

  7. In the Locate pane, in the search text box, type Naperville Central High and press Enter.

    Locate pane with Naperville Central High typed in the search box

    The search will locate the high school and zoom the view, so it is centered on the screen.

    Search result using the Locate tool

  8. Navigate closer to the school and pan or tilt the map to the scene view you want to bookmark.
    Tip:

    You can zoom by right-clicking and dragging across the scene.

    Closer view of Naperville High School to create a bookmark

  9. In the Bookmarks pane, click New Bookmark. In the Create Bookmark window, for Name, type Naperville HS and click OK.

    You now have three bookmarks that your audience can access when navigating the 3D scene.

    Note:

    You can add as many additional bookmarks as you like. If you share this scene to the web, the bookmarks are automatically included as slides in the online scene viewer.

  10. Save your project and close ArcGIS Pro.

Many scenes are focused on modeling a realistically sized and shaped representation of the world for workflows such as visual impact, construction planning, and environmental impact studies. These scenes tend to use real-world-sized symbols that are tied to individual feature attributes, especially for properties such as rotation, width, and height.

The use of thematic elements is still encouraged, but primarily through colors and textures that don’t impact the volumetric shape of the features. In this tutorial, you used procedural texturing on the buildings to differentiate the roof from the walls and indicate the number of floors. You also considered how users would interact with the scene by including bookmarks to show key view points.

You can find more tutorials in the tutorial gallery.