Resolution streaming Google 3D tiles

Hello,
Im testing Cesium for Unreal with the flight example provided and Im using Google Photorealistic 3D Tiles. I have a camera mounted in front of the aircraft nose that acts as a real-time “sensor camera” (not a cinematic camera). The aircraft is driven by UDP input, so its motion is stochastic and can change rapidly.

Im flying at relatively low altitude (~200 m AGL) and high speed, and I notice that tiles often load late or in lower resolution, especially during fast maneuvers. I’ve tried tuning:

  • Maximum Screen Space Error (SSE)

  • Maximum number of tiles

  • Tile loading budgets

but it still feels like I’m hitting a streaming/throughput ceiling rather than just a parameter issue.

I also tried using an additional camera slightly behind or above the aircraft to help preload tiles, but when the aircraft turns aggressively the streaming still can’t keep up.

My questions are:

  1. Is this type of use case (fast, low-altitude, real-time flight with a sensor-like camera) something Cesium is designed to support reliably?

  2. Are there recommended strategies for this scenario (e.g. anchor cameras, multiple views, camera manager usage, SSE strategies, preload bubbles, etc.)?

  3. Would upgrading to a paid Cesium ion plan (higher streaming quotas / Google tiles quotas) improve this behavior, or is this primarily limited by client-side streaming and LOD selection rather than account tier?

  4. In general, am I using the system in a reasonable way, or am I trying to push it into a domain where custom tilesets or different approaches are required?

So the core requirement is:
a real-time camera that must see stable, high-quality terrain while flying fast at low altitude. :slight_smile: Anyone?

Hi @Arre_bror, welcome to the community!

Let me do my best to field your questions below.

  1. Is this type of use case (fast, low-altitude, real-time flight with a sensor-like camera) something Cesium is designed to support reliably?

Cesium for Unreal has been used for a variety of flight simulators and adjacent applications! Here are some user stories from our website:

However, I will note that most of these applications use Cesium World Terrain with Bing Maps Aerial imagery, which have more manageable payloads for real-time flight visualization. Google’s Photorealistic 3D Tiles offer high visual fidelity (especially with all the available city photogrammetry), but naturally the higher detail will take longer to load.

So it really depends on your use case – and this ties into your fourth question. If you’re okay with having only terrain in your application (with no buildings), then Cesium World Terrain is the way to go. You can also combine it with Cesium OSM Buildings, which provide simplified representations of the buildings around the world. But if you want those photorealistic city views, you’ll want to use Google Photorealistic 3D Tiles.

  1. Would upgrading to a paid Cesium ion plan (higher streaming quotas / Google tiles quotas) improve this behavior, or is this primarily limited by client-side streaming and LOD selection rather than account tier?

We don’t limit performance based on account tier, so this is all dependent on the latter.

  1. Are there recommended strategies for this scenario (e.g. anchor cameras, multiple views, camera manager usage, SSE strategies, preload bubbles, etc.)?

You were right to adjust the Maximum Screen Space Error (SSE) on the tileset. Just make sure to account for its inverse relationship with the detail on screen. Having a lower number will prompt higher levels of detail to stream, and vice versa.

The MaximumSimultaneousTileLoads setting is a little tricky, because theoretically it would be nice to have more tiles loading at once so they can stream in quickly. But too much parallelization will take more processing power than it’s worth. The default value is a “magic number” that we found to have good balance. Just avoid making this number too large at the cost of your app’s performance.

The LoadingDescendantLimit should probably be lowered for your use case. A higher value means that lower-detail tiles will wait until more of their children finish loading before they refine. Setting this number high is akin to toggling Forbid Holes. A lower value causes additional detail to appear successively, and you won’t see the changes happen “all at once”.

Lastly, you’ll probably want to disable Enable Frustum Culling setting, so that tiles will load even when they’re outside the camera frustum. This should reduce the amount of gaps seen when you turn your aircraft.

Let me know if those tips help, or if you have any follow-up questions or concerns!