Skip To Content ArcGIS for Developers Sign In Dashboard

Build a new scene

Scenes are the fundamental document type used for persistence and sharing of 3D content across the ArcGIS platform. To learn about opening scenes from ArcGIS Online and Portal, see Display a scene. This guide describes how to create a new scene programmatically, add content, and display the scene in your app.

The data you visualize in your 3D app is defined by the scene class. The types of data you can display in a scene include:

  • Basemaps, which can be draped over surface layers. A surface layer contains elevation information. Other layer types can also be used as a basemap; there are no special restrictions for basemaps in scenes.
  • Operational layers, which can include feature layers or scene layers. Scene layers represent built and natural 3D content such as buildings, trees, valleys, and mountains and can be accessed as scene services or local scene layer packages.
  • Surface layers, which define the elevation information of the 3D visualization. A surface layer can come in many forms, for example, local raster data such as a DEM or DTED or from an ArcGIS image service.
To learn more about the types of layers that can be used in scenes, see Layer types described. To learn more about the content that can be used in maps and scenes, see Layers and tables.

Add a scene layer from a service or package

  1. Declare a SceneView.

    SceneView {
        id: mySceneView
        objectName: "sceneView"
        anchors.fill: parent

  2. Create a Scene. You can do this by declaring it inside the SceneView that will use it, or you can declare them separately, and later in a function, assign the Scene to the SceneView (as in this example).

    Scene {
        id: cityScene
        BasemapTopographic {}
        Surface {
            ArcGISTiledElevationSource {
                url: ""
        ArcGISSceneLayer {
            url: ""
    Camera {
        id: cityCamera
        location: Point {
            x: -4.48261 // longitude
            y: 48.3983  // latitude
            z: 300.0    // elevation
            spatialReference: SpatialReference.createWgs84()
        heading: 347.0
        pitch: 55.0
        roll: 0.0
    function displayCity() {
        mySceneView.scene = cityScene;

  3. You may want to set the camera (set an initial viewing position) or add graphics.

You can see a complete code example in the QML sample Display Scene Layer.

Add a 3D surface (terrain)

Add a surface layer to a scene with a basemap for 3D visualization in your app.

Adding a surface layer to create a 3D visualization.

  1. Create a Scene, and create a Surface within the Scene.

    Scene {
        id: mountainScene
        BasemapImagery {}
        Surface {
            ArcGISTiledElevationSource {
                url: ""

Subsurface navigation

The camera can be navigated below the surface when the surface has been enabled to allow subsurface navigation. To allow the camera to move below the surface set the surface's navigation constraint to None. If you wish to keep the camera above the surface set the surface's navigation constraint to Stay Above, the default value.

The opacity property of the surface object allows users to see objects both above and below the surface. Opacity has a multiplicative effect on the opacity of each of the base layers and the background grid.

Set the camera

The position you view the scene from is defined by a Camera. Define the following properties when you create a new camera:

  • 3D location—Latitude, longitude, and altitude
  • Heading—Direction the camera is pointing
  • Pitch—Up and down angle of camera

Camera {
    id: camera
    heading: 10.0
    pitch: 80.0
    roll: 0.0

    Point {
        x: 83.9
        y: 28.4
        z: 10010.0
        spatialReference: SpatialReference { wkid: 4326 }

You can see the complete code in the QML sample Display a scene.

Example of a 3D scene as viewed from a camera.

Create a scene layer package and local elevation source

ArcGIS Pro allows you to  create a scene layer package using a geoprocessing tool. You can add this local scene layer package ( .slpk) as a scene layer  ( ArcGISSceneLayer) to your ArcGIS Runtime app and add it to a Scene. To display the scene layer package, create a new scene layer with a URL pointing to a local scene layer package.

To take this scene layer offline your app can define an elevation surface by consuming local raster datasets on the client. The following formats are supported for creating a local elevation source:

  • CIB1, 5, 10
  • DTED0, 1, 2
  • GeoTIFF
  • HFA
  • HRE
  • IMG
  • JPEG
  • JPEG 2000
  • NITF
  • PNG
  • RPF
  • SRTM1, 2