World Streaming baking

Baking turns authored Prefabs and WorldConfig into per-cell Spawnables and a runtime Manifest. Trigger bake from the partition view or from editor automation.

Product chain

Shard Prefabs + WorldConfig
PrefabProcessor → cell Spawnables + fragments
.wsworld (single aggregation key)
Manifest Aggregator Builder
 ├── .wsmanifest
 ├── optional .wschunk
 └── HLOD assets

Before bake, the editor validates with ValidateWorldDescriptor / ValidateManifest.

Trigger bake

ActionScope
Bake World / BakeWorld()Save all dirty shards + root → validate → Asset Processor rebuild; returns BakeReport (m_ok, m_shardsSaved, m_cellCount, m_warnings)
Bake Region / BakeRegion(minD, maxD)Save only dirty shards overlapping the box; aggregator still runs for the whole world (incremental convergence)
Bake Grid Level / BakeGridLevel(level)Save only the specified grid (0xFF = all)

Always Save Dirty Cell Shards (or let Bake World do it) before expecting fresh products. Panel entry: Tools → World Streaming → Bake World Streaming.

Manifest highlights

The .wsmanifest describes cell layout, dependencies, HLOD layers, and contentHash (used by multiplayer handshake). Memory estimates use a lightweight per-entity floor of 4096 bytes unless real asset sizes are enabled.

Manifest chunking

In .wsworld, when m_chunkSize > 0 and cell count exceeds m_chunkCellThreshold, bake emits a root Manifest plus .wschunk files for lazy metadata. Pair with runtime ChunkEvictionCooldownSeconds. Default m_chunkSize = 0 means no chunking.

Server shard index

.wsworld m_shardSize > 0 writes a server ownership index for multi-authority dedicated servers. Default 0 = single authority. This is unrelated to editor collaboration shards. Runtime ownership: Multiplayer.

Bake Settings Registry keys

Under /Dawn Engine/WorldStreaming/Bake/:

KeyDefaultDescription
HlodWorkerThreads≤1 (serial)Deterministic parallel HLOD workers; products match serial byte-for-byte
AssignCellGenerationsfalseAssign m_generation from content digests
MergeMultiSourceCellsfalseMerge multi-source cells; default off = duplicate CellId fails

With these off, products and contentHash stay byte-identical to an unconfigured bake. Turning keys on changes the hash.

Baker opt-in switches

SwitchDefaultEffect
m_autoGridLevelFromBoundsoffChoose grid from world AABB
m_clusterTransformHierarchyoffTransform subtree follows root cell
m_resolveRealAssetSizesoffMemory estimates use real product bytes (hash becomes platform-sensitive)
m_patchCrossCellHardRefsoffRecord DependentLoad hard-ref repair table
m_auditTwoTierActivationoffTwo-tier activation audit (report-only)

Determinism and Golden Manifest

Bake is intended to be deterministic for CI. The Golden Manifest fixture lives at Gems/WorldStreaming/Code/Tests/Assets/GoldenManifest.wsmanifest. Format changes require regenerating it with WS_UPDATE_GOLDEN_MANIFEST=1.

GPU octahedral pre-bake

For HLOD policy GpuOctahedralImpostor (id 4):

  1. In the partition view, run Bake GPU Octahedral Impostors (or BakeGpuOctahedralImpostors; optionally check IsGpuCaptureAvailable first).
  2. Then run Bake World Streaming (missing atlas falls back to policy 3).
  3. Optionally CaptureOctahedralImpostorScreenshots(outputDir) for inspection.

Details: HLOD.

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.