QUESTION: total world size limits

I’ve seen limits to the world size in terms of the area. Currently it sounds like its 5kX5k.
Is there a limit to a level if height is considered as well?
Basically is there a volume limit?
Is it 5kx5kx5k or would it be more like the cube root of the total area?

Theoretically unlimited, it’s been asked a lot. Here’s one topic going pretty deep into the discussion https://answers.unrealengine.com/questions/8774/large-map-big-world-vast-terrain.html

He’s the layman’s explanation of the issues you normally face with large maps, floating point precision. A coordinate in XYZ can only have so many numbers, so having an object at 1,1,1 is more like having it at 1.000,1.000,1.000. If you want to move it to 10,10,10, you lose the last decimal place so you end up with 10.00,10.00,10.00. And if you go to the limits with this example, 1000,1000,1000, and object at 1000.4,1000.4,1000.4 and at 1000.1,1000.1,1000.1 would both be treated as if they were both at 1000,1000,1000. This can make things jump when they move or start to distort them. Obviously in UE4 this goes up to much bigger numbers, probably about the 5kx5kx5k landscape “limit” that’s mentioned frequently, but I’m not 100% sure on that. The max value for 32bit single floating point precision is 2,147,483,647. This is just my layman’s understanding as an artist so I’m sure a more technical person is going to poke holes at it.

The devs of Dual Universe switched from UE4 to Unigine because of this.

Thinking “double precision of coordinates” need to be given some serious thought.

The problem isn’t really a tough one if you think about the math that causes the limit.

Why can the world only be so large by default? Floating point accuracy.

What do you do when you have a coordinate system that has an upper bounds? You make a grid of those coordinate systems.

How does this translate into code? You make mutator methods that translate the correct position to the correct sub-coordinate system.

If I recall correctly, a Dev response to this idea was on the nature of “the entire engine would require modification.” The UE4 engine was not designed as a large world engine and I would be very much surprised if it ever becomes one.

To drive this point home, the makers of Star Citizen had a whole team of devs spend the better part of 3 years working on getting 64-bit FLOPs integrated into the Cryengine.

I should mention, however, that there is currently on Github a pull request on a patch for the engine that adds origin rebasing. While this would not solve all precision problems, this would allow larger worlds.
There is a dev response in the comments of that. My take on the response is that this solution is unlikely to be implemented in the short term.

Or you could like… have a grid of worlds identified by an offset and adapt the world composition tool in combination with a modified/extended level streaming setup?

One thing that has been at the back of my mind for some time now is a sort of… nested world-position. So instead of a single FLOP being the world-position, you break your universe (or w/e) in to ‘sectors’, where 1 sector = 1 world unit, and each sector contains its own world units, where each world unit within each sector is a ‘region’, and within each region is a world unit, etc…
So you just keep using a world bounds within each n+1 world unit until the total size is large enough to contain your universe.

I had the same idea a long time ago and was wondering if it would actually work. Glad to see I’m not the only one who considered that.

Would that work in multiplayer?

A issue I’ve run into regarding large worlds is using nav meshes. They start behaving very weirdly after a certain size.

This is along the lines of what we are working on presently in our project.

What sort of nav mesh issues have you noticed, as that may be helpful in our setup.

@ajbombadill either the ai stops dead in its track when reaching certain places since the nav mesh isn’t being generated everywhere, or the nav mesh gets generated way above or below the “ground mesh” where AI can’t access it. I asked about it on the UE answer hub page, event sent a developer my project file (which was around 2k x 2k x 2k UE units - not that large) and he told me it was a size issue.

I tried using dynamic Invokers as well, same issue at same spots.

Here’s a screenshot of the sudden end of navmesh, nothing gets generated above the red line.

and the answer from the UE staff was

However since my game is multiplayer (not on dedicated servers), I’m not sure level streaming would solve my problem :frowning: