World Streaming runtime streaming

Runtime streaming resolves a desired cell set from streaming sources each tick, then loads, activates, and unloads within concurrency and memory budgets.

Load and unload a world

Automatic path: set /WorldStreaming/DefaultManifest to a .wsmanifest path; the system component calls LoadWorld on activate.

Manual path:

auto* wp = WorldStreaming::WorldStreamingInterface::Get();
wp->LoadWorld(manifestAssetId);
wp->IsWorldLoaded();
wp->UnloadWorld();

Master switch /WorldStreaming/Enabled must be true. When false, engine behavior matches a project without streaming.

Content Bundles

Mount an extra .wsmanifest at runtime (DLC):

wp->MountContentBundle(bundleManifestAssetId);
wp->IsContentBundleMounted(bundleManifestAssetId);
wp->UnmountContentBundle(bundleManifestAssetId);

Constraints (v1):

  • Same cellIdSalt and grids as the root world; no cell overlap; layers must match by id or introduce new ids.
  • Not supported on a chunked root world.
  • Mount state is not part of the multiplayer handshake; ServerDriven clients should mount the same bundles as the server.

Three forms of streaming source

FormModelTypical use
WorldStreamingStreamingSourceComponentPushPlayer, camera
RegisterStreamingSource / script handlePush; cleared on world unloadPortal preheat, scripted zones
WorldStreamingStreamingSourceProviderRequestBusPull (AppendStreamingSources)Cinematic cameras, AI / server interest

Streaming Source component fields

Attach to player / camera; registers on activate and follows Transform (prefers HighPrecisionTransformBus double translation).

FieldDefaultDescription
m_loadRadius / m_activateRadius256 / 128 mLoaded / Activated rings; ≤0 falls back to grid defaults
m_targetGridLevel0xFF (all grids)Single target grid
m_targetGridLevelMask0Multi-grid bitmask; non-zero overrides the field above
m_targetHlodLayerId / m_targetHlodLayerMask0xFFFF / 0Target only specific HLOD proxy layers (non-zero mask excludes content cells)
m_priorityDefaultSourcePriority: Low / Default / High / Critical
m_enabledtrue
m_shapesemptyNon-spherical coverage; when non-empty, radii are ignored
m_orientShapesToSourcefalseShapes rotate with the entity
m_targetBehaviorIncludeExclude carves this coverage out of the desired set
m_loadingRangeScale1.0Multiplied with global StreamingRangeScale
m_predictVelocityfalseEMA velocity prefetch; predicted sources rise only to Loaded, never Activate
m_debugName / m_debugColorempty / 0Labels in ws_dumpStats / overlay tint (0xRRGGBBAA)

Coverage shapes

When m_shapes is non-empty: Sphere (default), Box, Capsule, Cone (extents.X horizontal half-angle radians, Y vertical half-angle, Z range), Polyline (m_pathPointsD, radius extents.X).

Resolve semantics

  • Absolute world distance (double-precision friendly). Render-origin switches do not change desired cell state.
  • Multiple Include sources merge; Exclude sources carve holes. Hard-reference bundles / DependentLoad may still pull cells to Loaded after an Exclude.
  • Hysteresis defaults: UnloadHysteresisMeters 32, ActivateHysteresisMeters 16, UnloadCooldownSeconds 3.0.
  • Global StreamingRangeScale scales radius-based sources; it does not scale explicit shapes or hysteresis.

Budgets and throttling

Setting (Runtime/)DefaultRole
MaxConcurrentLoads / MaxConcurrentUnloads4 / 4Per-frame spawn / despawn caps
MaxConcurrentActivations / MaxConcurrentDeactivations0 (unlimited)
MaxConcurrentStreamingCells0 (unlimited)
StreamingResolveEveryNFrames1
MemoryBudgetBytes / PerGridMemoryBudgetBytes0 / empty0 = unlimited
EnableHlodDowngradeUnderBudgetfalsePrefer HLOD under memory pressure
StreamingRangeScale1.0Quality-tier global scale
GridLoadingRangeOverridesemptyPer-grid radius overrides
MergeProximateSourcesDistance0 (off)Merge nearby sources
StreamingPredictionSeconds / MaxStreamingPredictionDistance0 / 0Global prediction (pairs with m_predictVelocity)

Server residency modes (Runtime/ServerStreamingMode): StreamInOut (default) / StreamInOnly / FullyResident. See Multiplayer.

Progress, blocking, and pause

CapabilityAPI / command
Flush after teleportBlockUntilStreamingComplete(maxSeconds) / ws_flushStreaming
Loading screenGetStreamingProgressFraction / IsStreamingComplete
Area readiness (read-only)IsLocationStreamingCompleted(posD, radius, queryState, exactState)
Pause (cinematics / photo mode)SetStreamingEnabled(false) / ws_setStreamingEnabled 0

BlockOnSlowStreaming (default off) can auto-block when lag exceeds thresholds; AutoBlockCooldownSeconds default 5.0. World reload resets streaming enabled to on. ws_dumpStats reports streaming=PAUSED when frozen.

Notifications (C++)

WorldStreamingNotificationBus includes: OnCellStateChanged, OnCellStateTransitionDetail, OnWorldLoaded / OnWorldUnloaded, OnLayerRuntimeStateChanged, OnCellLoadFailed, OnContentLayerLoaded, OnStreamingPerformanceChanged, OnContentBundleMounted / OnContentBundleUnmounted, OnHlodFragmentVisibilityChanged.

Script-facing notifications: Scripting.

Next steps


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.