World Partition and World Manifest

Setting up a World Partition map, building and validating the World Manifest, Pending Restore, and how effective identity keeps streamed content correct.

A streamed world breaks the simple assumption that “the Actor is either here or it was destroyed”. An Actor can be absent because its cell unloaded, absent because it never loaded this session, or absent because it was genuinely destroyed — and each case needs a different answer.

Setting up a World Partition map

  1. Add a WSRF State Component to the Actors that take part in resets.
  2. Pick a Behavior Preset and a Region.
  3. Open Tools → World State Reset Framework → World State Inspector.
  4. Click Build World Manifest.
  5. Save the manifest asset and the map changes when Unreal prompts you.

The Inspector then reports Manifest Valid. That is the whole normal workflow — no container IDs, no ActorDesc metadata, no GUIDs to copy.

When to rebuild

Rebuild after changing managed Actors, Stable IDs, regions, policies, Actor classes, Data Layers or container structure. Ordinary gameplay changes and level dressing do not require a rebuild.

What the World Manifest is

UWSRFWorldManifest is a cookable data asset generated explicitly by the editor tooling. It is referenced from World Settings through a lightweight runtime component (UWSRFWorldManifestComponent) so cooking retains it.

It holds one FWSRFWorldManifestEntry per managed placed Actor:

FieldPurpose
EffectiveActorIdStable ID plus container context
ContainerIdentitySource level package, runtime package, container label, Data Layers
ActorClassSoft class reference, for respawn
SourceActorPathWhere the authored Actor lives
RegionsAuthored region membership
PolicyAuthored reset policy
Origin, ResetPriorityAuthored ordering and origin
ConfigurationHashDetects that authored configuration changed
bRespawnableWhether the class can be recreated

Asset-level fields record the schema version, the source world, a build GUID and the build timestamp.

The manifest is why a reset can be correct for an Actor that has never loaded during this session: the subsystem seeds records from it and knows the Actor exists, which region owns it and what its policy says, before the Actor itself has ever been created.

Resetting unloaded content

Call Reset World Region normally. WSRF does not force cells or inactive Runtime Data Layers to load. Instead:

  1. matching records whose Actor is not loaded are marked Pending Restore;
  2. the report counts them in PendingRestore;
  3. when the Actor registers again — its cell streams in, its Data Layer activates — the pending reset is applied at that moment.

A precise claim

Forcing every matching cell to load would make a region reset arbitrarily expensive and would defeat streaming. Pending Restore is the deliberate alternative: correct state, applied when the content is actually there.

Effective identity

A Stable ID alone is not unique in a streamed world: duplicate a Level Instance and both copies carry the same authored local IDs.

WSRF therefore uses effective identity = local Stable ID + container context (FWSRFEffectiveActorId). The container context is an invalid GUID for the main world, and a deterministic GUID derived from the source and runtime level packages for streamed containers.

One resolver produces that identity for registration, respawn and manifest generation, so the three never disagree.

StreamedOut versus Destroyed

PresenceCauseReset behaviour
DestroyedGenuine Destroy() during playRespawned exactly once by a matching reset
StreamedOutLevel, cell or Data Layer unloadedNever respawned; marked Pending Restore

Getting this wrong in either direction produces the two classic streaming bugs — a duplicated Actor, or an Actor that never comes back. WSRF classifies on EndPlay reason rather than guessing from absence.

Fail-safe respawn

If the exact source level or container cannot be proven at respawn time, WSRF fails the record explicitly and reports it. It never falls back to spawning into the Persistent Level, because an Actor in the wrong container looks correct until the next unload.

Data Layers, sublevels and Level Instances

Covered in detail in Level Instances, Data Layers and sublevels. In short: the container identity carries the Data Layer names, repeated Level Instances stay independent, and independently streamed sublevels behave like any other container.

Advanced: internals

The following exist for diagnostics and unusual integrations. Normal Blueprint workflows never touch them.

  • FWSRFContainerIdentity — ContextGuid, SourceLevelPackage, RuntimeLevelPackage, ContainerLabel, DataLayers.
  • WSRFManifest::MakeStreamingContainerGuid — deterministic container GUID from the source and runtime package names.
  • WSRFManifest::ResolveContainerIdentity / ResolveEffectiveActorId — the shared resolver.
  • WSRFManifest::ComputeConfigurationHash — the hash behind manifest drift detection.
  • ResetWorldRegionInContext — restricts a reset to the container owning a context Actor.
  • FindLoadedActorInContext, FindLoadedActorByEffectiveId — container-aware lookups.
  • GetManifestMemoryBytes — manifest memory, for profiling.

The Runtime module never calls ActorDesc, WorldPartitionEditor, UnrealEd or Slate APIs; manifest generation is entirely editor-side.

Troubleshooting

SymptomMeaningAction
Manifest Requires RebuildAuthored configuration changed since the buildClick Build World Manifest and save
Pending RestoreThe Actor is not loaded right nowExpected; it applies when the container returns
RestoreFailedThe source level or container could not be provenCheck that the Actor’s source level still exists
Duplicate effective identityTwo records resolve to the same identityRepair duplicate local IDs, then rebuild

Last updated: 2026-08-26

Type to search titles, sections and keywords.