Streaming, World Partition, and HLOD¶
Rephrased act maps stream rooms instead of loading one monolithic level. This page records the level shape, why that shape exists, how World Partition streaming and HLOD are expected to behave, and the open Act 3 overlook work.
Level structure¶
The current level shape is:
| Level | World Partition | Enable Streaming | Runtime behaviour |
|---|---|---|---|
Act map, for example Content/Rephrased/Levels/Overworld/Lvl_Overworld |
on | on | Streams the rooms placed inside it. |
Room or sub-region level, placed as a Level Instance with an LI_ prefix |
on | off | Loads as one unit; at runtime the room's actors merge into the act map streaming grid. |
Additional rules:
- The act map is
Content/Rephrased/Levels/Overworld/Lvl_Overworld. - Rooms are World Partition enabled levels. A plain, non-World Partition room cannot expose Data Layer assignments inside the act map.
- The placed Level Instance actor keeps its Runtime Behavior at
Partitioned. That is what allows a runtime Data Layer to reach inside a room. - Editor-only layer discipline, runtime Data Layer policy, naming, and Perforce cost are covered in Data Layers and are not repeated here.
Why this shape¶
Levels cannot be merged in Unreal. If every designer edits the same act map, submit conflicts are guaranteed under Perforce binary locking, just as they would be under any other VCS. The solution is to split the work into files that do not contend:
- Each designer owns a tile or a room. A room owns its own
.umap; the act map owns only the placement of the room in town. - One File Per Actor stores map actors as separate files under
__ExternalActors__. Editing one actor checks out only that actor's file, not the whole act map. - The 2026 W37 two-designer test confirmed that editing two separate room maps produces disjoint changelists; neither one touches the parent act map.
The same separation is what makes streaming practical: each room and each town placement is independently loadable and independently editable.
What the map file locks¶
Lvl_Overworld.umap and its actors are separate files, so a checkout of the map file leaves actor work open to everyone else.
| Edit | What gets checked out |
|---|---|
| Move, edit, add, or delete a placed actor | Only that actor's file under Content/__ExternalActors__/Rephrased/Levels/Overworld/Lvl_Overworld/ |
| Edit the level Blueprint | Lvl_Overworld.umap |
| Change World Settings, such as the game mode override or World Partition settings | Lvl_Overworld.umap |
While one person holds Lvl_Overworld.umap for a level Blueprint change, everyone else keeps working on actors in the map. The level Blueprint and World Settings wait until the map file is submitted. Each actor file is its own exclusive checkout, so one person edits a given actor at a time.
When saving actor work while someone else holds the map, save through the editor's save prompt and leave Lvl_Overworld.umap unchecked if it is listed.
Data Layer edits have their own shared lock; see Data Layers.
Loading behaviour for the player¶
The target is to stream only what the player can see:
- Adjacent tiles or rooms load so neighbouring rooms are visible.
- One to two neighbours is the intended working set, not the whole world.
- Distant areas are hidden with fog or cloud instead of being loaded.
- Walking on the same layer stays seamless; transitions between stacked town layers may use a black screen.
This is the direction locked in the Sept 2 Design/Eng sync, section 8.
The Act 3 overlook requirement¶
The Act 3 endpoint requires the player to look down from the top of Cascade Town and read the town below as one rune.
That requirement changes the streaming plan for the lower sheets:
- The lower stacked sheets must remain renderable from the overlook, not stream out when the player is above them.
- Distant geometry therefore needs distance-driven HLOD rather than being removed by streaming range.
- The town sheets are stacked vertically. The World Partition runtime grid is 2D by default and cells are unbounded in Z, so the stacked sheets share a runtime grid cell. This means the grid's loading range and cell size, plus the HLOD layer assignment, decide whether the overlook works.
If lower sheets stream out, the rune shape breaks. If the sheets stay loaded as full actors, the overlook costs more than needed. HLOD is the intended path between those two failures.
Settings that matter¶
| Setting | What it does | Why it matters here |
|---|---|---|
| Loading range | How far around the player the runtime grid loads cells. | Must be large enough for the lower sheets to be resident when the player overlooks the town, without loading the whole act. |
| Cell size | Spatial granularity of the streaming grid. | Finer cells help local streaming, but stacked sheets still share a cell in Z. Cell size alone cannot separate vertical layers. |
| HLOD layer assignment | Groups distant actors into merged or instanced HLOD proxies. | The lower town must be assigned to HLOD layers so it renders as one readable rune from the overlook without keeping every actor fully loaded. |
Real paths and generated assets currently documented:
- Overworld World Partition map:
Content/Rephrased/Levels/Overworld/Lvl_Overworld - The act map generates
_HLODLayer_Instancedand_Mergedassets. Hand-authored HLOD layer asset filenames for the overlook are still to be recorded; inspect the map in the World Partition Editor and the HLOD Layers panel before assigning geometry.
Lvl_Overworld has streaming enabled and the six Editor Data Layers registered. The overlook work adds geometry and HLOD layer assignment on top of that base.
How to verify¶
Verify in PIE while walking the town, not only in editor:
- Walk from the town entrance up through the stacked layers.
- Watch the World Partition minimap and the visible lower sheets while ascending.
- At the overlook, the lower stacked sheets must read as one rune shape, not as separate disconnected chunks.
- Walk away and back toward the overlook.
A failure looks like:
- Lower sheets disappear beyond the loading range, leaving holes in the rune shape.
- The rune shape pops between full geometry and an HLOD proxy in a way that breaks the read.
- Stacked sheets render correctly on lower layers but fail when the player is above them.
- Fog hides parts of the rune shape before the player reaches the overlook.
Open questions¶
- Behaviour in a cooked or packaged build is untested; everything above is PIE.
- Interaction between HLOD and the stacked Cascade Town sheets is untested. This remains part of the HLOD validation pass.
- Fog tuning has not been measured against the overlook read.
- The vertical-grid question is unresolved: the runtime grid is 2D by default and cells are unbounded in Z, so the stacked sheets share a cell. The working recommendation is to stay on the 2D grid and revisit with measurements during the HLOD validation pass, but the decision is still open.
Sources¶
- Sept 2 Design/Eng sync - section 8 sets per-designer tile ownership, adjacent-tile streaming, and fog or cloud hiding for distant areas.
- Data Layers - the Data Layer policy for act maps and Level Instance rooms, cross-linked rather than repeated here.
- 2026-W37-Ricky devlog - records the vertical stacking problem, the 2D runtime grid observation, and the displacement of the future HLOD validation pass.
- 2026-W38-Ricky devlog - confirms HLOD interaction and stacked Cascade Town sheets remain untested.
- Game Macro Sheet, https://docs.google.com/spreadsheets/d/1AqkkpkS2IqRH8nbKNO7CpgQZfaJhAffM1DTMJ3DCs1w/edit - Cascade Town macro entry, including the stacked town sheets and the overlook end.
- Epic Games: World Partition - Data Layers
- Epic Games: One File Per Actor
Change history¶
- 2026-10-07 — Gabriel Li — Added what the map file locks: level Blueprint and World Settings check out
Lvl_Overworld.umap, actor edits check out per-actor files. - 2026-09-29 — Gabriel Li — The act map is
Lvl_Overworld. - 2026-09-17 — Gabriel Li — Created streaming, World Partition, and HLOD page for the Act 3 overlook task.