Description
This issue is an inventory of issues and ideas for improving Cesium for Unreal's performance. While we think the performance is pretty good, improved performance has a major impact on the user experience, so it's worth investing in.
This is a work in progress, please add to it!
Potentially High Impact
After a lot of profiling, here are the most impactful ideas for performance we currently have:
Frame Rate Improvements
- Add resource creation throttling + mip map generation cesium-native#565
- Various performance improvements #975 ( Async texture creation / better threading / better destruction)
- Investigate and reduce garbage collector pressure (UObject pooling?) #980
- Create RHI vertex and index buffers asynchronously #982
Latency Reduction
- Cache render content _after_ loading cesium-native#566 (WIP: Implement derived content caching #990)
- Add ability to cancel / reprioritize tile loads after the network request cesium-native#564
Other Ideas
A longer, more complete list of performance-related tasks and ideas - feel free to bump any of these ideas up to the above list if investigation shows it would yield significant improvements:
Tile Selection Improvements
Improvements to the algorithm that decides which tiles to render and which tiles to load and unload, and in what order.
- Leverage Hardware Occlusion Queries in Tileset Traversal #818
- Allow non-linear screen space error cesium-native#342
- Use child tile bounding volumes to cull parent tiles cesium-native#506
- Implicit tileset refinement fails to skip LODs cesium-native#483
- Implement predictive 3D Tiles loading from CesiumJS cesium-native#85
- Implement dynamic 3D Tiles SSE adjustment from CesiumJS cesium-native#86
- Add option to preload a tileset or section of a tileset cesium-native#266
- Avoid holes in terrain while loading cesium-native#269
- Add global cache to unload any tilesets that are not in view cesium-native#246
Load Pipeline Improvements
Improvements to the process that loads tiles from the network and prepares them for rendering.
- CesiumGltf objects stored in a vector get copied rather than moved on resize cesium-native#375
- Reduce texture copies, perhaps by uploading directly from ImageCesium to GPU? #865
- Investigate faster collision mesh generation/loading options #512
- In the load pipeline, separate the network request from the post-download CPU work, and throttle them differently cesium-native#473
- Large tilesets produce performance warning when building map #826
- Cesium sets global material parameters unnecessarily #814
- Remove glTF compressed buffers after decompressing cesium-native#107
- Cache and reuse render resources for external images cesium-native#497
- Schedule the "main thread" part of tile loading more intentionally cesium-native#507
Rendering Improvements
Improvements to the actual rendering of tiles.
- Improve transitions between tile LODs #508
- Merge raster tiles from different sources for better performance and to save texture units cesium-native#88
- Investigate generating materials at editor time, rather than using an uber-shader #866
- Consider setting texture sampler sources to Shared:Wrap #490
- Add "mip bias" as a tileset option cesium-native#518
- Use async texture creation for encoded metadata tables #979