Investigate ability to "skip traversal"
https://cesium.com/blog/2017/05/05/skipping-levels-of-detail/
Related Cesium traversal: Cesium3DTilesetSkipTraversal.js
It seems as though children are skipped based on screen space error metrics in the same way they are in this project along with extra factors and options (see options):
-
baseScreenSpaceError (number): defines the screenspace error that we are guaranteed to load up to before performing skip traversal. -
immediatelyLoadDesiredLevelOfDetail (bool): only loads the highest level of detail required (would be best to allow for limiting an error or level "range", instead, to get this effect) -
loadSiblings (bool): whether to load all sibling tile data of visible tiles (ie outside the frustum) -
skipLevels: how many levels of tiles to blindly skip after the initial tiles that mean the base screen error -
skipScreenSpaceErrorFactor: the option we already have (errorThreshold) - how many tiles to skip based on LoD
From looking at the code the load behavior here is fairly different. "REPLACE" tiles refine seems to immediately traverse to the next level when a child is visible and does not wait for all children to load to ensure visual coherence. There will likely be tile gaps and flashing if moving the camera too quickly? But if the skip threshold is set well enough it's possible that when the camera moves the tile error won't shift enough to cause issues.
Other
- "odd" or "every third" rendered levels can also be skipped to reduce the number of tiles to load.
- An "inflated" load frustum could be used to avoid having gaps on zoom out. eg two cameras overlapping - one with a smaller pixel ratio than the other causing a lower res tile to load just outside of view.
When zooming out quickly it would be best to keep displaying the currently loaded child tiles rathe than "popping" to nothing so the display can remain coherent.
edit: Could be done by continuing traversal when parent tiles are not "LOADED"? Then child tiles will be found. But when to stop? Tiles can also be loaded from bottom-up (or highest priority for display) to ensure they're available more quickly.