The 3D Handbook
Topic

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.

engineoptimisationopen-worldunrealunityproduction

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).

A grid of 8 by 6 square cells seen from above. An orange dot marks the player. A dashed orange circle around the player marks the loading range; the cells it touches are tinted orange and labelled loaded. The other cells are grey and each contains a small grey block standing for its HLOD proxy.
Cells inside a streaming source's loading range load their full actors. Cells outside it unload, and their HLOD proxies stand in for them in the distance.Diagram by the handbook author

#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.

Two panels. Left, one level file containing all actors; artist A has it checked out and artist B's dashed line shows they must wait. Right, a small level file plus twelve separate actor files; artist A and artist B each point to a different actor file.
With one level file, saving is serial. With One File Per Actor, people lock and save individual actors, so conflicts happen only when two people touch the same object.Diagram by the handbook author

#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

#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

  1. 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 -ReportOnly option shows what would change and -ConversionSuffix keeps the original map (Unreal Engine documentation: World Partition in Unreal Engine).
  2. 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.
  3. 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).
  4. 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).
  5. Put optional or alternative content in Data Layers (Unreal Engine documentation: World Partition in Unreal Engine).
  6. 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

  1. Split the world into scenes: one persistent scene for the player, lighting and managers, plus one scene per area.
  2. 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).
  3. 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.
  4. 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

  1. Epic Games · World Partition in Unreal Engine · Unreal Engine documentation · docs · accessed 2026-10-22
  2. Unreal Engine Miami · Understanding World Partition, Data Layers and Level Instances in UE5 · YouTube · video · accessed 2026-10-22
  3. Pitchfork Academy · World Partition And Data Layers - Unreal Engine 5 Tutorial · YouTube · video · accessed 2026-10-22
  4. Unity Technologies · Work with multiple scenes in Unity · Unity Manual (Unity 6) · docs · accessed 2026-10-22
  5. Unity Technologies · SceneManagement.LoadSceneMode.Additive · Unity Scripting API (Unity 6) · docs · accessed 2026-10-22
  6. Elan Ruskin (Insomniac Games) · 'Marvel's Spider-Man': A Technical Postmortem · GDC Vault, 2019 · talk · accessed 2026-10-22
  7. Umbra Software and CD PROJEKT RED · Solving Visibility and Streaming in The Witcher 3: Wild Hunt with Umbra 3 · GDC 2014 (GDC Vault), 2014 · talk · accessed 2026-10-22

Last updated 2026-10-22