Fix LOD upscaling in render form UE5

I’m using Cesium for Unreal engine with google maps API. It works great, I just have one problem:

I’m using UE5 sequencer to make a render of a camera move that travels through the mountains. I render loads of warm up frames to give the tiles time to load in, but throughout the animation some of the tiles are updating/upscaling and it’s really noticeable, is there a way around this? Ideal situation would be for the tiles to fully load in before the frame is rendered, but I’m not sure there’s a way to do this?

I’ve attached a video to show what I mean, the central tiles upscaling is the issue! (please watch in full resolution to see it!)

Thanks :slight_smile:

I think I see what you’re talking about. It’s very subtle. I’m noticing more of a lighting change than a change in geometry or texture detail.

Just to be sure, do you think you can make a screengrab and circle the area that you are observing?

Hey Brian,

Thanks so much for the reply! Certainly, I’ve looped one of the more problematic sections and punched in so you can see what the error is. Please have a look at this:

You’re right, it is subtle, but unfortunately it happens in so many places that it becomes really noticeable as there’s constant changes happening all over the screen, please let me know if you have any advice!

Hey @Jonny_Carr,

Unfortunately, the nature of 3D Tiles is to stream levels of detail as needed for the current camera view. This means that higher-detailed tiles won’t pop in until the camera is close enough.

You can try to mitigate this by setting the Maximum Screen Space Error on your tileset to a very low number, like 2. Or 1, if it’s still insufficient. Beware that this will prompt more tiles to load in, which will probably slow down rendering time. But hopefully, it reduces the amount of LOD switching during your sequence.

Aaa I was afraid of this answer haha, OK. Is there any other way to try and mitigate the upscaling effect? I had my SSE set very low already, or even a way to increase the distance from the camera before tiles load in at lower LODs if that makes sense?

Thanks!

Have you tried playing with Cesium3DTilesetUse Lod Transitions?

It won’t keep the transition from happening, but you may be able to find a fade in time that makes it more pleasing.

What if I just want to refresh the tiles in my field of view

Hello @Brian_Langevin @janine

After doing loads of tests I’m still experiencing the same issue although as Brian said it seems like it may be more of a lighting change than LOD upscaling, has anyone seen this before? Would be amazing to fix this.

It seems to correlate directly with the camera’s distance to the mesh, as it gets closer to certain tiles there are really clear pops as though a shadow/some layer of lighting is appearing/disappearing?

I’ve uploaded a video here just playing through my rendered sequence from UE5. Any advice would be greatly appreciated!

EDIT: I enabled ‘suspend Update’ in the debug section of the UE editor and the lighting change stops happening, so it definitely is still to do with the LOD, but not sure how I can fix when it comes to rendering. Please help!

EDIT 2: I had an Idea that I could use the debugging ‘suspend update’ after the mesh has loaded in enough so that it clamps the LOD it’s reached and doesn’t keep popping in, but I would need to keyframe this property ‘on’ after the first few frames of my animation and the property doesn’t have the ability to set keyframes, is this something I could do?

Thanks
Jonny

I previously recommended playing with lod transitions, but my mistake, lod transitions with movie renders doesn’t work! (it’s disabled)

We do have an open issue to make this work though,

I think it would still help this use case.

Hey @Brian_Langevin ,

Thanks for this! Can you spell out what I need to do with this github link to get it working in Unreal with the cesium plugin? I have no knowledge of C++ so I’m pretty clueless when it comes to modifying source code haha!

Thanks again!
Jonny

No worries, but unfortunately there’s nothing really to do, other than wait for someone to fix it (Cesium or community contributions).

In the meantime, would be curious to know how others have worked around this problem.