Combine terrain, tile layer, and models into 3D tiles

I currently made a tool for creating custom scenes in Cesium that generate three types of data:

  • Custom elevation data generated from GeoTIFF files (currently using ion to generate terrain files).
  • A tile layer that overlays the terrain (custom textured generated web mercator tiles). Currently self hosted.
  • A 3D tiles that contain a few thousand 3D models. This is created by uploading a KMZ file of about 40 unique (GLTF/DAE) models placed in different locations, scaled, and rotated that is then uploaded into ion.

I’m looking optimize my app and reduce the amount of HTTP requests as much as possible. Is it possible to combine all three of these data sets into 3D tiles? In my scenario the scenes are around 2 sq miles in size, however the user will be at ground level, so resolution is fairly high. I considered possibly trying to create a textured polygon for each tile at the closest zoom level, but not sure if that would work if I go the KMZ route. Would CZML be a better route?


While your use case to combine all three types into one 3d tiles format is on our long term plan, currently we don’t have support for it. However, what is the problem that you are trying to solve by reducing the number of HTTP requests? Reducing the number of HTTP requests would normally not be a huge performance improvement for Cesium clients. Also, to gather more information, which client are you using to load your app?


I’m currently using Cesium JS and browsers have limits on the number of concurrent requests that can be made to the same domain. Additionally, I created a terrain provider using a sub 1-meter DEM, which makes the terrain tiles a bit large. I also have high resolution map tiles down to Mercator zoom level 22which are also large. So thought combining all of this into 3D tiles would likely make for a lot less initial data transfer. I’m currently looking to create 3D scenes that cover 2 sq miles on average and contain 3,000 - 5,000 GLTF models in them (40 - 50 would be unique, mostly trees, a few buildings and other landscape items). Eventually I’d like to setup support for downloading parts of scenes for temporary offline use for when there is no internet available to the user.

I see that KML super overlays aren’t supported here in Cesium ION which would likely be how I would bring in a tile layer. As a workaround I may experiment with creating large tiles (1024x1024) at my max zoom level and then passing them in as ground overlays. Not idea, but curious to see if this will work (likely would be around 1000 ground overlays).

When I upload the KMZ file to Cesium I can specify my terrain data to snap the models to. I’m assuming the ground overlays will follow the terrain, and if so, that may allow me to render my scene without the need of loading the terrain provider as well (I’m clipping the map to just my area of interest currently).

Update tested a KML with ground overlay and Cesium Ion didn’t support it. I guess that list of supported KML features must be for the Cesium JS KLM import feature instead.

Here is a screenshot with procedurally placed trees (currently loading everything directly into the map):