World Streaming authoring

This chapter covers editor-side authoring: world definition, entity membership, the partition view, collaboration shards, and migrating existing levels.

World definition: WorldConfig + .wsworld

A partitioned world has two parts:

  1. WorldConfig entity on the level root with WorldStreamingConfigComponent.
  2. Sibling .wsworld descriptor listing bake aggregation sources and optional chunk / server-shard knobs.

WorldStreamingConfigComponent is bake-time data: the processor reads it and strips it, so it never reaches the runtime Root Spawnable and has no component-panel editing. It is normally written by the WorldStreaming_Level template, the Migration Tool, or EditorWorldStreamingRequestBus AuthorWorld* events.

FieldDescription
WorldGuid / m_worldGuidWorld identity for multiplayer handshake and bake-aggregation validation
CellIdSalt / m_cellIdSaltCellId hash salt; regenerate when grid layout (cell size / origin) changes
Grids / m_gridsGrid level list
Layers / m_layersContent Layer descriptors
HlodLayers / m_hlodLayersHLOD layer descriptors

Grid levels (WorldStreamingGridDesc)

FieldDefaultDescription
m_gridLevel0Level number; with multiple grids, lower = finer
m_cellSize128 mCell edge length
m_defaultLoadRadius / m_defaultActivateRadius256 / 128 mFallbacks when a streaming source gives no explicit radii
m_verticalPartitioning + m_cellSizeZoffVertical (Z) partitioned grid
m_singleTierActivationoffActivate on spawn, skipping the Loaded warmup tier
m_use2DDistanceoffVertically partitioned grid streams by XY-plane distance
m_streamingPriority0Priority bias under budget pressure (ordering only)
m_gridOriginD(0,0,0)Grid origin offset; changing it re-partitions the world

Grid change severity

Changing grids raises interactive warnings:

SeverityMeaning
None / TuningOnlySafe tuning (radii, priority)
AdditiveAdditive layout change
FullRepartitionFull re-partition—confirm in the modal, regenerate m_cellIdSalt, and rebake everything

Entity membership rules

Assignment priority:

  1. Member with IsSpatiallyLoaded = false → AlwaysLoaded cell.
  2. Explicit m_runtimeGridLevel (not inherit).
  3. Otherwise pivot position on the default (finest) grid.
  4. Opt-in m_autoGridLevelFromBounds: pick the finest grid that can contain the world AABB.

Ordinary entities need no Member component. Cross-cell hard references are diagnosed by default; enable m_patchCrossCellHardRefs plus DependentLoad to record alias repair entries.

WorldStreamingMemberComponent

FieldDefaultDescription
IsSpatiallyLoaded / m_isSpatiallyLoadedtruefalse = AlwaysLoaded (still gated by Content Layers)
RuntimeGridLevel / m_runtimeGridLevel0xFF (inherit)Explicit target grid
LayerId / m_layerId0Owning Content Layer
BundleGroupId / m_bundleGroupId0Strong-reference co-load group
DependentLoadTargetsemptyTarget entities’ cells must be at least Loaded before this cell activates
ExcludeFromHlod / m_excludeFromHlodfalseStatic meshes never enter HLOD proxy geometry
SoftReferenceTargetsemptySoft cross-cell refs; does not pull the target cell

Transform hierarchy clustering (opt-in)

m_clusterTransformHierarchy (default off) keeps Transform parent/child trees in the same cell as the root. Enabling it changes cross-cell layout—rebake after changing.

Partition view (Tools > World Streaming)

Typical panel capabilities:

AreaActions
OverviewWorld status, grid / layer summary
Focus loadingLoad a radius around the camera for editing without activating the whole world
Loaded RegionsPersistent editor regions of interest; never enter the runtime Manifest
Content LayersToggle / inspect layer authoring state
BakeBake World Streaming, Bake Region, Bake GPU Octahedral Impostors
ShardsSave Dirty Cell Shards, AutoShard, Focus Edit Cell Shard
MigrationMigration Tool. for existing levels

Unloaded-cell proxies in the viewport are session-only and never saved or baked.

Collaboration shards (editor)

Editor shards split cell content into independent Prefabs for multi-user editing. This is not the same as server shards.

GranularityControlNotes
Primary shard (default)One shard Prefab per cell
AutoShard“Auto-create shards on first content”Creates a shard when content first lands in an empty cell
Sub-shards“Max entities per sub-shard” (0 = off)Split into _sN by entity-count cap
Per-actor sidecars“Per-actor sidecars” (requires AutoShard)_a<key> one file per entity
Orphan sidecar cleanup“Delete pruned sidecar files” (default off)Default only unregisters; on = source-control-aware delete

Sub-shards / sidecars conflict with independent multi-source cells unless both migration m_allowMultiSourceCells and bake key MergeMultiSourceCells are on.

Use Save Dirty Cell Shards before bake or handoff. Scripted focus: FocusEditCellShard / ClearEditCellShardFocus on EditorWorldStreamingRequestBus.

Migration Tool

For levels that predate World Streaming:

  1. Open Tools → World Streaming → Migration Tool..
  2. Choose grids / layers / salt options the dialog exposes.
  3. Commit; the tool writes WorldConfig + .wsworld and rewrites Prefabs as needed.

Alternatively automate with AuthorWorldBeginAuthorWorldAddGrid / AuthorWorldAddHlodLayer / AuthorWorldSetShardSizeAuthorWorldCommit (see 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.