Dynamic screen space error not working in 3D Tiles Inspector

Hello,
I don’t know if this is a bug or if I am just not understanding how the dynamic screen space error works.

I used the “3D Tiles Point Cloud” sandcastle example (Cesium Sandcastle) and added the 3D Tiles inspector using:

viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin);
const inspectorViewModel = viewer.cesium3DTilesInspector.viewModel;

Then in the inspector, I activated the “Dynamic Screen Space Error”.

I expected that tiles further away are rendered more sparse or even disappear. To see how the values work, I moved the sliders for “Screen Space Error Density” and “Screen Space Error Factor”. But it doesn’t matter how i move these sliders, nothing happens. I also moved around in the point cloud to test different positions. The only slider that actually does something is the “Maximum Screen Space Error” slider, but that is not part of the dynamic SSE.

My use case is that in my program, I display very large point clouds, and some users complained that the performance is very bad. We already use the Max SSE as a Rendering Quality Setting. I thought we could optimize this further by “throwing away” tiles that are far away, and all research pointed to dynamic SEE.

Is this broken? Or am I misunderstanding the dynamic SSE?

In my program, changing the density does a little bit of what I am trying to achieve, but it’s like loading 120 tiles instead of 125, which is not enough. So I thought I’d have to adjust the screen space error factor, but this changes nothing (tried values 1, 4, 1024).

Any help or advice is very much appreciated!

In case somebody finds this and has the same problem:

In my app, I combined the dynamicScreenSpaceErrorFactor with the dynamicScreenSpaceErrorDensity in the same slider. Now I got visual results that I like.

However, this obviously doesn’t solve the issue of the sand castle.

Hi @anneg,

Would you happen to have an example with the point cloud you mentioned?

For the linked sandcastle, the root tile is still fairly dense.

However, it does appear that changing Dynamic Screen Space Error properties do not prevent the root tile from being visualized. Were you expected this tile to be culled completely?

Hi @Gappby_Getz,

unfortunately, I may not share that specific point cloud.

However, it does appear that changing Dynamic Screen Space Error properties do not prevent the root tile from being visualized. Were you expected this tile to be culled completely?

I was expecting something to happen. Anything. It’s like the slider is completely ignored:

I am not sure if I expect the root tile to be culled, too. If I choose extrem values, yes. But not as a necessity as a result of the dynamic SSE.

dynSSESandcastle

I tried this out with some other point clouds such as the Montreal point cloud example and I’m seeing similar behavior.

@sean_lilley Would you be able to chime in here and let us know what the expected behavior should be?

1 Like

Dynamic SSE works like fog and is strongest for horizon views over long distances.

But I agree, I really have to crank up the values to see any change in the Montreal point. I wonder if something changed recently that made the effect weaker.

Just to close the loop, there was a problem with the inspector’s dynamic SSE slider, this was fixed in https://github.com/CesiumGS/cesium/pull/11718.

Furthermore, in that PR I updated the documentation since the parameters were a bit confusing. The short of it is:

  • dynamicScreenSpaceErrorFactor controls the strength of this optimization. Larger values → a larger SSE reduction for tiles on the horizon → lower resolution tiles render.
  • dynamicScreenSpaceErrorDensity controls how near/far the “fog” is to the camera. Larger values mean closer to the camera. And the old default was far too close to the camera for most views, so this might explain why changing it might not have had a noticeable effect.

I had made some diagrams when I was learning how that works, see this comment in GitHub: Make Models be affected by Fog · Issue #4196 · CesiumGS/cesium · GitHub

1 Like