Custom RGB PNG Terrain via GeoServer – Low FPS in Cesium

Hi everyone,

I’m working on a custom terrain solution in CesiumJS. I’m retrieving tiles (image/png) from GeoServer, where each pixel encodes elevation using RGB values. On the Cesium side, I decode the RGB values back into elevation to render a 3D terrain surface. I’m not using quantized-mesh, and GeoServer is a mandatory part of the system.

The rendering works, but I’m experiencing significant FPS issues.

I’d appreciate help with the following questions:

  1. When using this kind of custom terrain source, how does Cesium handle tile loading and caching? Does it only fetch tiles based on the current camera view (bounding box)? Or is there broader preloading that could affect performance?
  2. What are the likely causes of FPS drops in this setup? Could it be due to PNG tile size, resolution, decode/render performance, texture memory, or something else?
  3. Are there any recommendations for optimizing Cesium performance when using custom PNG tiles with RGB-based elevation data from GeoServer?

If anyone else has built a similar system or has suggestions, I’d love to hear your insights.

Thanks in advance!

Hi @ugur_ince,

Thanks for your post and welcome to the Cesium community.

  1. Cesium handles tile loading based on the camera view. You can see this in action using this sandcastle Cesium Sandcastle which uses the viewerCesiumInspectorMixin.

2 & 3.

Hopefully these tips can help you make progress. Feel free to ask further questions as you narrow down your bottle neck and improve performance, and please let us know what you find and what works to speed up your custom terrain setup!

Thanks,
Luke