In Unreal Engine there are a few ways one can go about creating large, open world environments. One of the simplest solutions that comes to mind is to create a singular gigantic map – but how big can it get?
As it usually goes with game development, the answer to this question is ‘it depends’. There is more to this question than you might think.
Unreal Engine’s default world bounding box is approximately 21km², with player-controlled actors being automatically destroyed if they cross the threshold. Although this feature can be disabled to dramatically increase the effective size of a map, caution is advised as larger levels may lead to a host of other problems.
This article is going to be an exploration of the benefits and complications of increasing the size of a single level in Unreal Engine 5. I hope it can provide some of the critical information you’ll need to plan your game projects.
Before we get too far, I’d just like to add a quick disclaimer: Creating a large open world environment can quickly become very complex with myriad performance considerations that will define what you’re able to achieve. If you’re new to Unreal Engine I would highly recommend starting with something a little more manageable and working your way up to this.
Still not deterred? Let’s have a closer look.
World Bound Checks
The World Bounds limit will keep your player constrained to an area of 21km² (well, 20.9707² to be exact). If they move outside this area their pawn will be automatically destroyed.
The following table shows the extent of the World Bounds in Unreal Units from your map’s origin. These values (with the exception of Z-) cannot be altered without going into the engine’s source code and changing the WORLD_MAX value.
These limitations are somewhat arbitrary, but the world bounds check is enabled by default for your own protection. The further from the origin of the map (coordinate x0,y0,z0) you travel, the more imprecise the coordinate system that so many of the game’s features relies on will become thanks to a phenomenon called floating point imprecision.
We’ll have a look at how that works (and what it looks like) in the next section, but for now just remember that the World Bounds exist to ensure your game doesn’t become unstable.
- You can still place static meshes, landscapes, and other non-dynamic actors beyond the default world bounding box. The World Bounds Check applies only to physics objects and player-controlled actors.
- When playing within the Editor, if an actor hits the edge of the world and is destroyed, it will print a warning to your output log. Keep an eye on it.
To disable this feature entirely, go to your World Settings (Window > World Settings), navigate to the World section, and uncheck Enable World Bounds Checks.
Exploring beyond the edge of the world
If you’re dead set on creating levels that are larger than the default world bounds (and you’ve disabled the safety checks that Epic has put in place for your own protection) you should at least know what to expect.
Put simply, the further objects get from the origin, the more imprecise and unstable their existence in the world becomes.
The short and simplified answer to the question of why this happens is that the numbers get too big for the engine to easily store, and it starts losing track of where objects in the world are meant to be placed.
The long answer is that floating-point imprecision becomes a significant factor when you’re dealing with very large numbers. Although deep-diving this phenomenon is beyond the scope of this article, here is a brief explanation of what is happening in layman’s terms. Forgive me, programmers.
The Unreal Engine coordinate system (amongst other things) uses a 32-bit floating point (or float) value to define the positions of objects in your world. This value has a finite number of digits, and its decimal place will move back and forth along these digits as the value gets bigger or smaller, hence the name ‘floating point’.
One limitation of this method of storing data is that the larger this value becomes, the less digits are available to be used after the decimal place. Just to illustrate this limitation, let’s assume for the sake of example that we have a value with only 4 possible digits (32-bit floats have far more than this, but the principle is the same).
As you can see from the animating dots on the right, the larger the float value, the less digits are left after the decimal place to create smooth motion as they interpolate between positions. This lack of precision will start to affect your level in different ways – some of which may be acceptable to you, and some which may not.
Let’s have a look at those now. Click on any of the images below to see an animated preview.
Safety warning: Please keep in mind that the larger the distance from the origin, the more flickering there will between objects. If you are susceptible to flashing lights/flickering imagery I would recommend playing it safe and just looking at the still preview images.
Distance from the origin: 1,048,535
At the extreme limit of Epic’s recommended level size everything seems as it should be. Let’s move further out.
Distance from the origin: 3,300,000 units.
We’re at the edge of the sky dome. You may notice some subtle wobbling in the environment. This is most obvious in the floor material, which is relying on world-space coordinates to define line positions – the system lacks the precision to place things exactly where they need to go, so they’re flitting between positions.
This will get more and more drastic the further we travel.
Distance from the origin: 10,000,000 units.
As we leaving the atmospheric fog behind, physics, lighting, and shadows will start to break down. It will get increasingly difficult to move.
It just goes downhill from here.
Distance from the origin: 50,000,000 units.
Distance from the origin: 200,000,000 units
Distance from the origin: 1,000,000,000 units
Beyond the infinite, the fabric of the universe unravels.
The future of larger levels in Unreal Engine 5
For the longest time, all the way back to the release of the previous iteration of Unreal Engine, there has been a lot of noise from the community about introducing either a 64-bit float, or a double precision coordinate system. This would vastly increase the potential size of our levels.
During the development of Unreal Engine 4, support for this was quietly dropped in favor of heavier support for level streaming, where smaller levels are asynchronously loaded in and out to simulate a larger space, and the origin is shifted with the player to avoid issues with coordinate precision. This feature was called World Composition.
With Unreal Engine 5, World Composition has been recently deprecated in favor of a new system called World Partition. Although relatively new, World Partition shows great promise – and has been showcased extensively in the Valley of the Ancient tech demo project. If your rig is powerful enough, I’d recommend checking it out.
If you’re interested in World Partition, which is an arguably much more realistic and prudent way of creating huge open world environments, this section of the documentation should also point you in the right direction.
Creating an open world game with a huge environment is a significant technical challenge that requires a lot of planning and forethought. If it’s a multiplayer game, it’s going to be a thousand times more difficult.
If you’re looking to start, I would recommend planning your approach before you even open the Editor – and make sure you have the technology to achieve what you intend. You might have a lot of reading ahead of you.