World Streaming scripting and public API

The script surface deliberately uses only scalars and world positions (no opaque CellId). It is available from Script Canvas, Lua, and editor Python (azlmbr.worldstreaming). Full signatures live in WorldStreaming/WorldStreamingBus.h.

WorldStreamingRequestBus (runtime, single handler)

World and queries

EventNotes
IsWorldLoaded() / GetManifestVersion()
GetCellStateAtPosition(posD, gridLevel, layerId)Returns CellRuntimeState_*
IsServerAuthorityEnforced() / GetServerAuthorizedCellCount()Multiplayer
GetCellShardAtPosition(.) / IsCellOwnedByThisServerAtPosition(.)Server shards

Transient streaming sources

EventNotes
RegisterStreamingSource(posD, forwardD, loadRadius, activateRadius, targetGridLevel, priority)Returns non-zero handle
UpdateStreamingSourcePosition(handle, posD)
SetStreamingSourceEnabled(handle, enabled)
SetStreamingSourceGridMask / SetStreamingSourceHlodLayerMask
SetStreamingSourceTargetBehaviorTargetBehavior_Include / Exclude
SetStreamingSourceLoadingRangeScale
UnregisterStreamingSource / IsStreamingSourceCompleted

Progress and blocking

EventNotes
BlockUntilStreamingComplete(maxSeconds)Flush after teleport
SetStreamingEnabled / IsStreamingEnabledPause / resume
GetStreamingProgressFraction / GetDesiredCellCount / GetCellsAtTargetCount / IsStreamingCompleteLoading screens
GetContentLayerStreamingProgressFraction / .ByNamePer-layer progress
GetStreamingPerformanceStateOk 0 / Slow 1 / Critical 2
IsLocationStreamingCompleted(posD, radius, queryState, exactState)radius ≤ 0 falls back to grid default load radius

Content Layers, ranges, bundles

GroupEvents
LayersSetContentLayerState / GetContentLayerState / GetEffectiveContentLayerState / SetContentLayerEnabled / IsContentLayerEnabled / FindContentLayerId / *ByName (unknown name → 0xFFFF)
Range overridesSetGridLoadingRangeOverride / ClearGridLoadingRangeOverrides
BundlesMountContentBundle / UnmountContentBundle / IsContentBundleMounted / GetMountedContentBundleCount

Behavior constants

FamilyValues
CellRuntimeState_*Unloaded 0 / Loaded 2 / Activated 4 (in-between = transitions)
LayerRuntimeState_*Unloaded 0 / Loaded 1 / Activated 2
SourcePriority_*Low 0 / Default 1 / High 2 / Critical 3
TargetBehavior_*Include 0 / Exclude 1
StreamingPerformance_*Ok 0 / Slow 1 / Critical 2

Lua example — teleport flush

-- destinationD is the teleport target's double-precision world position (Vector3d)
WorldStreamingRequestBus.Broadcast.BlockUntilStreamingComplete(5.0)
if WorldStreamingRequestBus.Broadcast.IsLocationStreamingCompleted(destinationD, 128.0, CellRuntimeState_Activated, false) then
 -- 128 m around the destination is Activated; dismiss the loading screen
end

WorldStreamingScriptNotificationBus (multiple handlers)

  • OnWorldLoaded(manifestVersion) / OnWorldUnloaded()
  • OnContentLayerStateChanged(layerId, state) / OnContentLayerEnabledChanged(layerId, enabled)
  • OnContentLayerLoaded(layerId) — all desired cells of a layer reached target
  • OnCellLoadFailedAt(cellCenterD, gridLevel, layerId)
  • OnStreamingPerformanceChanged(old, new)
  • OnContentBundleMounted(bundleId) / OnContentBundleUnmounted(bundleId)

EditorWorldStreamingRequestBus (editor / Python)

GroupEvents
World authoringAuthorWorldBegin(salt)AuthorWorldAddGrid / AuthorWorldAddHlodLayer / AuthorWorldSetShardSizeAuthorWorldCommit
BakeBakeWorld / BakeRegion / BakeGridLevelBakeReport (m_ok, m_shardsSaved, m_cellCount, m_warnings); SaveDirtyShards
Editor loadingSetFocusLoadingEnabled; Loaded Regions: AddLoadedRegionAroundCamera / RemoveLoadedRegion / SetLoadedRegionEnabled
ShardsFocusEditCellShard / ClearEditCellShardFocus / GetRegisteredShardCount / GetShardPathAtPosition; SetAutoCreateShardsOnFirstContent
HLOD GPUIsGpuCaptureAvailable / BakeGpuOctahedralImpostors / CaptureOctahedralImpostorScreenshots
StatusRefreshFromLevel / HasWorld / GetCameraCell / GetCameraPositionD

Python example — author a world

import azlmbr.worldstreaming as wp
bus = azlmbr.bus

wp.EditorWorldStreamingRequestBus(bus.Broadcast, 'AuthorWorldBegin', 1234)
wp.EditorWorldStreamingRequestBus(bus.Broadcast, 'AuthorWorldAddGrid', 0, 128.0, 256.0, 128.0)
wp.EditorWorldStreamingRequestBus(bus.Broadcast, 'AuthorWorldAddHlodLayer', 0, 0, 1, 4, 2048.0)
wp.EditorWorldStreamingRequestBus(bus.Broadcast, 'AuthorWorldSetShardSize', 0.0)
wp.EditorWorldStreamingRequestBus(bus.Broadcast, 'AuthorWorldCommit')

C++ integration points

  • WorldStreaming::WorldStreamingInterface::Get() (AZ::Interface<IWorldStreamingSystem>, WorldStreaming/IWorldStreamingSystem.h): full surface beyond script buses—world lifecycle (LoadWorld / UnloadWorld / GetManifestHandshake), Content Bundle mounting, streaming-source registration (entity / script handle / IsAreaStreamingCompleted), progress (GetStreamingProgress), Content Layer tri-state, cell queries (GetCellState / GetCellAtPosition / EnumerateCellsInRange / GetCellBoundsD), runtime settings, multiplayer (client interest, SetServerAuthorityEnforced, ApplyServerCellTargetStates, shard ownership), and GetDebugStats.
  • WorldStreamingNotificationBus: C++ notifications including OnCellStateChanged, OnCellStateTransitionDetail, OnHlodFragmentVisibilityChanged, plus layer / world / bundle / performance events.
  • WorldStreamingStreamingSourceProviderRequestBus: pull-model provider—implement AppendStreamingSources; polled once per resolve pass; zero overhead when nothing connects.

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.