Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to support placeholder tiles - empty tiles used for culling but not refinement #609

Open
lilleyse opened this issue Dec 14, 2021 · 0 comments

Comments

@lilleyse
Copy link
Contributor

The rules for geometric error based refinement apply to all tiles, including empty tiles. That is, when the tile's screen space error exceeds some maximum, the tile is refined and its children are considered for rendering.

In a client implementation, geometric error is used with other screen space metrics—e.g., distance from the tile to the camera, screen size, and resolution— to calculate the SSE introduced if this tile is rendered and its children are not. If the introduced SSE exceeds the maximum allowed, then the tile is refined and its children are considered for rendering.

This behavior works well for empty tiles that are used for refinement purposes, like a hierarchy of empty tiles at the top of the tree where leaf tiles point to external tilesets for each city, but not that well for placeholder empty tiles in the middle of the tree that are not meant to be selected. This results in "holes" when viewing a tileset, either when a tile refines to empty children tiles or when an empty tile refines and its children haven't been loaded yet.

CesiumJS only refines a tile once all its descendants with content are loaded to avoid showing holes. Cesium Native is more faithful to the spec and doesn't have special behavior like this. Cesium Native is probably doing the right thing here. Tilesets should avoid having empty tiles unless they intend for empty tiles to be selected during traversal.

But how could we express placeholder tiles if we wanted to?

There is one case we've been thinking about recently. What if a placeholder empty tile had a larger geometric error than its parent? Should the normal refinement rules apply - i.e. the parent tile refines to the empty tile which refines to its children once they are loaded (causing a hole) - or should the empty tile be ignored so that the parent tile refines directly to the children once they are loaded? A cleaner way of expressing this might be to omit geometricError, which would allow an empty tile to be used for culling but not refinement.

Related CesiumJS issues: CesiumGS/cesium#9356 CesiumGS/cesium#9140

CC @kring

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

No branches or pull requests

1 participant