3d tiles loading artifacts when moving camera

1. A concise explanation of the problem you’re experiencing.

When moving the camera we can see some large flat polys appearing. They disappear again when the camera is still. It looks a bit like it’s displaying the lowest LOD level on top of the already loaded tiles. Any tips how we can stop these artifacts from displaying?

4. The Cesium version you’re using, your operating system and browser.

Cesium 1.57 on Windows/Mac Chrome

3dtiles-artifacts.mp4 (490 KB)

I think this is a bug with the skip LOD algorithm. Can you try disabling this (https://cesiumjs.org/Cesium/Build/Documentation/Cesium3DTileset.html?classFilter=Cesium3DTileset#skipLevelOfDetail) to confirm?

Yes that does stop the problem.

I’ve opened a bug report here documenting the issue:

https://github.com/AnalyticalGraphicsInc/cesium/issues/7903

Thanks again for providing the video here. I’m glad the current workaround solves the issue, but hopefully we can find a fix for this artifact since skipLOD does make loading a lot faster.

I’ve found a workaround for this issue:

tileset.tileLoad.addEventListener((tile)=> {

if (tile.geometricError > 14) {

tile.color = new Color(0, 0, 0, 0);

}

});

I’m hiding tiles above a certain geometric error level by setting them to transparent. Is there a way to set a maximum geometric error within Cesium so that it wont load or render any tiles above a value?

Oh interesting! The only issue I can see here is if you’re zoomed out, tiles will start to disappear because it assumes the loaded parent that meets the lower screen space error is sufficient.

Here’s what this looks like for the photogrammetry example on Sandcastle for anyone who wants to see this. It only loads higher resolution tiles, but tiles will disappear when you zoom out.

I think a better workaround for the skip lod artifact here that I just discovered might be to tweak the baseScreenSpaceError:

https://cesiumjs.org/Cesium/Build/Documentation/Cesium3DTileset.html#baseScreenSpaceError

So I would try lowering it so that all tiles in the first couple of levels are loaded. Let me know if that helps.

I tried lowering the baseScreenSpaceError but it didnt seem to make a difference for us, even when I set it as low as 1.

The workaround I posted is a compromise for sure, as its hiding all tiles above a certain LOD level.