Level streaming and World Partition
How large worlds load piece by piece around the player; Unreal Engine 5's World Partition grid, streaming sources, Data Layers, One File Per Actor and HLOD, Unity's additive scenes, and what environment artists need to set and check.
Level streaming loads and unloads parts of a game world while the player moves, so only the area around them is in memory. Unreal Engine 5's World Partition does this automatically: Epic calls it "an automatic data management and distance-based level streaming system" that loads "only the parts of the Level that the player sees and interacts with" (Unreal Engine documentation: World Partition in Unreal Engine).
Streaming is what makes open worlds possible, but it also changes how artists work. Your actors land in grid cells, distant areas are drawn by HLOD proxies instead of the real meshes, and several people can edit the same map at once. This page explains the systems and the settings an environment artist touches.
#From sublevels to a grid
Older Unreal projects split a world by hand into a persistent level and many sublevels, each loaded by volumes or scripts. World Partition replaces that manual division: the whole world is stored "in a single persistent Level" and divided into grid cells, and cells load and unload according to streaming sources (Unreal Engine documentation: World Partition in Unreal Engine).
#Grid cells and loading range
The default runtime grid is a 2D grid. Its two main settings are Cell Size, the size of the cells that become streaming levels, and Loading Range, how far from a streaming source cells load; Epic's example values are 256 m cells and a 768 m loading range (Unreal Engine documentation: World Partition in Unreal Engine). Epic warns that more than one runtime grid "can negatively impact performance" (Unreal Engine documentation: World Partition in Unreal Engine).
#Streaming sources
By default each Player Controller is a streaming source; a World Partition Streaming Source component can add more, with its own shapes, priority and target state (Loaded or Activated) (Unreal Engine documentation: World Partition in Unreal Engine). Epic's example is a teleport: a source at the destination preloads cells before the player arrives, then switches off so the old cells unload (Unreal Engine documentation: World Partition in Unreal Engine).
#One File Per Actor
With One File Per Actor (OFPA), each actor in the level is saved to its own file. Epic notes that "you do not need to check out the Level file from source control to make changes", which leaves the level free for teammates (Unreal Engine documentation: World Partition in Unreal Engine). For an art team this is the biggest day-to-day change: two artists can dress different streets of the same city at once. See source control for artists for the wider workflow.
#Data Layers
Data Layers group actors so that whole sets can be switched on or off. Epic's overview states how they combine with streaming: an actor with Is Spatially Loaded enabled loads when a streaming source is in range "unless it is assigned to a disabled Data Layer", and an actor with it disabled loads unless its Data Layer is disabled (Unreal Engine documentation: World Partition in Unreal Engine). Artists use this to keep variants of an area apart, for example the same village before and after an event, and the tutorials below show runtime switching (YouTube: Understanding World Partition, Data Layers…; YouTube: World Partition And Data Layers - Unreal…).
#HLOD in World Partition
Unloaded cells would leave holes on the horizon, so World Partition builds HLOD actors per cell based on HLOD Layer settings, with Build HLODs or a commandlet (Unreal Engine documentation: World Partition in Unreal Engine). The console command wp.Runtime.HLOD 0 shows the world without HLODs, which is a quick way to see what is real and what is a proxy (Unreal Engine documentation: World Partition in Unreal Engine). The hierarchical LOD page explains the proxy types and how artists tune them.
#What environment artists need to know
- Is Spatially Loaded. Leave it on for normal props. Turn it off for things that must always exist, such as distant backdrops, which the editor loads even when the world is otherwise unloaded (Unreal Engine documentation: World Partition in Unreal Engine). See skyboxes and background vistas.
- Actor references bundle actors. Actors that reference each other are bundled and load together, and actors referenced from a Level Blueprint become Always Loaded (Unreal Engine documentation: World Partition in Unreal Engine). A light linked by reference to a prop on the far side of the map keeps both in memory; prefer Blueprint classes, as Epic advises (Unreal Engine documentation: World Partition in Unreal Engine).
- The editor starts unloaded. You load the area you work on from the World Partition Editor (Window > World Partition > World Partition Editor) by dragging a region and choosing Load Region from Selection, or through named Location Volumes (Unreal Engine documentation: World Partition in Unreal Engine).
- Test from anywhere. Shift + double-click in the World Partition window starts Play In Editor at that spot, and Shift + drag snaps a selection to the runtime grid (Unreal Engine documentation: World Partition in Unreal Engine).
- Watch HLOD transitions. Fly to the edge of the loading range and check that HLODs match the real meshes in colour and silhouette; mismatches show as popping.
- Streaming covers textures too. World Partition decides which actors exist; texture streaming decides which mip levels of their textures are resident. Both can cause blurry or late-appearing detail.
#Unity: additive scenes
Unity has no single built-in equivalent of World Partition. Its building block is the scene: you "can open and edit multiple scenes in the Unity Editor simultaneously", and the same system helps "manage multiple scenes at runtime" (Unity Manual: Work with multiple scenes in Unity). Loading a scene with LoadSceneMode.Additive "Adds the Scene to the current loaded Scenes" instead of replacing them (Unity Scripting API: SceneManagement.LoadSceneMode.Additive). A streamed world in Unity is therefore a set of scenes (terrain tiles, towns, interiors) loaded and unloaded additively by your own scripts or a package.
Two details matter for artists. Lightmaps and occlusion culling data can be baked "in multiple scenes simultaneously" so neighbouring scenes match (Unity Manual: Work with multiple scenes in Unity). And if you use light probes, Unity says you "must run LightProbes.Tetrahedralize() afterwards" when scenes are loaded additively (Unity Scripting API: SceneManagement.LoadSceneMode.Additive); see light probes and reflection probes.
#How to set one up
Unreal Engine 5
- Start from the Open World template, which enables World Partition, One File Per Actor, Data Layers and HLOD and includes a 2 km × 2 km landscape. To convert an existing level, use Tools > Convert Level or the
WorldPartitionConvertCommandlet; the-ReportOnlyoption shows what would change and-ConversionSuffixkeeps the original map (Unreal Engine documentation: World Partition in Unreal Engine). - In World Settings, check Enable Streaming and set the runtime grid's Cell Size and Loading Range (Unreal Engine documentation: World Partition in Unreal Engine). Begin with Epic's example values (256 m and 768 m) and adjust after profiling.
- Open Window > World Partition > World Partition Editor, build the minimap with Build Minimap, and load the region you want to dress (Unreal Engine documentation: World Partition in Unreal Engine).
- Place backdrops and always-needed actors with Is Spatially Loaded off; leave it on for everything else (Unreal Engine documentation: World Partition in Unreal Engine).
- Put optional or alternative content in Data Layers (Unreal Engine documentation: World Partition in Unreal Engine).
- Run Build HLODs, then fly around in Play In Editor and compare with
wp.Runtime.HLOD 0(Unreal Engine documentation: World Partition in Unreal Engine).
Unity
- Split the world into scenes: one persistent scene for the player, lighting and managers, plus one scene per area.
- Open several of them together for editing and bake lightmaps and occlusion data across them in one go (Unity Manual: Work with multiple scenes in Unity).
- Load areas at runtime with LoadSceneMode.Additive (Unity Scripting API: SceneManagement.LoadSceneMode.Additive), triggered by distance or volumes, and unload them when the player leaves.
- After an additive load that brings in light probes, call
LightProbes.Tetrahedralize()(Unity Scripting API: SceneManagement.LoadSceneMode.Additive).
#Video tutorials
#Use in shipped games
- Marvel's Spider-Man (Insomniac Games, 2018). Elan Ruskin's GDC 2019 technical postmortem covers how the studio adapted "rendering, streaming, and lighting to build a New York City that fits on a Blu-Ray", along with procedural tools for marking up Manhattan (GDC Vault: 'Marvel's Spider-Man': A Technical Postmortem).
- The Witcher 3: Wild Hunt (CD PROJEKT RED, 2015). The world was too large for manually placed occluders, so Umbra's automatic visibility system was integrated into REDengine 3, and Umbra built new streaming and LOD support for its data to meet the game's requirements. Documented in a GDC 2014 talk by engineers from Umbra Software and CD PROJEKT RED (GDC 2014: Solving Visibility and Streaming in The…).
- Unreal's Open World template is not a game, but it is Epic's reference configuration: World Partition, OFPA, Data Layers and HLOD all enabled on a 2 km landscape (Unreal Engine documentation: World Partition in Unreal Engine). Inspecting its settings is a good way to see sensible defaults.
#In different tools
| Engine | Streaming approach | Collaboration |
|---|---|---|
| Unreal Engine 5 | World Partition grid with streaming sources, Data Layers and per-cell HLOD (Unreal Engine documentation) | One File Per Actor |
| Unity | Additive scene loading under your own control (Unity Scripting API; Unity Manual) | One scene per area; scenes are separate files |
Related: hierarchical LOD · level of detail · texture streaming · frustum and occlusion culling · terrain and landscapes · procedural placement and scattering · performance and profiling · source control for artists
#Further reading and watching
References
- · World Partition in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-22
- · Understanding World Partition, Data Layers and Level Instances in UE5 · YouTube · video · accessed 2026-10-22
- · World Partition And Data Layers - Unreal Engine 5 Tutorial · YouTube · video · accessed 2026-10-22
- · Work with multiple scenes in Unity · Unity Manual (Unity 6) · docs · accessed 2026-10-22
- · SceneManagement.LoadSceneMode.Additive · Unity Scripting API (Unity 6) · docs · accessed 2026-10-22
- · 'Marvel's Spider-Man': A Technical Postmortem · GDC Vault, 2019 · talk · accessed 2026-10-22
- · Solving Visibility and Streaming in The Witcher 3: Wild Hunt with Umbra 3 · GDC 2014 (GDC Vault), 2014 · talk · accessed 2026-10-22
Pages that link here
- Level of detail (LOD) Topic
- Impostors and billboards Key term
- Hierarchical LOD (HLOD) Key term
- Foliage and vegetation Topic
- Procedural placement and scattering Topic
- Frustum and occlusion culling Key term
Last updated 2026-10-22