Skip to content

Tiles Traversal: Only load necessary tiles#1421

Merged
gkjohnson merged 51 commits intomasterfrom
optimized-tiles
Jan 5, 2026
Merged

Tiles Traversal: Only load necessary tiles#1421
gkjohnson merged 51 commits intomasterfrom
optimized-tiles

Conversation

@gkjohnson
Copy link
Contributor

@gkjohnson gkjohnson commented Dec 25, 2025

Related to #1344

  • Add support for an optimized tile loading traversal that will only load tiles that need to be loaded. Based on on the Cesium Unreal traversal approach.
  • Add "loaded" field to stats.

Algorithm TODO

  • Add support for "kicking" to support zoom in without flashing
  • Delete unused queued tiles (see #1422)
  • Add support for "ancestor meets sse" logic for support zoom out without flashing
  • Test with google tiles data set
  • Correct handling of "ancestor meets sse" logic
  • Ensure raycasting works as expected
  • Allow for "trickle in" of tiles on initial load
  • Investigate high number of active tiles vs typical traversal
  • Add a "loadSiblings" option
  • Understand why a low LoD tile loads initially
  • Re-add matterport fix #1304
  • Investigate weird raycasting / low lod tile here:
  • Document limitations
    • shared caches and queues need to be shared by tiles using the same strategy
    • fade tiles does not work
    • any "virtual" or generated geometry will not work (quantized mesh splitting, overlay splitting)
  • Validate that intermediate tiles do not load
  • Understand the camera "jump" on reload
  • Ensure additive refinement works as expected
  • Clean up

Future

  • Review dynamically generated / expanded tiles to ensure it works
    • These do not work since they only expand the children once the tile itself is loaded and disposed of once the internal parents are disposed.
    • That means we can get into an internal oscillation state when the parents are disposed, subsequently disposing of the children, causing that parent to render again.
  • Add traversal utilities to improve readability of traversal algorithm
  • Separate traversal variables into a dedicated object (related to Migrate more logic to core #1375)
  • Ensure compatibility with broader plugins including fading & tile splitting (quantized mesh, overlays, related to #857)
  • Make this the default and only traversal strategy once known to be stable
  • Add delay to downloads / tile updates to prevent unnecessary downloads & data used (#1423)

@gkjohnson gkjohnson marked this pull request as draft December 25, 2025 01:02
@gkjohnson gkjohnson added this to the v0.4.20 milestone Dec 25, 2025
@gkjohnson
Copy link
Contributor Author

A comparison of this view:

image
Geometry Tiles Loaded Internal Tilesets Loaded Total Delta
master 340 77 417 0
optimized 254 77 331 86
no siblings 164 50 214 203

@gkjohnson gkjohnson marked this pull request as ready for review December 30, 2025 22:49
@gkjohnson gkjohnson merged commit 4d85051 into master Jan 5, 2026
1 check failed
@gkjohnson gkjohnson deleted the optimized-tiles branch January 5, 2026 05:51
@gkjohnson
Copy link
Contributor Author

cc @dbuck - with this change you will no longer be able to override the download and parse queue priority callbacks. I seem to recall you mentioning this is something you were doing previously but I'm not sure if you're still using that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

no visible tiles for certain zoom levels

1 participant