-
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
3d Tile mixed refinement not completing, causing face culling #7084
Comments
Thanks for the report @Stuv42 @lilleyse any ideas here? Does anyone else know the tile refinement code as well as you that could look at this while you're finishing up the sample PR? This sounds like a regression that we would need to fix before the next release. I'll tag it, but feel free to remove the label once triaged. |
There's one commit I'd want to try reverting: 4fc6f7e I haven't been able to trigger this problem in other tilesets yet. @Stuv42 is there a chance you could send over the tileset for testing? My email is [email protected] if you don't want to share it publicly. |
Thanks for sending over the tileset @Stuv42. I opened a fix here: #7099. |
Thanks for the update @lilleyse, it seems to have fixed the issue in 99% of cases. I've found it was still occurring in the spot above and taking a closer look its because some json files have no content, but have children. This is happens here due to small floating artifacts in quadrants that don't have a model at medium detail, but still require a json file for that quadrant since zooming further will bring their children into view.
|
I see why that would be happening. Technically the behavior right now is expected, the external tileset root (empty) meets the screen space error and doesn't traverse to its children, but since it's empty it selects back up. I'll have to recheck what the old traversal did, but to avoid those sorts of issues I'm starting to think empty tiles should always traverse even if they meet screen space error. Was that section part of the tileset you originally sent over? If not could you send those tiles over too? I think the fix would be: function canTraverse(tileset, tile) {
if (tile.children.length === 0) {
return false;
}
if (tile.hasTilesetContent) {
// Traverse external tileset to visit its root tile
// Don't traverse if the subtree is expired because it will be destroyed
return !tile.contentExpired;
}
return tile._screenSpaceError > tileset._maximumScreenSpaceError;
} to function canTraverse(tileset, tile) {
if (tile.children.length === 0) {
return false;
}
if (tile.hasEmptyContent) {
return true;
}
if (tile.hasTilesetContent) {
// Traverse external tileset to visit its root tile
// Don't traverse if the subtree is expired because it will be destroyed
return !tile.contentExpired;
}
return tile._screenSpaceError > tileset._maximumScreenSpaceError;
} |
I'm trying out the current master, was previously working well on 1.48 and below. With skip lods turned on I'm finding the parent tile is never disabled even once loading completes. This normally has the culling effect only while loading as detailed in #6415 since the parent and child tiles are mixed.
This is a view from inside an object after tiles are done loading. Everything in the distance on the left half being culled because it intersects with the parent tile (the right side of the object is outside this parent tile and shows through correctly)
Freezing the render to get a top view with bounding boxes on, shows the parent tile in yellow indicating its still refining:
This is how it should look, with the red parent tile gone and not causing culling. Interestingly moving the camera around very slightly can get the correct result depending on the direction.
The text was updated successfully, but these errors were encountered: