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
  1. Author: declare world configuration on the level (grids, content layers, HLOD) and place content in world space.
  2. Bake: the editor assigns content to cells; Asset Processor produces cell Spawnables and a .wsmanifest.
  3. Runtime: streaming sources resolve each cell’s desired state from Load / Activate radii; the system loads, activates, and unloads within budgets.
  4. 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)

  1. Enable the WorldStreaming Gem, then set /WorldStreaming/Enabled to true (and optionally DefaultManifest).
  2. Create a level from the WorldStreaming_Level template (or migrate an existing level).
  3. Place content, bake from Tools → World Streaming, add a Streaming Source to the player or camera.
  4. 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

ChapterContents
Getting startedEnable the Gem, minimal author → bake → stream loop, verify
Core conceptsCell, Grid, Loaded/Activated, Manifest, sources, shards
AuthoringWorldConfig, Member, partition view, focus load, editor shards, migration
Baking.wsworld / .wsmanifest, Bake World/Region/Grid, incremental bake
Runtime streamingStreaming sources, resolver, budgets, Content Bundles
Content LayersTri-state layers, hierarchy, network-role filters
HLODFive generation policies, show/hide, GPU octahedral
MultiplayerServer authority, sync component, interest, server shards
BridgesTerrain / Vegetation / NavMesh / Atom mode matrix
ScriptingRequestBus, ScriptNotification, editor Python, C++ entry points
Configuration and debuggingSettings Registry, CVars, console commands, troubleshooting
ReferenceComponent field tables, bus and constant index

Glossary

TermMeaning
CellSmallest streaming unit; one cell Spawnable asset
GridSet of equal-size cells; multiple grid levels and optional vertical (Z) partitioning
Content LayerCross-cell logical group with runtime tri-state Unloaded / Loaded / Activated
Streaming SourceInterest point that drives load: component, script transient source, or pull provider
Loaded / ActivatedLoaded = resident, not simulating; Activated = simulating and rendering
Manifest (.wsmanifest)Bake product describing cell layout, dependencies, and HLOD for runtime scheduling
.wsworldAuthoring descriptor: bake aggregation source list, chunk/shard knobs
HLODDistant proxy cells; hide when child content activates, show before content unloads
Editor shardCollaboration Prefab split of cell content (sub-shards / per-actor sidecars)
Server shardMulti-authority server ownership index from .wsworld m_shardSize (not the same as editor shards)
Content BundleExtra .wsmanifest mounted at runtime (DLC); same salt/grids, no cell overlap

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 *D translation).

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

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.


Copyright © 2026 DawnEngine. All rights reserved.

DawnEngine is a commercial 3D engine distributed under the DawnEngine end-user license agreement. Engine binaries and source are proprietary and are not covered by the licenses below.

Documentation only: the prose and templates on this site are a derivative work of Open 3D Engine (O3DE) documentation by the O3DE Contributors, used under CC BY 4.0 (documentation content), Apache 2.0 (site code), and the MIT license (inline code samples).

The open-source 3D engine that DawnEngine is built on top of is Open 3D Engine . DawnEngine is not affiliated with, endorsed by, or sponsored by The Linux Foundation or the O3DE project. “O3DE” and “Open 3D Engine” are trademarks of The Linux Foundation.