World Streaming for large worlds
Dawn Engine World Streaming automatically partitions very large worlds into grid cells, streams them in and out at runtime from player or camera streaming sources, and optionally provides HLOD distant proxies, Content Layers, content-bundle (DLC) mounting, and multiplayer synchronization.
Maturity: Delivered. Shipped as the WorldStreaming Gem. Runtime streaming is off by default and must be enabled explicitly in the project Settings Registry.
Double-precision large world coordinates address accuracy at large coordinates; World Streaming addresses load and memory scale. Open-world projects usually need both. See Double-precision rendering.
It does not replace PolyTerrain or Cesium 3D Tiles: those systems own mesh terrain topology and globe-scale geospatial LOD. World Streaming owns grid partitioning and distance-based residency for Prefab/Spawnable content, and can coexist via optional bridges.
What problem this solves
A map tens of kilometers across cannot stay fully resident in memory. Hand-splitting levels and placing load triggers is slow, error-prone, and painful for multi-user editing. World Streaming provides automatic grid partitioning and distance-based streaming so content enters and leaves memory without per-region load scripts.
It does not replace double-precision coordinates: a large world on absolute single-precision floats still jitters far from the origin.
How it works
Author (WorldConfig + partition view)
│
▼
.wsworld + shard Prefabs
│
▼
Asset Processor (PrefabProcessor + aggregator)
│
├── .wsmanifest (+ optional .wschunk)
└── Cell / HLOD Spawnables
│
▼
Runtime (WorldStreamingSystemComponent + streaming sources)
│
▼
On-demand Loaded / Activated world
- Author: declare world configuration on the level (grids, content layers, HLOD) and place content in world space.
- Bake: the editor assigns content to cells; Asset Processor produces cell Spawnables and a
.wsmanifest. - Runtime: streaming sources resolve each cell’s desired state from Load / Activate radii; the system loads, activates, and unloads within budgets.
- Optional: distant cells show HLOD proxies; Content Layers switch content sets; Content Bundles mount extra packs; multiplayer uses server-driven interest.
Startup uses a light Root Spawnable + Manifest + cell Spawnables model: the level root keeps resident config only; world content streams through the Manifest. Do not pack the same content into both Root and cells (use ws_blockOnRootDoubleInstance to catch double instantiation).
Two residency tiers run through the Gem:
- Loaded: entities are resident in memory but not simulating or rendering (warmup).
- Activated: entities are active for simulation and rendering.
Quick start (summary)
- Enable the
WorldStreamingGem, then set/WorldStreaming/Enabledtotrue(and optionallyDefaultManifest). - Create a level from the
WorldStreaming_Leveltemplate (or migrate an existing level). - Place content, bake from Tools → World Streaming, add a Streaming Source to the player or camera.
- Enter play mode and verify with
ws_dumpStats/ws_drawRuntimeHash3D.
Sample automation levels live under AutomatedTesting/Levels/WorldStreaming/. For the full walkthrough and checklist, see
Getting started.
Handbook chapters
| Chapter | Contents |
|---|---|
| Getting started | Enable the Gem, minimal author → bake → stream loop, verify |
| Core concepts | Cell, Grid, Loaded/Activated, Manifest, sources, shards |
| Authoring | WorldConfig, Member, partition view, focus load, editor shards, migration |
| Baking | .wsworld / .wsmanifest, Bake World/Region/Grid, incremental bake |
| Runtime streaming | Streaming sources, resolver, budgets, Content Bundles |
| Content Layers | Tri-state layers, hierarchy, network-role filters |
| HLOD | Five generation policies, show/hide, GPU octahedral |
| Multiplayer | Server authority, sync component, interest, server shards |
| Bridges | Terrain / Vegetation / NavMesh / Atom mode matrix |
| Scripting | RequestBus, ScriptNotification, editor Python, C++ entry points |
| Configuration and debugging | Settings Registry, CVars, console commands, troubleshooting |
| Reference | Component field tables, bus and constant index |
Glossary
| Term | Meaning |
|---|---|
| Cell | Smallest streaming unit; one cell Spawnable asset |
| Grid | Set of equal-size cells; multiple grid levels and optional vertical (Z) partitioning |
| Content Layer | Cross-cell logical group with runtime tri-state Unloaded / Loaded / Activated |
| Streaming Source | Interest point that drives load: component, script transient source, or pull provider |
| Loaded / Activated | Loaded = resident, not simulating; Activated = simulating and rendering |
Manifest (.wsmanifest) | Bake product describing cell layout, dependencies, and HLOD for runtime scheduling |
.wsworld | Authoring descriptor: bake aggregation source list, chunk/shard knobs |
| HLOD | Distant proxy cells; hide when child content activates, show before content unloads |
| Editor shard | Collaboration Prefab split of cell content (sub-shards / per-actor sidecars) |
| Server shard | Multi-authority server ownership index from .wsworld m_shardSize (not the same as editor shards) |
| Content Bundle | Extra .wsmanifest mounted at runtime (DLC); same salt/grids, no cell overlap |
Limits and related capabilities
You can rely on:
- Grid partitioning, editor bake, runtime Loaded/Activated streaming with hysteresis and budgets;
- HLOD policies, Content Layers, Content Bundles (non-chunked root), multiplayer interest sync;
- Integration with double-precision large world coordinates (absolute-distance resolve; sources prefer
*Dtranslation).
Do not assume:
- Runtime enabled by default (you must set
Enabled: true); - Identical API or authoring workflow to other engines’ world-partition tools (Dawn uses Prefab/Spawnable shapes);
- Vegetation / navigation automatically taken over by bridges (defaults are often
Coexist); - HLOD meshes visible without
AtomMode = Bridge; - Content Bundles mountable on a chunked root, or mount state synced by handshake;
- That editor shards and server shards are the same concept.
Next steps
- Getting started: shortest path to a streaming level.
- Double-precision rendering: large-coordinate accuracy and render origin.
- PolyTerrain / Cesium 3D Tiles: mesh terrain and globe-scale geospatial streaming that can coexist with World Streaming.
Getting started
Enable the WorldStreaming Gem, author and bake a minimal partitioned world, add a streaming source, and verify cells load at runtime.
Core concepts
Understand cells, grids, Loaded versus Activated, manifests, streaming sources, HLOD, and the difference between editor and server shards.
Authoring
Declare WorldConfig and .wsworld, place content with MemberComponent, use the partition view, editor shards, focus loading, and migration.
Baking
Bake World, Region, or Grid Level; understand .wsworld to .wsmanifest products, chunks, bake Settings Registry keys, and determinism.
Runtime streaming
Load a world Manifest, configure streaming sources, understand resolve semantics, budgets, hysteresis, and Content Bundles.
Content Layers
Declare Content Layers, control Unloaded / Loaded / Activated state, use layer hierarchy and ClientOnly / ServerOnly network filters.
HLOD
Configure HLOD layers, choose among five generation policies, understand show/hide behavior, and pre-bake GPU octahedral impostors.
Multiplayer
Enable WorldStreaming.Multiplayer, configure ServerDriven authority, place the sync component, and set up interest filtering and server shards.
Bridges
Configure Terrain, Vegetation, NavMesh, and Atom bridge modes so World Streaming can drive region refresh and HLOD mesh visibility.
Scripting
Use WorldStreamingRequestBus, ScriptNotificationBus, EditorWorldStreamingRequestBus, and C++ interfaces from Script Canvas, Lua, and Python.
Configuration and debugging
Settings Registry keys, CVars, console commands, editor diagnostics, and a troubleshooting matrix for World Streaming.
Reference
Author-facing component field tables, bake-injected components, bridge components, and a bus / constant index for World Streaming.