You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
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
The text was updated successfully, but these errors were encountered: