Multiple tileset (+50) rendering performance


What would be the most performant way to render multiple (+50) tilesets simultaneously? I have an outdoor fotogrammetry from part of the city and one tileset per one floor for many buildings. I was wondering if I should at least combine every floor of single building into single tileset to get better performance because now it seems that when I fly around the city outdoor model Unity starts to load indoor tilesets and I FPS starts to drop down below 5. Combining all into one tileset is not an option because if one floor changes then I need to combine all datasets again.

I would somehow wanted to maintain FPS in every situation. Is there some parameter for global maximum tilesets to be rendered simultaneously or some queue length limitation that could help?

Rendering 50 tilesets has some overhead, yes. It would be better to combine them.

I suspect the bigger problem is that your individual tilesets are too complicated, though. If the simplest version of each of the 50 models that Cesium can choose to render has a lot of triangles, than your total scene will have 50 times a lot of triangles. It’s important that tilesets be constructed so that the root tile is quite simple.

You could try writing some script that turns tilesets on and off based on the viewer location. For example, when the viewer is far from the building, you don’t need to render any interior tilesets. When you’re on level 1, you don’t need to render level 2. There’s nothing built into Cesium for Unity to do this, but you can code this sort of logic into your own scripts.

1 Like

Thanks for the info. I think I will try to get access to the tilesets bounding box position and size from the c# and make on/off turning based on that information. Any ideas how to get root tiles bounding volume from c#?

This sort of thing is doable from C++, but we don’t currently have a C# API for it.