10 million of gltfs in a scene

Hi all.

I am quite new in WEB frameworks.
I have been playing with CESIUM, XEOGL, AFRAME, TREEJS and BABYLON.
My problem is quite simple.
I need to load a very complex scene composed by 10 million of gltf models.
I have headrd that this is possible using 3d TILES implementation of CESIUM, but to be frank with you, I have not been able to make it work.
With the previously mentioned WEBGL Frameworks the limit of models I have been able to visulize was about 5000 models.

I have tried to use octrees and mesh simplify options(in babylonjs) but without success. The problem is that when I start the load of the gltf models, the memory consumed by the brower increased and increased until my PC was full (I have 32GB of RAM)

The idea I had was to load all models in invisible mode and make only visible those models which are in the scope of the camera.

The point is that in CATIA I am able to load the same amount of information with CGR simplified format.

I heard that GLTF was very fast, but by now I am not really impressed.

May be my problems is that I am missing something.

The goal is to be able to load a very complex industrial assemby but though the web.

I will be waiting for your answers.

Loading millions of individual models will not work well because even models that are out of view are still loaded into memory, even if they aren’t rendered.

You should look into 3D Tiles again is this is one of the key use cases, to stream and render millions of models efficiently. Models can be batched together into the same tile to reduce the number of draw calls which will really help performance. Also tiles are only loaded as they come in view, and unloaded when out of view depending on cache settings, so the memory situation will be much improved.

Right now we are developing tiling tools for large datasets like this and would be happy to try out your data. If you’d like, you can send it to me at slilley@agi.com.

Hello, in my case, I am trying to use Cesium to represent entire cities from a CityGML database. The official "Importer - exporter" tool by 3dcitydb converts CityGML data to multiple buildings divided by sub - folders in COLLADA and GLTF format, organized by one kml. They can be represented in Google Earth although my intention is to use Cesium because it is an incredible tool.

After converting all files to 3dm with 3d-tiles-tools I find in the problem of the creation of "tileset.json" and that the gltf correspond to individual buildings not to groups of buildings

I have based myself on the New York demo for it.

I think Cesium will be the first option to represent geographic information and I would like to create open source tools so that more people can do it.

Sorry of my bad english

Dear Sean.

Many thanks for you frankness and for your quick response.

The problem of 3dtiles is not to convert the glb models into b3dm or i3dm, I have tried the conversors and they work fine.

My problem is that I don't know the Region Box of each model. To be frank with you, the 3d tile documetation I have found is not enough.

I guess that as I am trying to render a big assembly I should use a mix of instanced tileset with hierarchy, but not really sure. As I am working for a Aeronautic Defense company I am not allowed to send 3d models.

I am trying to find another oclussion culling solution, but the only framework that in theory supports it is Unity, the only framework I have not yet tried.

Could you send me more information about how to work with 3d tiles. For me the way how tileset.json is the trick. I guess I will need to know the following information:
1.- Bounding Box for each instanced model
2.- Hierarchy --> Got from Catia Product Structure

The goal is to be able to render a full plane in 3D just using a web browser.

Many thanks in advanced.

Dear all.

I am looking again in 3d tiles approach.

Is there any possibility to avoid usage of WGS84 coordinates when creating the file tileset.json?

In the documentation I think it is confirmed that Cartesian coordinates can be used instead, but I have not seen any example.

Could you provide me the instructions about how to set the BoundingVolume.region in this way?

Many thanks in advanced for your great support.

Best regards

Hi jmartinez,

The tools in 3d-tiles-tools are pretty basic and do not handle creating the tileset.json or batching models together. You will need to use the geographic information in the kml to group buildings that are close together and then combine them into a single glTF, however there aren’t very many existing libraries for this. Like I mentioned before, we are developing tools for this and would be happy to look at your data set.

In addition to WGS84 regions 3D Tiles supports bounding boxes (Cartesian) and bounding spheres. For the most detailed description check out the schema: https://github.com/AnalyticalGraphicsInc/3d-tiles/blob/master/schema/boundingVolume.schema.json.

For an example of using a box, check out the tileset located at cesium\Specs\Data\Cesium3DTiles\Batched\BatchedWithTransformBox.

Dear Sean.

I have been trying to use 3d tiles approach in order to solve my massive GLTF models.

I have some problems to use json tileset files because it is not possible for me to find out or compute bbox information for all intermediate levels of assemblies I am trying to load.

I have read that I can use external tilesets, but I have no idea how to use them. I was not able to find any valid example.

Another question I have is if occlusion culling is enabled by default in 3d tiles implementation or has to be programmed in a non transparent way.

In the tests I have done my feeling is that occlusion culling is not enabled by default. You can imagine my problem when I will try to load the full plane but only want to show visible parts.

Many thanks in advanced for your support

Dear all.

I am trying to convert from DAE to 3DBM, but when I try to load the model in 3d tiles I get different errors depending on the parameters I use in the different convertors I use.

Finally I was able to find the correct options which allow me to render the model in b3dm format, but the file is not properly displayed.

I have tried to find the steps in the WEB but there is no documentation at all.

These are the steps I Use with one model from DAE to 3DBM:

E:/MDEX-MIRA/BIN/collada2gltf.exe -f M2825072300100_E4.dae -e -k
converting:M2825072300100_E4.dae ... as M2825072300100_E4.gltf
[geometry] 8890452 bytes
[animations] 0 bytes
[scene] total bytes:8890452
[completed conversion]
Runtime: 1.36 seconds

E:/MDEX-MIRA/python/App/python E:/MDEX-MIRA/bin/gltf2glb-master/gltf2glb.py E:/MDEX-MIRA/OUT/pruebaBB/GLTF/M2825072300100_E4.gltf -c -o E:/MDEX-MIRA/OUT/pruebaBB/GLB/M2825072300100_E4.glb

GLB to B3DM:
I:/DATALAKE/node-v6.10.1-win-x64/node.exe I:/DATALAKE/nginx-1.10.3/html/node_modules/3d-tiles-tools-master/tools/bin/3d-tiles-tools.js glbToB3dm -i E:/MDEX-MIRA/OUT/pruebaBB/GLB/M2825072300100_E4.glb -o E:/MDEX-MIRA/OUT/pruebaBB/B3DM/M2825072300100_E4.b3dm

Could anybody support me with this problem?

Best regards

Hi again,

Loading external tilesets won’t solve the problem of knowing the bounding boxes of intermediary tiles. If it helps, you can usually find the dimensions of the glTF model by looking at the min and max of its POSITION accessor.

Occlusion culling is not supported at the moment, only frustum culling.

Those steps for converting dae to b3dm seem correct to me. Is the tile just not visible when loaded in Cesium?

Dear Sean.

I have tried to indentify the root cause of the problema about collada to b3dm format, and I have found that the problema seems to be linked to the conversión from gltf to glb.

Could you tell me which are the steps you follow to convert from collada to B3DM?

Many thanks in advanced.

I would use those same steps. If you try to load the gltf or glb directly in Cesium like in the Models sandcastle demo do they show up? Are there any errors?