Skip to content

Commit

Permalink
I3S Spec Ver. 1.5 update follow on installs
Browse files Browse the repository at this point in the history
  • Loading branch information
Tamrat-B committed Sep 15, 2016
1 parent 8105c62 commit 506173b
Show file tree
Hide file tree
Showing 10 changed files with 2,345 additions and 2,325 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
Scene Layers: Service and Package Specification
===============================================

![App](./sceneLayers.jpg "Multiple Scene Layers in Web Scene Viewer")[http://www.arcgis.com](http://www.arcgis.com/home/webscene/viewer.html?webscene=196b89953b2d4e7d9fb1ada5997d3391&viewpoint=cam:-4.18890092,34.70563622,20953545.907;358.044,0.117)
![App](./sceneLayers.jpg "Multiple Scene Layers in Web Scene Viewer")[http://www.arcgis.com](http://www.arcgis.com)

This repository hosts the specification for Scene Layers which are containers for arbitrarily large amounts of geographic data. The delivery format and persistence model of a Scene Layer, referred to as Indexed 3d Scene layer (I3S) and Scene Layer Package (\*.slpk) respectively, are specified in detail in this repository. Both formats are encoded using JSON and binary ArrayBuffers.
This repository hosts the specification for Scene Layers which are containers for arbitrarily large amounts of geographic data. The delivery format and persistence model for Scene Layers, referred to as Indexed 3d Scene Layer (I3S) and Scene Layer Package (SLPK) respectively, are specified in detail. Both formats are encoded using JSON and binary ArrayBuffers.

I3S originated from investigations into technologies for rapidly streaming and distributing large volumes of 3D content across enterprise systems that may consist of server components, cloud hosted components, and a variety of client software from desktop to web and mobile applications.

Expand All @@ -21,7 +21,7 @@ The following layer types are planned for future inclusion:
- Polygon Features (e.g. from GIS Data)
- Pointclouds (e.g. from LiDAR)

The specification for [Indexed 3d Scene Layer (I3S)](./format/Indexed%203d%20Scene%20Format%20Specification.md) and [Scene Layer Package (\*.slpk)](./format/Indexed%203d%20Scene%20Format%20Specification.md), as well as the specification for accessing I3S resources as [Scene Service REST](./service/SceneService.md) endpoints, are presented here as open formats.
The specification for [Indexed 3d Scene Layer (I3S)](./format/Indexed%203d%20Scene%20Layer%20Format%20Specification.md) and [Scene Layer Package (\*.slpk)](./format/Indexed%203d%20Scene%20Layer%20Format%20Specification.md), as well as the specification for accessing I3S resources as [Scene Service REST](./service/SceneService.md) endpoints, are presented here as open formats.


## Designed for Web, Mobile and Cloud
Expand Down

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions format/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

The document <em>Indexed 3d Scene Format Specification.md</em> is renamed to <em>Indexed 3d Scene Layer Format Specification.md</em> and is located [here](./Indexed 3d Scene Layer Format Specification.md).
6 changes: 5 additions & 1 deletion profiles/meshpyramids/examples/3dSceneLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
}
],
"topology": "PerAttributeArray", // one of ["PerAttributeArray", "Indexed"]. When "Indexed", the indices must also be declared in the geometry schema ("faces") and precede the vertexAttribute data.
"ordering": ["position", "normal", "uv0", "region"], // provides the order of the keys in vertexAttributes and faceAttributes, if present.
"ordering": ["position", "normal", "uv0", "color", "region"], // provides the order of the keys in vertexAttributes and faceAttributes, if present.
"vertexAttributes": { // the vertex attributes must appear in the order that they are declared here.
"position": { // the name of the vertex attribute; here: vertex positions
"valueType": "Float32", // the element type, from {UInt8, UInt16, UInt32, UInt64, Int16, Int32, Int64, *Float32*, Float64}
Expand All @@ -73,6 +73,10 @@
"valueType": "Float32", // the element type, from {UInt8, UInt16, UInt32, UInt64, Int16, Int32, Int64, *Float32*, Float64}
"valuesPerElement": 2 // number of (Float32) values need to make a valid element (here a texture coordinate that will be normalized)
},
"color": { // the name of the vertex attribute; here: color as RGBA
"valueType": "UInt8", // the element type, always UInt8 for color value
"valuesPerElement": 4 //number of (UInt8) values need to make a valid element (here a color in RGBA format)
},
"region": { // per-vertex region info. analogous to textureDefinitions.regions in sharedResource. Values define uv-coordinates of region borders: [umin, vmin, umax, vmax]
"valueType": "UInt16", // the element type, always UInt16 for region info
"valuesPerElement": 4 // number of (UInt16) values need to make a valid element (here a region info)
Expand Down
25 changes: 15 additions & 10 deletions profiles/meshpyramids/meshpyramids.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# i3s profile: Meshpyramids (MP)
# i3s profile: Mesh-pyramids (MP)

## Summary

*What this profile is for:* This profile implements the 3DObjects layer.
*What this profile is for:* This profile is implemented by the 3D Object and Integrated Mesh layer types.

## Access Pattern

<p>This section describes how a client is expected to load and handle resources from an Indexed 3D Scene using the Meshpyramids profile.
<p>This section describes how a client is expected to load and handle resources from an Indexed 3D Scene Layer using the Mesh-pyramids profile.
The general pattern consists of these phases:</p>

1. Handshake & capabilities negotiation: The client ensures that the service has the expected resources and that client and server have a common set of capabilities. Within this phase, the client utilizes the following resources:
Expand All @@ -18,8 +18,9 @@ The general pattern consists of these phases:</p>
1. SharedData: Material defintions, shared geometries for instancing
1. GeometryData: Geometry attributes such as positions and indices
1. TextureData: Images used as texture maps
1. Identify: Additional resoruces belonging to a node are accessed only if needed, e.g. for an Identify operation.
1. FeatureData: Attributes of GIS features, accessors to GeometryData and TextureData
1. AttributeData: Attribute data of features used for attribute-based symbolization (as indicated by the DrawingInfo object in the 3dSceneLayer resource)
1. Identify: Additional resources belonging to a node are accessed only if needed, e.g. for an Identify operation.
1. AttributeData: If the AttributeData resources of the node have not already been fetched (in step 3 above) client application can request the desired attribute data.

A familiar access pattern based on a single tree data structure is proposed for view frustum culling, level-of-detail selection, and rendering. The following pseudo code illustrates the recommended pattern when navigating an index tree using Mesh Pyramids.

Expand Down Expand Up @@ -55,7 +56,7 @@ Additional notes:

## Schema

The meshpyramids profile makes use of all 7 main resource types and allows a restricted set of properties. It takes away some flexibility and features for a gain in performance, e.g. by making the FeatureData resource optional. Note the FeatureData resource is optional for this profile, hence the 3dSCeneLayer resource must contain a DefaultGeometrySchema.
The meshp-yramids profile makes use of all 7 main resource types and allows a restricted set of properties. Note that the FeatureData resource is optional for this profile, hence the 3dSceneLayer resource must contain a DefaultGeometrySchema.

### SceneServiceInfo

Expand All @@ -65,20 +66,24 @@ No specific profile.

Note that in this profile, the defaultGeometrySchema is mandatory.

[Meshpyramid 3dSceneLayer](./rules/docs/3dSceneLayerRules.html)
[3dSceneLayer](./rules/docs/3dSceneLayerRules.html)

### 3dNodeIndexDocument

There is always exactly 1 geometry and texture resource per node.

[Meshpyramid 3dNodeIndexDocument](./rules/docs/3dNodeIndexDocumentRules.html)
[3dNodeIndexDocument](./rules/docs/3dNodeIndexDocumentRules.html)

### AttributeData

Attribute data for all features in a node is stored and made available as discrete, per field resource called **_attribute_**. The number of attribute resources correspond to the number of feature data <em>fields</em> that are chosen to be included along with the 3d Scene Layer cache.

### FeatureData

The FeatureData is optional with this profile.

[Meshpyramid FeatureData](./rules/docs/FeatureDataRules.html)
[FeatureData](./rules/docs/FeatureDataRules.html)

### SharedResources

[Meshpyramid SharedResources](./rules/docs/SharedResourceRules.html)
[SharedResources](./rules/docs/SharedResourceRules.html)
2 changes: 1 addition & 1 deletion profiles/points/examples/3dNodeIndexDocument.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
Example i3s 1.3 3d Node Index Document Resource for the points profile.
Example i3s 1.5 3d Node Index Document Resource for the points profile.
*/
{
"id": "5-1", // Tree Key ID. This node is thus two level below the root node. On the first level, it's the fifth node, on the second level, it's the first. The 0 is always the root node.
Expand Down
15 changes: 14 additions & 1 deletion profiles/points/examples/3dSceneLayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,19 @@
"id": 0, // the ID of this layer, unique within a 3dSceneService.
"version": "ee4fbf04-e882-444e-854d-cd519b68594a", // the newest version (store update session ID) of this layer.
"name": "BusStops", // the name of this layer.
"spatialReference": // The spatialReference of the layer including the vertical coordinate system. wkt is included to support custom spatial references
{
"wkid": 4326,
"latestWkid": 4326,
"vcsWkid": 3855,
"latestVcsWkid": 3855,
"wkt": "GEOGCS[\"GCS_WGS_1984\",DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],VERTCS[\"EGM2008_Geoid\",VDATUM[\"EGM2008_Geoid\"],PARAMETER[\"Vertical_Shift\",0.0],PARAMETER[\"Direction\",1.0],UNIT[\"Meter\",1.0]]}"
},
"heightModelInfo": { //enables consuming clients to perform quick test whether this layer is mashable or not with exisitng content they have.
"heightModel": "orthometric", //one of {*"orthometric"*, "ellipsoidal"};
"ellipsoid": "wgs84 (G1674)/", //datum realization
"heightUnit": "meter" //units
},
"alias": "Bus Stops", // the display alias to be used for this layer.
"description" : "This layer contains Bus Stop features for the City of Zurich.\n", // Cache description
"copyrightText" : "ZVV", // copyright/usage information
Expand Down Expand Up @@ -67,7 +80,7 @@
"alias" : "Color"
}
],
"drawingInfo": { // The default symbology to use on this layer. Check the webscene-spec (https://devtopia.esri.com/Zurich-R-D-Center/webscene-spec) for full information.
"drawingInfo": { // The default symbology to use on this layer. Refrer to https://developers.arcgis.com/web-map-specification/objects/renderer
"renderer": {
"type": "simple",
"symbol": {
Expand Down
2 changes: 1 addition & 1 deletion profiles/points/examples/FeatureDataPoints.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
Example i3s 1.3 Feature Data Resource for the points profile.
Example i3s 1.5 Feature Data Resource for the points profile.
*/
{
"featureData": [
Expand Down
18 changes: 7 additions & 11 deletions profiles/points/points.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,29 @@
# i3s profile: Features-Points (FP)
# i3s profile: Points

## Summary

*What this profile is for:* Support for points and multipoints with symbolisation and feature-tree-based LoD. Does not use external ArrayBufferGeometries. It is not recommended for massive multipoint features - these should use the pointclouds profile instead.
*What this profile is for:* Support for points and multipoints with symbolization. Does not use external ArrayBufferGeometries.

## Access Pattern

<p>The access pattern is identical to that of the Features-Meshes profile, only that no Geometry resources have to be loaded.</p>
<p>The access pattern is identical to that of the mesh-pyramids profile. The profile utilizes different Lod selection metrics (<code>screenSpaceRelative</code>, <code>distanceRangeFromDefaultCamera</code>).</p>

## Schema

The features-points profile makes use of 6 main resource types and allows a restricted set of properties.
The points profile makes use of 5 main resource types and allows a restricted set of properties.

### SceneServiceInfo

No specific profile.

### 3dSceneLayer

[features-points 3dSceneLayer](./rules/docs/3dSceneLayerRules.html)
[points 3dSceneLayer](./rules/docs/3dSceneLayerRules.html)

### 3dNodeIndexDocument

[features-points 3dNodeIndexDocument](./rules/docs/3dNodeIndexDocumentRules.html)
[points 3dNodeIndexDocument](./rules/docs/3dNodeIndexDocumentRules.html)

### FeatureData

[features-points FeatureData](./rules/docs/FeatureDataRules.html)

### SharedResources

[features-points SharedResources](./rules/docs/SharedResourceRules.html)
[points FeatureData](./rules/docs/FeatureDataRules.html)
16 changes: 8 additions & 8 deletions service/SceneService.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,55 +25,55 @@ This is the REST API for retrieval of these resources:

- *URL Pattern*: ```http://<hostname>/arcgis/rest/services/```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/">http://3dcities.maps.arcgis.com/arcgis/rest/services/</a>
- *Example Service*: [http://3dcities.maps.arcgis.com/arcgis/rest/services/](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services)
- *Returns*: A List of all services running on the server instance.

### 3dSceneServiceInfo

- *URL Pattern*: ```<ags-base-url>/<server-name>/SceneServer```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer">http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer</a>
- *Example Service*:[http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer)
- *Returns*: Scene Service metadata and list of available layers.


### 3dSceneLayerInfo

- *URL Pattern*: ```<scene-server-url>/layers/<layer-id>```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0">http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0</a>
- *Example Service*:[http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0)
- *Returns*: Detailed information about single layer, including symbology, field schema, and profile/store metadata, with a link to the root 3dNodeIndexDocument

### 3dNodeIndexDocument

- *URL Pattern*: ```<layer-url >/nodes/<node-id>```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0">http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0</a>
- *Example Service*:[http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0)
- *Returns*: A file describing a single node in the spatial index, with links to all associated resources such as FeatureData, textures, Geometry and SharedResources

### SharedResources

- *URL Pattern*: ```<node-url>/shared/```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0">http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0</a>
- *Example Service*:[http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0)
- *Returns*: A feature data resource (bundle)

### FeatureData

- *URL Pattern*: ```<node-url>/features/<feature-data-bundle-id>```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0">http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0</a>
- *Example Service*:[http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/features/0)
- *Returns*: A feature data resource (bundle)

### GeometryData

- *URL Pattern*: ```<node-url>/geometries/<geometry-data-bundle-id>```
- *Method*: ```GET```
- *Example Service*: <a href="http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/geometries/0">http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/geometries/0</a>
- *Example Service*: <a href=[http://3dcities.maps.arcgis.com/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/geometries/0](http://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/New_York_LoD2_3D_Buildings/SceneServer/layers/0/nodes/5-1-0-0-0/geometries/0)
- *Returns*: A geometry data resource (bundle)

### TextureData

- *URL Pattern*: ```<node-url>/textures/<texture-data-bundle-id>```
- *Method*: ```GET```
- *Example Service*: <a href="http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_San_Francisco/SceneServer/layers/0/nodes/1-3-0-0-0-0-0-0-0/textures/0_0">http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_San_Francisco/SceneServer/layers/0/nodes/1-3-0-0-0-0-0-0-0/textures/0_0</a>
- *Example Service*:[http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_San_Francisco/SceneServer/layers/0/nodes/1-3-0-0-0-0-0-0-0/textures/0_0](http://scene.arcgis.com/arcgis/rest/services/Hosted/Buildings_San_Francisco/SceneServer/layers/0/nodes/1-3-0-0-0-0-0-0-0/textures/0_0)
- *Returns*: A texture data resource (bundle). Refer to the i3s format specification for details on how different encodings and resolutions are encoded.

0 comments on commit 506173b

Please sign in to comment.