World Streaming HLOD
HLOD provides distant proxy cells so the world stays readable when content cells are Unloaded. Proxies hide when child content activates and reappear before content unloads.
Declare an HLOD layer
Add WorldStreamingHlodLayerDesc entries on WorldConfig (m_hlodLayers).
| Field | Default | Description |
|---|---|---|
m_hlodLayerId / m_name | — | Identity |
m_sourceGridLevel → m_targetGridLevel | 0 → 1 | Which grid’s content to aggregate, and which coarser grid hosts proxies |
m_loadingRange | 2048 m | Proxy streaming range; resolved independently only when Runtime/EnforceHlodLoadingRange is on |
m_generationPolicyId | 0 (Merge) | Policies 0–4 below |
m_requiresRegionMask | true | false = indivisible whole-block proxy (hides only when all child cells activate) |
m_mergeAcrossContentLayers + m_mergedContentLayerId | off | Merge across layers into one proxy layer id |
m_alwaysLoaded | false | Proxy stays resident; never unloaded by distance |
m_fallbackPolicyId | none (0xFFFFFFFF) | Retry once with fallback when primary produces nothing |
Exclude individual entities from proxy geometry with ExcludeFromHlod on WorldStreamingMemberComponent (doors, destructibles, and so on).
Five generation policies
| Id | Policy | Product | Fit |
|---|---|---|---|
| 0 | Merge | Per-material merged Atom Model | Near / mid distance |
| 1 | Simplify | Weld-decimate reduced mesh | Mid distance |
| 2 | Impostor | CPU atlas + three orthogonal billboards | Cheap far distance |
| 3 | OctahedralImpostor | CPU N×N octahedral atlas + single card | Far, view-correct |
| 4 | GpuOctahedralImpostor | GPU capture albedo+normal(+depth); relightable | Highest quality; missing atlas falls back to 3 |
Runtime knobs: HlodWarmupFrames (default 0), EnforceHlodLoadingRange (default false), EnableHlodDowngradeUnderBudget (default false).
Material switches for octahedral materials (when present): octahedral.tileInset / blendTiles / useParallax / parallaxScale.
Show / hide at runtime
- Distant unloaded content shows proxy cells.
- When child content reaches Activated, matching proxy regions hide (
m_requiresRegionMask) or the whole block waits until all children activate. - On unload, proxies appear before content unloads to avoid holes.
Fragment visibility must reach Atom:
- Set
Bridge/AtomModetoBridge(recommended for rendering projects), or - Handle
OnHlodFragmentVisibilityChangedyourself.
With default AtomMode = Off, decisions still resolve but mesh visibility is not driven automatically. See
Bridges.
Authoring and bake notes
- Declare HLOD layers before bake; rebake after policy or source/target grid changes.
- HLOD bake failure leaves a hole and does not block content streaming; optional
m_fallbackPolicyIdretries once. - Deterministic parallel HLOD:
/Dawn Engine/WorldStreaming/Bake/HlodWorkerThreads(see Baking).
GPU octahedral workflow
- Partition view → Bake GPU Octahedral Impostors (
BakeGpuOctahedralImpostors; optionallyIsGpuCaptureAvailable). - Bake World Streaming (missing atlas → policy 3).
- Optional
CaptureOctahedralImpostorScreenshots(outputDir).
Next steps
- Bridges: Atom mode matrix.
- Content Layers: Loaded-only layers vs proxy visibility.
- Configuration and debugging:
WsDumpAtomBridgeStats, HLOD Runtime keys.