To guarantee that your islands run on all supported platforms, Fortnite has some memory limitations in place.
With the previous limits in Creative, you had to ensure that your experiences didn't go over the 100,000 memory units allowed on a regular-sized island.
The Spatial Thermometer on an XL island gets around this limit as long as each area does not surpass the 100,000 unit threshold.
In Unreal Editor for Fortnite (UEFN), you can use expanded memory capabilities to make larger and more diverse experiences. To fully take advantage of this, it helps to understand the way that memory use is calculated in UEFN.
Introducing World Partition
World Partition is the magic behind building a large island experience. This feature automatically divides the world into a grid, and streams only the necessary cells.
World Partition uses Streaming, which loads and unloads cells, and Hierarchical Level of Detail (HLOD), that groups and decreases the amount of detail on assets as the player camera moves away.
For more information on World Partition, Streaming, and HLODs, see Streaming and HLODs.
The New Session Layout
The Cell Memory Used bar that Fortnite creators are accustomed to has changed. As long as Streaming is enabled in your project, you are no longer limited to a maximum amount of memory units on your island.
When you load into your session, you will see a Current Memory Usage bar on your HUD.
Current Memory Usage
Current Memory Usage shows a maximum of 100,000 memory units to give you a picture of the local memory usage on your island.
The main difference in your Creative Edit session is that memory is now calculated based on player positions on the island rather than the total memory used by all the assets on the island. Performing a memory calculation will give you the most accurate memory consumption values for each streaming cell.
Some assets will stay in memory regardless of the player's position, and will add to the memory usage anywhere in the map.
Assets that count toward total memory currently include but are not limited to:
- Devices
- Custom landscapes
- Custom assets
Most other assets will load and unload as explained above, and the bar will show the memory usage for a specific area of the island.
Note that if any area in your level exceeds the 100,000 mark, you will not be able to publish your island.
As a UEFN user, you can exceed the 100,000 thermometer limit as long as you don't publish. Keep in mind that people collaborating with you on a console might hit a hardware limit of available memory that will kick them out of the session. They can reconnect once the issue is resolved.
Memory Calculation
Your island needs to be able to run on all supported hardware platforms for you to successfully publish.
Before publishing, it is vital to make sure your project does not exceed memory limits to ensure that it will. From the Project dropdown, select Launch Memory Calculation.
This process calculates the memory used in every cell.
-
A dialog box will prompt you to Upload Private Version. Click the button and observe the progress bar.
-
Optionally, you can add a description for your project version.
-
A pop-up on the bottom of your screen will tell you that Memory calculation is in progress.
-
Once the upload is complete, the pop-up changes to indicate that the Calculation is started.
-
In the client, the memory calculation result appears. Pressing Continue will return control of your player character.
-
Once finished, the player character teleports back to the original location before calculation started and you’ll see one of two statuses:
-
After the memory calculation, you can open a sheet with top 100 memory-heavy assets on your island. Go to Window > Message Log > Memory Test Results.
The table below defines each term:
Term Meaning Explanation ShrdAsset Shared Asset Size The amount of memory used by an asset, plus any dependencies shared with other assets. For example, for a texture shared by two meshes, the memory used by the texture would be a shared cost for the two meshes. ExclAsset Exclusive Asset Size The amount of memory used by this asset plus any dependencies that are unique to it. For example, for a texture only used by one mesh, the memory used by the texture is a cost exclusive to the single mesh using it. PerInstMin Minimum Instance Size The lowest amount of memory used by a single instance of the asset. e.g. If there is a user widget being displayed by 10 actors, and there is a per-instance setting to adjust the resolution the widget is drawn at, this would the memory used by the instance drawing the widget at the lowest resolution. PerInstMax Maximum Instance Size The highest amount of memory used by a single instance of the asset. e.g. If there is a user widget being displayed by 10 actors, and there is a per-instance setting to adjust the resolution the widget is drawn at, this would the memory used by the instance drawing the widget at the highest resolution. NumInst Number of Instances The number of times the asset appears on the island. Total Instance Size Total Instance Size The sum of all asset instance sizes. TotalExcl Total Exclusive Size Made up of ExclAsset and Total Instance Size. This is how the detailed memory results are currently sorted. Total Total Size Made up of ShrdAsset and TotalExcl.
If you have Streaming enabled on your project, you can now fly around to see the amount of space different areas take up.
If Streaming is enabled, the Memory Used bar changes during the flythrough. You can use this to identify the areas in the level that might be over budget.
If your island is over budget, you will need to fix the local memory issues before publishing.
My Island Is Over Budget. What Can I Do?
There are many strategies to save on memory once you hit the limit. Try any combination of the following:
-
After the memory calculation, you can open a sheet with top 100 memory-heavy assets on your island. Go to Window > Message Log > Memory Test Results.
The table below shows you what each term means:
Term Meaning Explanation ShrdAsset Shared Asset Size The amount of memory used by an asset, plus any dependencies shared with other assets. For example, for a texture shared by two meshes, the memory used by the texture would be a shared cost for the two meshes. ExclAsset Exclusive Asset Size The amount of memory used by this asset plus any dependencies that are unique to it. For example, for a texture only used by one mesh, the memory used by the texture is a cost exclusive to the single mesh using it. PerInstMin Minimum Instance Size The lowest amount of memory used by a single instance of the asset. e.g. If there is a user widget being displayed by 10 actors, and there is a per-instance setting to adjust the resolution the widget is drawn at, this would the memory used by the instance drawing the widget at the lowest resolution. PerInstMax Maximum Instance Size The highest amount of memory used by a single instance of the asset. e.g. If there is a user widget being displayed by 10 actors, and there is a per-instance setting to adjust the resolution the widget is drawn at, this would the memory used by the instance drawing the widget at the highest resolution. NumInst Number of Instances The number of times the asset appears on the island. Total Instance Size Total Instance Size The sum of all asset instance sizes. TotalExcl Total Exclusive Size Made up of ExclAsset and Total Instance Size. This is how the detailed memory results are currently sorted. Total Total Size Made up of ShrdAsset and TotalExcl. -
Turn Streaming ON in the World Partition panel. Although this is a must for large islands, smaller islands may also benefit from streaming, especially if the content gets too dense.
-
Spread your island's content evenly. Concentrating too many actors in a small area will not allow content to be streamed out, and will contribute to exceeding your memory budget.
-
Reduce the number of devices your island is using. Devices are among the most expensive actors you can place. However, placing instances of the same device incurs a much lower memory cost.
-
Take a look at the Project Size window. If you see some memory-heavy objects on disk, chances are they’ll also be heavy on memory at runtime. To check your project size, click the Project dropdown and select Project Size.
-
Reduce the quality level on custom asset LODs, especially on those assets that are only visible from a distance.
-
Reuse the same mesh multiple times. In a forest made of 100 trees, use 5 variations and duplicate them around instead of using 100 unique trees. This will make a huge difference on the memory footprint.
-
If using HLODs, generate them throughout the process of the project and ensure that you're only generating them for objects you can see from far away.
-
Make use of Data Layers if your islands can be subdivided into configuration that aren't all meant to be displayed all at once. For example, an underground dungeon that isn't reachable unless the player enters a shrine.
-
Lower the mesh complexity of your custom content. High-poly meshes incur a higher memory cost. Edit the mesh by double-clicking on it in the Content Browser, and adjust the Keep Triangle Percent value under Nanite Settings. Using a lower value will lower the complexity of the mesh and reduce the actor's memory cost.