From 41195e6670a826b47adb785da72e2839cd557215 Mon Sep 17 00:00:00 2001 From: "Adam N. Morris" Date: Tue, 20 Feb 2024 11:45:04 -0600 Subject: [PATCH 1/7] Attempting a fix for empty tile refinement issues. --- packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js index df773afbcc11..7760d02d3dee 100644 --- a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js +++ b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js @@ -139,6 +139,7 @@ function updateAndPushChildren(tile, stack, frameState) { childRefines = false; } else if (!child.hasRenderableContent) { childRefines = executeEmptyTraversal(child, frameState); + // childRefines = true; } else { childRefines = child.contentAvailable; } @@ -295,7 +296,9 @@ function executeEmptyTraversal(root, frameState) { } } - return allDescendantsLoaded; + return ( + root.hasEmptyContent || root.hasImplicitContent || allDescendantsLoaded + ); } export default Cesium3DTilesetBaseTraversal; From 975d846d3aaf9d5b5a03f5a198c86d79956cd041 Mon Sep 17 00:00:00 2001 From: "Adam N. Morris" Date: Tue, 20 Feb 2024 16:15:57 -0600 Subject: [PATCH 2/7] Removed a line of dead code. --- packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js index 7760d02d3dee..78dec56eb456 100644 --- a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js +++ b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js @@ -139,7 +139,6 @@ function updateAndPushChildren(tile, stack, frameState) { childRefines = false; } else if (!child.hasRenderableContent) { childRefines = executeEmptyTraversal(child, frameState); - // childRefines = true; } else { childRefines = child.contentAvailable; } From a44a6a49e5eec08dc632cbfa5b6ce8aa128021ff Mon Sep 17 00:00:00 2001 From: "Adam N. Morris" Date: Tue, 20 Feb 2024 17:09:30 -0600 Subject: [PATCH 3/7] Code review changes. --- CHANGES.md | 1 + CONTRIBUTORS.md | 1 + packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js | 4 +--- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7c028092af6d..181eda27d082 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ - Fixed a bug affecting voxel shader compilation in WebGL1 contexts. [#11798](https://github.com/CesiumGS/cesium/pull/11798) - Fixed a bug where legacy B3DM files that contained glTF 1.0 data that used a `CONSTANT` technique in the `KHR_material_common` extension and only defined ambient- or emissive textures (but no diffuse textures) showed up without any texture [#11825](https://github.com/CesiumGS/cesium/pull/11825) +- Fixed a bug causing the wrong tile to be selected for some implicit tilesets. ### 1.114 - 2024-02-01 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 384af13aa2c8..ff1fe88a808f 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -163,6 +163,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute to Cesiu - [Mark Dane](https://github.com/angrycat9000) - [jjspace](https://github.com/jjspace) - [Siddhesh Ranade](https://github.com/siddheshranade) + - [Adam Morris](https://github.com/weegeekps) - [Northrop Grumman](http://www.northropgrumman.com) - [Joseph Stein](https://github.com/nahgrin) - [EOX IT Services GmbH](https://eox.at) diff --git a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js index 78dec56eb456..2522c762ec15 100644 --- a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js +++ b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js @@ -295,9 +295,7 @@ function executeEmptyTraversal(root, frameState) { } } - return ( - root.hasEmptyContent || root.hasImplicitContent || allDescendantsLoaded - ); + return root.hasEmptyContent || allDescendantsLoaded; } export default Cesium3DTilesetBaseTraversal; From 7cafdfabdc6f4a5ebc94b069bab0878350c45069 Mon Sep 17 00:00:00 2001 From: Gabby Getz Date: Wed, 21 Feb 2024 09:42:40 -0500 Subject: [PATCH 4/7] Adjust specs, update CHANGES.md --- CHANGES.md | 1 + .../engine/Specs/Scene/Cesium3DTilesetSpec.js | 24 ------------------- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 7c028092af6d..8daca5f1b155 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ ##### Fixes :wrench: +- Fixed a bug with where a mix of empty and non-empty tiles were not refining. [#9356](https://github.com/CesiumGS/cesium/issues/9356) - Fixed a bug affecting voxel shader compilation in WebGL1 contexts. [#11798](https://github.com/CesiumGS/cesium/pull/11798) - Fixed a bug where legacy B3DM files that contained glTF 1.0 data that used a `CONSTANT` technique in the `KHR_material_common` extension and only defined ambient- or emissive textures (but no diffuse textures) showed up without any texture [#11825](https://github.com/CesiumGS/cesium/pull/11825) diff --git a/packages/engine/Specs/Scene/Cesium3DTilesetSpec.js b/packages/engine/Specs/Scene/Cesium3DTilesetSpec.js index 2fddd5b7a6cb..8f5d0c3d7a07 100644 --- a/packages/engine/Specs/Scene/Cesium3DTilesetSpec.js +++ b/packages/engine/Specs/Scene/Cesium3DTilesetSpec.js @@ -1335,29 +1335,6 @@ describe( }); }); - it("replacement refinement - selects upwards when traversal stops at empty tile", function () { - // No children have content, but all grandchildren have content - // - // C - // E E - // C C C C - // - return Cesium3DTilesTester.loadTileset( - scene, - tilesetReplacement1Url - ).then(function (tileset) { - tileset.root.geometricError = 90; - setZoom(80); - scene.renderForSpecs(); - - const statistics = tileset._statistics; - expect(statistics.selected).toEqual(1); - expect(statistics.visited).toEqual(3); - expect(isSelected(tileset, tileset.root)).toBe(true); - return Cesium3DTilesTester.waitForTilesLoaded(scene, tileset); - }); - }); - it("replacement refinement - selects root when sse is not met and subtree is not refinable (1)", function () { // No children have content, but all grandchildren have content // @@ -1379,7 +1356,6 @@ describe( // Even though root's children are loaded, the grandchildren need to be loaded before it becomes refinable expect(numberOfChildrenWithoutContent(root)).toEqual(0); // Children are loaded - expect(statistics.numberOfCommands).toEqual(1); // No stencil or backface commands; no mixed content expect(statistics.numberOfPendingRequests).toEqual(4); // Loading grandchildren return Cesium3DTilesTester.waitForTilesLoaded(scene, tileset).then( From 2964ebf66ca9783224836f648283a902cef4e0f9 Mon Sep 17 00:00:00 2001 From: Gabby Getz Date: Wed, 21 Feb 2024 09:59:53 -0500 Subject: [PATCH 5/7] executeEmptyTraversal implicit tweak --- packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js index 78dec56eb456..2522c762ec15 100644 --- a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js +++ b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js @@ -295,9 +295,7 @@ function executeEmptyTraversal(root, frameState) { } } - return ( - root.hasEmptyContent || root.hasImplicitContent || allDescendantsLoaded - ); + return root.hasEmptyContent || allDescendantsLoaded; } export default Cesium3DTilesetBaseTraversal; From af4c6932b39cacde3b2501618f849444edf0c8d4 Mon Sep 17 00:00:00 2001 From: "Adam N. Morris" Date: Wed, 21 Feb 2024 11:50:46 -0600 Subject: [PATCH 6/7] Removed redundant line in CHANGES.md --- CHANGES.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ee15e6992254..8daca5f1b155 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,7 +9,6 @@ - Fixed a bug with where a mix of empty and non-empty tiles were not refining. [#9356](https://github.com/CesiumGS/cesium/issues/9356) - Fixed a bug affecting voxel shader compilation in WebGL1 contexts. [#11798](https://github.com/CesiumGS/cesium/pull/11798) - Fixed a bug where legacy B3DM files that contained glTF 1.0 data that used a `CONSTANT` technique in the `KHR_material_common` extension and only defined ambient- or emissive textures (but no diffuse textures) showed up without any texture [#11825](https://github.com/CesiumGS/cesium/pull/11825) -- Fixed a bug causing the wrong tile to be selected for some implicit tilesets. ### 1.114 - 2024-02-01 From b4615ec5fff1d2348b8d0e282d2ba3cd42e15105 Mon Sep 17 00:00:00 2001 From: "Adam N. Morris" Date: Wed, 21 Feb 2024 11:58:30 -0600 Subject: [PATCH 7/7] Removed the checks for empty leaves --- packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js index 2522c762ec15..a3a012d04fae 100644 --- a/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js +++ b/packages/engine/Source/Scene/Cesium3DTilesetBaseTraversal.js @@ -271,12 +271,10 @@ function executeEmptyTraversal(root, frameState) { // Only traverse if the tile is empty - traversal stops at descendants with content const traverse = !tile.hasRenderableContent && canTraverse(tile); - const emptyLeaf = !tile.hasRenderableContent && tile.children.length === 0; // Traversal stops but the tile does not have content yet // There will be holes if the parent tries to refine to its children, so don't refine - // One exception: a parent may refine even if one of its descendants is an empty leaf - if (!traverse && !tile.contentAvailable && !emptyLeaf) { + if (!traverse && !tile.contentAvailable) { allDescendantsLoaded = false; }