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.
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.
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).
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.
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.
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.