Photorealistic 3D tiles - too many draw calls

Hi, we’ve been trying the Google Photorealistic 3D tiles and they’re very promising, but it seems that we get a huge number of draw calls when streaming them into Unity. For a small part of midtown Manhattan they can easily exceed 400, which will be way too much for most mobile devices.

When streaming the tiles, is there no atlasing or batching being done? Do have have to develop our own texture atlasing solution to get the draw call count down for mobile devices? We’re using Unity 2021/URP.

Any feedback would be appreciated!

Cesium creates a Mesh and a MeshRenderer for each tile. I believe Unity will (sometimes?) batch these together. In general, though, a single tile is meant to be the unit of batching, so trying to further combine them might not really help.

The number of tiles rendered is directly proportional to the total number of pixels on the screen. So a mobile device with its smaller screen should use a scaled resolution so that the number of pixels, and therefore number of tiles, is much smaller. You can also reduce the “Maximum Screen Space Error” to reduce the detail and therefore number of tiles.

Overall, I’d argue that 400 isn’t a crazy number with modern rendering APIs like Vulkan.

But if you think there’s room for improvement, all of Cesium for Unity is open source, so you’re welcome (and encouraged) to experiment and let us know what you find!

Thanks Kevin. By mobile we mean mobile VR specifically, like Quest 2 or Quest Pro, which have certain limits in terms of draw calls as well as triangle budget. Based on our testing the triangle budget looks ok but draw calls are too many for these types of devices, although we haven’t tried to reduce the “Maximum Screen Space Error” to reduce the detail. Are there any additional settings we should also play with, before trying to implement out own texture atlasing? Also, it seems you support Texture Atlasing in your JavaScript codebase?

https://cesium.com/downloads/cesiumjs/releases/b30/Build/Documentation/TextureAtlas.html

I’m not quite sure what problem you’re planning to solve with texture atlasing. CesiumJS has texture atlasing, yes, but it’s not used for 3D Tiles rendering. (by the way, you’ve linked to the documentation for the b30 release, which was released July 2014. CesiumJS hasn’t had that as part of its public API since it was removed a month after that, in August 2014.

Anway, if you’re trying to reduce the number of tiles rendered, Maximum Screen Space Error is the place to start. Use a bigger number.