Add skipLevels and skipScreenSpaceErrorFactor · Issue #1614 · NASA-AMMOS/3DTilesRendererJS · GitHub
Skip to content

Add skipLevels and skipScreenSpaceErrorFactor #1614

Open

Description

@WilliamLiu-1997

Description

When loadAncestors is enabled, the renderer continuously loads parent ancestor tiles as backups so that there is content to display while high-precision child tiles are being loaded. The current logic adds all ancestor tiles containing content to the download queue, which can result in a large number of unnecessary downloads when there are many intermediate layers. However, if loadAncestors is disabled, there can be a long visual gap before the high-precision child tiles finish loading, during which no suitable fallback content is available to display.
Therefore, a compromise is needed: allowing the renderer to skip certain intermediate levels while still loading some ancestor fallback tiles. This can provide a smoother visual transition while reducing loading time and memory usage.

Solution

Cesium's skipLevels and skipScreenSpaceErrorFactor can solve this problem, maybe we can also add these options in the traverseFunction

Alternatives

Currently, if current level is 1 and target level is 6, with loadAncestors = true, the current loading logic is 1->2->3->4->5->6, with loadAncestors = false, it would be 1->6

If set skipLevels = 1, the loading logic will be 1->3->5->6

Additional context

No response

Activity

  1. gkjohnson commented on May 28, 2026

    @gkjohnson
    Contributor

    Can you explain which tile sets you're seeing this with? One of the issues I've seen with tile sets like Google Photorealistic tiles is that a lot of the delay is related to internal "tileset json" references that need to load before the "leaf" geometry nodes are encountered and can actually load.

    Understanding where the delay is coming from would generallybe helpful. Is the download queue getting full? Does increasing the size help? Or the parse queue? Or does this only happen when moving the camera around a lot, meaning cancelling active downloads may help (see #1609)?

    I'd specifically like to avoid adding dozens of options that require the user to be familiar with the underlying traversal algorithm to understand and configure. More options also makes the traversal algorithm more brittle and difficult to test, which I'd also like to avoid.

  2. WilliamLiu-1997 commented on May 28, 2026

    @WilliamLiu-1997
    ContributorAuthor

    Sorry, I am using my company’s internal tilesets, which I am not allowed to share. They are all very large tilesets, usually multiple gigabytes in size. In my tests, most of the time is actually spent on downloading. If we had a setting that allowed us to skip part of the LOD hierarchy, it would be faster to reach the desired LOD.

    For example, with an over 150M-splat tileset, which is an 11 GB Gaussian Splat tileset, the current 3d-tiles-renderer loading strategy requires downloading around 1 GB in a certain view before reaching the desired LOD. However, if level skipping were allowed, that amount could be reduced to less than 800 MB.

  3. gkjohnson commented on Jun 9, 2026

    @gkjohnson
    Contributor

    Sorry, I am using my company’s internal tilesets, which I am not allowed to share.

    I understand that some data may be proprietary but if you'd like to collaborate with public projects it would be best to produce a representative model that's shareable publicly. There are many places where things can be improved both within the project and generally within data sets so I'm not keen on jumping to the first solution that sounds appealing without making sure it's well understood.

    A simple "skip levels" traversal implementation as you've described would wind up loading more tiles in order to keep gaps filled as the camera turns. I haven't dived into it extensively but my understanding is that Cesium's implementation is significantly more complex than what's been presented so I'm not super interested in discussing this before other more simple solutions have been explored.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions