-
Notifications
You must be signed in to change notification settings - Fork 3.5k
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
Tileset of tilesets: selection/loading waiting for all children to be loaded? #3424
Comments
I may have to think through this more carefully, but should it be fine if the root uses additive refinement? |
Forgot to say this is for replacement refinement.
|
The situation you described is expected for replacement refinement, since the tile is not allowed to refine to its children until they are loaded. I think it makes more sense for the root to use additive refinement. |
The recent changes in |
I think this is related (from the roadmap, #3241):
This is a good path forward (and I think fixes the above problem, right?), but a combination of additive and replacement refinement might also get the job done, but add complexity to the generation tool. @e-andersson if you think this approach meets your needs, it would be an awesome contribution! |
@lilleyse you're right, it makes more sense to use additive refinement for the root, and it does work that way. There are similar structures (but somewhat more tree-like, without extra empty tiles) further down the tree though, and it would require a bit of work to check this carefully. Further down it looks like this:
where B = b3dm tile and T = tiles.json tile. In this case, I think additive refinement for the root B would not work, since the B's further down are intended to replace it rather than add to it. It sounds like the suggestion from the roadmap would solve the problem. @pjcozzi I'll look into if it's something I can add. |
That would rock, thanks @e-andersson! |
I've been trying a fairly naive approach to changing the replacement refinement today. I loop (won't want that later) through a tile's children to see if it has visible children that are not loaded yet and determine whether the tile is refinable based on that, and if not, render the parent like before. When tilting the camera towards the horizon this looks pretty bad, since previously sharp tiles get blurry when a parent that covers more space is selected while waiting for newly visible tiles to load. This sounds like it should have been expected behavior up until now too, but somehow it hasn't. This should be expected, right? On second thought, this could simply be the effect of not first loading all children of a tile, so when previously invisible children come into view, the parent is selected until they are loaded. I think we'd need to use available children and clip the parent (as suggested) to make this look good, if the above behavior is as expected. It seems there are also cases where there is no loaded parent either, and empty space is displayed. Will look further into this. |
Yes, this is expected. @kring and I have discussed before. We just weren't sure how bad it would look.
Yes, I think this has potential. The Cesium implementation will need some events so a tile can update itself with some approach to avoid cracking (e.g., drop new skirts) when a sibling/cousin changes. I would do this after getting the basic approach to work. The other option is to prefetch children outside of the view frustum (this could be an option), so we refine as soon as all the visible children are ready, but we request all the children (visible ones first) to proactively minimize the jarring LOD switch when the camera moves.
Perhaps just a code bug...or something subtle in the approach that we didn't think of yet. |
Back at work today after having been sick for a few days. I'm still working on this, will try to get the basic approach (loading only visible children rather than all children) to work. |
Prefetching children outside of the view frustum might make a small difference, but if we do request all children, I think when zooming in quickly LODs would get much slower to refine. |
@lilleyse @e-andersson are there any updates here? Is this something we need to consider for the 3D Tiles Draft 1.0 implementation? |
@e-andersson I do notice a slight difference in loading between the one tileset.json and the tileset of tilesets. The later appear to have a quick flash when zooming in. The best way to reproduce this is to use a tiny cache size (like 1 tile) so every time you zoom back in the tile is reloaded. Cache replacement doesn't appear to affect this. I will work with @lilleyse to reproduce this. With that said, I'll close this issue and we'll finish the fix in #3517. |
With a scenario like described in below diagram, it seems that no b3dm root will be loaded for all tiles.json one level above have been loaded. So if one subtileset represents San Francisco and the other Rio de Janeiro, none will be loaded before both have been in view in the Cesium viewer.
@lilleyse, what do you think about this scenario? Might recent changes to
selectTiles
inCesium3DTile
or something with the new request scheduler have some effect? I don't see this happening without using the last few weeks of changes from the 3d-tiles branch.The text was updated successfully, but these errors were encountered: