I3S Geospatial Contribution

A year ago we started to explore 3D formats for geospatial technologies: I3S and 3DTiles. We started with conversion between these two formats. Thanks to Unfolded and their ‘visgl’ code base for visualisation of geospatial data, we had a fast and easy start in our development. More than this interaction with ESRI customer allows us to understand two geospatial data formats such as 3DTiles and I3S. During this journey we found out that 3D graphics data has a very complicated structure and 3D graphics data for maps is even more complicated. There is a lot of extra information stored to show 3D objects on a map correctly.

It wasn’t surprising that in such complex structures of data there could be mistakes. Some mistakes are really hard to find with general visualization use cases. It was the starting point of making a number of features to validate data that is usually hidden from some user’s eyes.

The result of this work is the “I3S Debug Application” that is hosted on the http://loaders.gl website. For example the user can stop nodes loading and look at a specific node from a different point of view. Another feature is coloring – the user can recolor nodes to see data segmentation.

There are implemented a lot of features which are really specific for the area such as visualisation of frustum culling, bounding volumes, normals visualization, debug textures and more. It is hard to understand for a random person but demonstrates our deep expertise in those kinds of technologies.

By the way we implemented new features of I3 S format that weren’t implemented in ‘visgl’ before. For instance, feature picking when the user can select a particular building on a map and see information about this building.


Tile Converter

There are some well known formats of 3D geospatial content such as 3DTiles and I3S.I3S and 3DTiles generally have same tree structure which is wide-used in geospatial for maps tiling. The only difference is that every tree node is 3D model with some extra metadata. The tree node is called “node” in I3S and “tile” in 3DTiles. So if we look deeper – inside a node, we will see that both formats have corresponding parts which are presented on the slide.

The tile-converter is a command line utility (CLI) for two-way batch conversion between the 3DTiles and the I3S formats. It can load the tileset to be converted directly from an URL. The main idea that user should not be hostage of the particular tileset format. User should able to choose format which he really wants to work with. Tile-converter is open sourse product which is available as npm package and documents you can find on the loader.gl website.


 

I3S App

ANother product related to the I3S-APP. Now we want to show you some new features which we implemented in I3S-Application on the loaders.gl website.

I3S Feature picking Functionality:

I3S “3DObject” type dataset has mesh segmentation. Every segment called “feature”. For example it can be a building. Usually node contain geometry mesh and there could be a lot of buildings inside. The segmentation is done with additional geometry attribute called “featureIds”. In the most simple case we have marked every triangle vertex with some “featureId” that says – “this vertex is a part of building A”.

There is a special 3D trick to pick triangles bound with some specific feature. Mostly this logic was already done in deck.gl but we improved it to pick not whole mesh but also a segment of a mesh. So in the picture on the slide you can see buildings with different featureIds.

Feature Attributes

Another opportunity of segmentation is feature attributes. It is a feature specific information stored in dataset. Feature attributes are table bound with geometry in a very logical way – one of a column in this table is featureId. So we can bind feature in geometry with some specific row in feature attributes. It allows us to get some information. For example some details about selected building. Another part of work is related to I3S 1.7 format.

I3S 1.7 Format

I3S 1.7 format brought some useful features. The most of them are for performance improvement: DRACO-compressed geometry and compressed textures, node pages. Additional good feature is GLTF-compatible format of material.

Node pages:

In older versions every node’s metadata was stored in separate json. That was bad for performance because every node require separate http request. This is the place where node pages come in. Node pages is node hierarchy flattened in one dimensional array. Every node page contain information about 64 (by default) nodes. As many nodes have same metadata – the most of node’s metadata was moved to dataset-level metadata (information about geometry attributes, material definitions, attributes metadata).

Draco compression:

I3S 1.7 format brings draco compressed data.
DRACO is wide-used encoder for 3D geometry data and I3S supports it from 1.7 version.Now I3S-App can handle compressed data which increase loading performance.

PBR materials:

From 1.7 version node’s material is stored in GLTF compatible format – PBR material. That opens great opportunities for creating realistic models – and we made it supported in visgl.

Compressed textures:

As for compressed textures – I3S use *.dds format. As soon as compressed texture is processed on the GPU level it can be incompatible with a specific device. On that case – every node has alternative texture in JPEG/PNG format. Using them is not so good because JPEG and PNG are decoded on the CPU level to ImageBitmap that takes a lot of memory.

I3S Debug App

During this journey we found out that 3D graphics data has a very complicated structure and 3D graphics data for maps is even more complicated. There is a lot of extra information stored to show 3D objects on a map correctly.

It wasn’t surprising that in such complex structures of data there could be mistakes. Some mistakes are really hard to find with general visualization use cases. It was the starting point of making a number of features to validate data that is usually hidden from some user’s eyes.The result of this work is the “I3S Debug Application” that is hosted on the loaders.gl website.