World Streaming Content Layers

Content Layers are logical groups across cells. Use them to switch content sets in the same space by quest phase, time of day, or network role—without duplicating the whole world.

Declare a layer

Add WorldStreamingLayerDesc entries on WorldConfig (m_layers). Assign entities with WorldStreamingMemberComponent m_layerId (default 0).

FieldDefaultDescription
m_layerId0Stable id
m_nameScript-addressable name
m_flagsRuntime + EnabledByDefaultSee flags below
m_parentLayerId0xFFFF (NoParentLayerId)Parent for hierarchy clamp
m_streamingPriority0Ordering bias under budget
m_debugColor0 (auto palette)0xRRGGBBAA; non-zero colors fold into contentHash

ContentLayerFlags

FlagMeaning
RuntimeEnters Manifest; controllable at runtime
EditorOnlyEditor / bake diagnostics only
EnabledByDefaultEnabled when the world loads
LoadedOnlyByDefaultDefault baseline is Loaded (not Activated)
ClientOnly / ServerOnlyNetwork-role filters (mutually exclusive)

Default baseline when a layer is enabled: Activated. With LoadedOnlyByDefault: Loaded. When disabled / not enabled: Unloaded.

Runtime tri-state

LayerRuntimeState: Unloaded (drop the layer’s cells) / Loaded (resident, not simulating) / Activated (fully streamed).

auto* wp = WorldStreaming::WorldStreamingInterface::Get();
wp->SetLayerRuntimeState(layerId, WorldStreaming::LayerRuntimeState::Loaded);
wp->GetEffectiveLayerRuntimeState(layerId);
wp->SetLayerEnabled(layerId, true); // true → Activated, false → Unloaded

Script façade: SetContentLayerState / GetEffectiveContentLayerState / SetContentLayerEnabled / FindContentLayerId / SetContentLayerStateByName / progress helpers. Constants: LayerRuntimeState_Unloaded (0) / _Loaded (1) / _Activated (2). See Scripting.

Layer hierarchy

A child layer’s effective state is the min of itself and its ancestor chain (Unloaded < Loaded < Activated). Query effective state—not only the requested state—when debugging why cells stay Loaded or Unloaded.

Network-role filters

FlagDedicated serverClientListen / offline
ClientOnlyDoes not loadLoadsBoth sides keep
ServerOnlyLoadsDoes not loadBoth sides keep

Combine with Multiplayer ServerDriven activation for authoritative gameplay layers.

Interaction with HLOD

  • Loaded-only layers: full content stays invisible, but HLOD proxies are exempt from the lower clamp and can remain visible.
  • Unloaded layers: proxies are dropped with the content.

Coloring priority in editor overlays: streaming preview > memory heatmap > layer color > density. Details: HLOD, Authoring.

Editor panel

The partition view exposes Content Layer toggles for authoring and diagnostics. Runtime control remains API / script driven for shipped builds.

Next steps

  • HLOD: distant proxies that interact with layer state.
  • Multiplayer: ClientOnly / ServerOnly under authority modes.
  • Scripting: by-name layer control and OnContentLayerLoaded.

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.