Tile Rendering and Seamless Flying in Multiplayer Environment

We are working on improving our rendering of Cesium Tiles for Quest 2 and Quest 3 devices, but we’re encountering a couple of issues.

  1. LOD Management: When a tile goes out of the camera view, it unloads the higher LOD, making it appear less detailed. Ideally, it should hide the tile (Frustum Culling) and reappear when the tile is back in view. This issue is specific to Quest devices; on Windows, tiles do not unload unnecessarily. Can anyone help us locate this code or understand why tiles revert to the lowest LOD when out of view?
  2. Far Distance Culling: We want to implement FarDistanceCulling for the mesh to control how far from the camera position the mesh should render. When close to the ground, only nearby blocks are visible, so loading distant tiles is unnecessary. Ideally, we would like to cull them based on a lower MaxDrawDistance (similar to StaticMeshComponent behavior). As altitude increases, the draw distance should increase, showing more tiles but at a lower resolution to balance tile loading and quality.

Additionally, we are working on implementing a seamless flying mechanism for multiplayer environments, where users can fly from one part of the globe to another without interruption. Here are the issues we’re currently facing:

  1. Pawn Movement: The pawn moves very far from the origin, causing instability. Should we decrease the globe size as we fly up? How would this work in a multiplayer setting where players are on different parts of the globe? If we reduce the globe size, the mesh size decreases, but the simulated pawn remains the same size, breaking the effect.
  2. Origin Shift Component: We attempted to use the origin shift component, but it didn’t work as expected and caused the pawn to jump back and forth. In World Settings, “World Check Bounds” is set to false.

If anyone has pointers on how to achieve these effects seamlessly for all players in a multiplayer environment, we would greatly appreciate it.

Hi @carlrealvr , sounds like you’re doing worthwhile work. I’ll see if I can help out…

When a tile goes out of view, there’s really no guarantee it’s going to stay loaded. It’s not visible after all. In Cesium3dTileset, there’s a Maximum Cache Bytes property that helps control this. The larger it is, the more memory you use, but the more chance that the higher LOD will stick around when it’s not in use

Is this solely based on trying to improve performance? Cesium-native doesn’t do this, but it has been considered. Typically tiles that are far away occupy very few pixels, thus need a low level of detail, and don’t really impact performance as much as you might think.

What kind of instability are you seeing? Do you see you pawn jitter in some way?