LWC (Large World Coordinates) do not work for First Person Shooters/Driving games. Wobbly rendering artefacts UE5 only (UE4 works fine)

UE5.0.3 and UE5-Main (compiled from source) LWC (Large World Coordinates) do not work for First Person Shooters/ First Person Driving games. When player actor location is x=10km y=10km both static and skeletal meshes wobble/shake/jitter. This effect starts from 3km and and peaks at 10km further increasing distance does not increase wobble noticeably. At 10 000 000km wobble looks almost same as 10km from world origin. I’ve tested UE4.26 and wobble is not as bad as UE5. I’ve noticed that if I increase player actor scale to 10 the wobble is not noticeable anymore… even at 10 000 000km from world origin. No, I’m not going to scale whole game by 10.
I’ve searched info for this issue and all I could find is bug: UE-155378 https://issues.unrealengine.com/issue/UE-155378
This is most likely UE5 rendering issue as individual vertices seem to snap to random positions. While in UE4 whole mesh was shaking at 10km distance from origin.
Is there any chance this issue gets fixed for UE5? For third person games this wobble effect is barely noticeable. For First Person games LWC is useless as max map size is 8x8km(or even less) to avoid wobble.

10km from world origin wobbling:

Its a floating point precision issue.

Why would you or anyone expect anything to work at a distance of 10km from origin anyway?

No. There is no chance this is “getting fixed”.

You need to rebase the world around the player whenever your distance exceeds the precision you need.

The same system used in ue4 is still very likely acrive in 5. And if its not you can probably use the blueprint calls to rebase manually.

The documentation seems to indicate that worlds larger than 21km should be possible (it mentions going up to 88 million km). It seems like in some part of your code it may still be using float instead of double versions of values which would cause the precision errors.
Maybe this LWC conversion guide will point you to some things to check for - Large World Coordinates Project Conversion Guidelines

@MostHost_LA We expect it to work due to introduction of LWC (Large World Coordinates).

@bjgil2 My project is not using any custom code. I’ve conducted tests with blank new UE5.0.3 project using blueprints only and double values.
Thanks for suggestions.

I just completed tests and comparison to UE4.26.2 – there is no wobbly rendering while UE5.0.3 is rendering vertices wobbly.

I’ve created new empty project both in UE4 and UE5. Created new empty level. Placed Sphere Actor (StaticMeshActor). Set coordinates to (X=1000000,Y=1000000,Z=0). Opened level blueprint and added on event tick: Add Actor World Rotation (Z=0,001) for sphere. Set viewport view to top and wireframe. Pressed F to center camera on sphere and zoomed in to max. Alt-S to start simulating project. UE5 vertices are individually snapping around. UE4 everything looks very smooth, no issues.
Here is video comparison:

1 Like

?

Really?
Why are you going to even try to argue that it should be possible when:

  1. it’s obviously not.
  2. It has more than one solution.
  3. its mathematically not possible.

Is it just pure lazyness over not wanting to flick 3 switches or learning how to do things properly, or what exactly?

BWC is probably just using Double instead of Float.
Look up the limitations on what this means to understand why #3
Maybe even what 32bit vs 64bit is…

I did that already. I’ve conducted tests with it and without it. This variable matters not for this issue.

Got it, was just curious if LWC was actually active. Presumably you’re using doubles everywhere. IDK if Epic have actually finished the whole LWC conversion. Anyone know? I’ve gone out to ±2000Km in UE4. Definitely witnessed far more wobble there than 10km…

Please lets keep it professional.
The issue I have is not occuring on UE4.26.2
Could you please elaborate why this issue occurs on UE5, but not on UE4? See my video where sphere is rotating. It shows UE5 and then UE4.

I haven’t tested large distances in UE4. Only up to 10km. Yes, meshes start to shake/jitter at great distances in UE4. It is due to floating point precision. However on UE5 not the meshes jitter, but individual vertices of those meshes thus it creates wobbly looks. What is more interesting that while (UE5) going further than 10km up to 1 000 000km and more doesn’t increase wobbliness intensity. It remains same.

1 Like

Probably has to do with the skeletal mesh itself.

Its a deforming mesh.
Floating point precision matters for individual vertex, when they are being displaced based on WPO. Since wpo is outside the floating point precision.

Normally, the animation is automatically localized (ei, the location is not important to the animation/skinning).
Ue5 being beta if even, and having unfinished issues with skinned mesh, probably doesn’t do it right yet.

Regardless, its a non issue.
Now one should expect things anything to work at 10km or even at 1km from origin.

If the spehere is not a skeletal mesh, then you probably have nanite on.
Nanite works by modyfing your object geometry, so that too not working is no wonder.

Basically anything at all that moves the vertex somehow will be prone to floating point precision errors, flickering, etc.

Worse cases are WPO materials.
Best case are perfect engine objects positioned with no decimal values.
But, get high enoough and the way the Float is stored will also cause issues.

Memory storage is done by converting to binary.
I wasn’t kidding when I told you to look up what 32bit vs 64bit means to learn why what you are asking is mathematically impossible.

1 Like

The issue exactly same with both static mesh and skeletal mesh. It is not problem for third person games, but it is great problem for first person games.

Its not a problem at all.
Rebase your world every 200m.

World Rebase has lots of problems in UE5. Just tested - seems not to work properly with world partition system. But I’m sure there are ugly ductape solutions for those problems.

UE-155378 has been solved - however my issue of wobbly rendering remains both with static meshes and skeletal meshes. I’ve tested with latest source version from Github.

World whatever in 5 is a joke.
Either make your own system or wait until they fix it. At this rate 2025.

You can also just make uour own world rebasing system, or call the operation manaually in BP…

@Elitic I guess I have the same exact problem, and there’s no real reason for that if internally 64bit are used for actor placement. Have a look at my post at the CESIUM forum, because I thought that maybe it was caused by the CESIUM plugin (it isn’t):

I really kills the UE5 implementation, and rebasing is not an option.

Did you send in an error report to Epic Games?

Best
Andreas

1 Like

@Elitic The jittering sphere mesh would be a perfect demo to show the problem to Epic Games, great!

1 Like

@Elitic I just saw that the engine issue was updated yesterday:

Did you by chance build from source again and checked if the issue is still there?

1 Like

Yes, I’ve reported issue to Epic.
Yes, sphere example is most basic and very easily achieved. I’ve sent them video.
I’ve just I’ve tried to compile latest UE5-Main (5.2), but it failed to compile.
Then I’ve tried to compile 5.1 brach from github. It succeed, but issue remains unchanged.

Thanks to your link to your post on Cesium forum I started to dig into UE5 source code and found workaround/solution.
In Engine/Source/Runtime/Core/Private/Misc/LargeWorldRenderPosition.cpp
Just change:
#define UE_LWC_RENDER_TILE_SIZE 2097152.0
into smaller value (I’ve changed into 8 times smaller)
#define UE_LWC_RENDER_TILE_SIZE 262144.0

I do not know what will be side-effects because of this change :eyes:, but it seems to solve the issue.
I’m not marking this as “Solved” as this issue still needs to be fixed by Epic Games. Not everyone wants to compile engine from source. (It requires ~250GB)