Solved

Cesium 3DTiles generated has performance Issue

  • 12 April 2024
  • 5 replies
  • 85 views

Badge +2

Hi,

I am trying to use FME 2023 version to convert OBJ into Cesium 3DTiles.

While the conversion is successful, I notice that it causes our application to becomes sluggish, and it also consumes alot more resources. The application I am using is Luciad (https://dev.luciad.com/) and the software vendor has given the following feedback after investigating the Cesium 3D Tiles data:
1. The number of .b3dm tiles generated are too few, resulting in each .b3dm being to "heavy" for loading & rendering.
2. No sufficient number of "level of details" 

To demostrate that, I created a small sample and uploaded to https://drive.google.com/file/d/1FYMHx977zB_NAJa74nqMfmLvlMqWKPog/view?usp=sharing.
1. Large .b3dm files
    a. The .obj that I convert to Cesium 3D Tiles has 330K triangles.
    b. Only 2 .b3dm files were created. But it should have at least 33 .b3dm files (330K/10000) since I am using 10000 for Maximum Number of Triangle Faces Per Tile (see 3dtiles_setting.png)
    c. It seems like the FME 3DTiles writer does not respect this parameter: Maximum Number of Triangle Face Per Tile.
    d. This results in too many vertices in each .b3dm file, causing the performance issue we have encountered?
    e. Is there other parameters that I can use to generate smaller .b3dm files?
2. Additional "level of details"
    a. This sample does not generated additional "level of details" since the sample is pretty small.
    b. But I have tested with much larger .obj, and the number of "level of details" produced is also much lesser compare to the one generated by Luciad own converter.
    c. Is there any parameters in FME that allows me to have finer control of the "level of details" to be generated?

regards.

icon

Best answer by kiabee 18 April 2024, 04:55

View original

5 replies

Badge +6

Thanks for your question and the attached example source data. I downloaded your example and did some testing. As you suggested, changes to the max faces per tile writer parameter did not seem to have any effect on the output. Instead, I pushed everything through a Tiler and tiled 7x7. This yielded 47 tiles all of which are significantly smaller than. Tiler and Clipper support for surfaces is not something that is very well known - we added this support about 2 years or so ago.

Note that we have a work package that we are planning to implement in the next few quarters to update both our 3D tiles and I3S writing. One aspect of this will be better optimization of the tile structure. Another aspect is adding support for level of detail. Note that level of detail for 3d tiles and I3S is very different from CityGML LOD. The effect is to have simpler representations at different viewing distances for the purposes of faster rendering for items that are farther away. This is different to specific representations of a 3d model for different functional use cases such with CityGML where you can have a simple box representation for LOD1, or a detailed interior model for LOD4.

Please take a look at the attached example and let us know if this output is an improvement. Note that some features will likely be split at the tile boundaries. You could also look at some sort of tile id assignment using a spatial relator and feature centroid and then using that as a group by within the Tiler. Note that this tiling approach can also be used to write point clouds to 3D tiles.

Badge +2

Hi Dean,

Thanks for spending time to investigate this issue. 

I tested with your attached example and it definitely loaded much faster.

You mentioned this example is generated from Tiler & Clipper (I suppose these are FME tools), is it possible to share this with us how you can generate 3DTiles with the Tiler & Clipper tools, so that I can do more test with our actual much larger dataset.

 

regards.

Badge +6

Hi,

Glad the tiled output loads faster than the original. This is meant more as a workaround for now as we wait for optimization improvements to the writer. Note that I already attached the FME workspace ‘obj2cesium3dtiles.fmw’ that I used to generate this 3D tiles dataset. Its all included in the obj2cesium3dtiles.zip attachment above.

 

By the way, I learned from development that the writer does not split up features, so if it the feature to be written is one large mesh, then there will only be few tiles written. The result will be tiles with too many faces which will likely make rendering slow on the client side. In this case the recommended workaround is to break up the mesh into more features. One way to do this is with the Tiler transformer as seen in my attached example. Note that the same approach can be used to break up other single feature datasets such as point clouds when writing them to 3D Tiles.

Regards,

Dean

Badge +2

Hi Dean,

I notice your fmw is created with FME version 2024, and it can’t load properly with my version 2023.

Would you be able to create another fmw for version 2023?

Thanks.

Badge +6

I tried to convert this to FME 2023.2 but for some reason I got an error saying invalid input. So for the moment this only seems to work with FME 2024.0 and above. I will look into why this is happening and keep you posted. In the meantime in case you dont know you can always install FME 2024 into a new directory and that will allow you to run both 2023 and 2024 side by side.

 

 

Reply