Level LOD changes flicker for one frame

I have a large terrain created with world composition. I have created LODs for all terrain levels using the built-in tool (from the levels->details window) and setup the streaming distances so that far away landscape actors are rendered using the generated static mesh.

When the pawn/camera gets close enough, the static mesh level (_LOD1) should be replaced with the landscape actor level, and indeed it is. However, there is a visible one frame delay before the switchover takes place which leads to a rather visible flickering (static mesh->nothing->landscape actor).

Presumably this is because of the delay for the occlusion query? I have tried disabling the async loading, event driven loading and background level streaming and these do not resolve the problem. This did not happen in previous engine versions (off the top of my head, I believe up to 4.14 though I haven’t checked thoroughly).

Hey Jubanka,

So I would say I can go ahead and test this, but to get an accurate repro case I would need the exact setup since you have your stream distances established and are replacing the LOD with and actual landscape actor.

Would you be able to provide me with a test project in say 4.14. so I can test there and upgrade iteratively to see where it started to break?

Have you attempted to use the ‘Dither LOD Transition’ on both the landscape and the static meshes material?

Let me know if you have additional questions.

Thanks,

Hello Andrew,

Thanks for getting back to me.

I will try to get a minimal repro case but first I will bisect this for you. I think this behavior came to be around the time the lighting scenario sublevels functionality was introduced, and that was in 4.14 I believe. So I’ll try to see if this happens in 4.13 or not.

If a level is visible within the current camera position and if in the next frame it is decided that a LOD sublevel should replace it due to distance conditions it is intuitive I believe that it should be assumed that the LOD level should start visible (unoccluded). The current behavior I see is that either: 1) the LOD level is loaded but assumed occluded (hence not drawn) and an occlusion query is executed, leading to a 1 frame delay of drawing nothing, or 2) the streaming subsystem cannot keep up with loading the LOD level, misses 1 frame during which nothing is drawn. I tend to think that it is (1) as the levels are minimal (only the terrain actor and foliage stuff if applicable). Again, note that in the past there were no such 1 frame “glitches” when switching LOD levels.

I have not touched and LOD dithering options in a long while and I assume they are on. I will check on this.

Please hang on for a couple of days as I sort this out and get back to you.

No worries, thank you for taking the time to compile a minimal test project so I can accurately reproduce the issue.

So here are the results of my tests:

The issue is not reproducible using versions 4.13 to 4.15 on a different machine. This second machine is more powerful but also is not using an SLI GPU configuration. The issue is present on the less powerful, SLI machine in 4.15. I did not have time to iterate on that machine too.

I am quite satisfied that the issue does not need further investigation. Even if it is a result of the recent Nvidia SLI optimizations, the speedup obtained by these is good enough to warrant a few hiccups like this.

So from my perspective, we can go ahead and consider this issue closed, unless you think otherwise.

If it is not obstructing your development, and it does not occur on a different machine then we can mark this issue as resolved for now.

Cheers,