Work with World Partition
A guided example: read a streamed level without loading it, load and pin the regions you need, organise actors with data layers and HLOD layers, set runtime grids, and run the World Partition builders safely.
A guided example: read a streamed level without loading it, load and pin the regions you need, organise actors with data layers and HLOD layers, set runtime grids, and run the World Partition builders safely.
World Partition streams a large level in and out as you move, which means most of the level is not loaded most of the time. That single fact changes how you work with one: an ordinary actor search cannot see what is streamed out, so an actor that is simply unloaded looks deleted. This walkthrough covers reading a partitioned level without loading it, loading the parts you need, organising with data layers and HLOD, and running the builders. Every command is listed in the World Building reference.
list_world_partition_actors before concluding anything is missing.Every actor in a partitioned level has a description that carries its label, class, bounds and data layers whether or not the actor itself is in memory. Reading those is how you see the whole level at once.
Streaming on or off, the runtime grids with their cell size and loading range, how many data layers exist, and how many actors are loaded right now versus how many exist.
cfa get_world_partition_infoThis is the command an ordinary find_actors cannot replace. Filter by name, by class, or by a region of the world.
cfa list_world_partition_actors --filter Rock --max-results 50Editing an actor needs it loaded. Load a region, do the work, then release it. Loading is asynchronous, and naming a region is what lets you release exactly that one later.
A sphere around a point, or a world space box with --region. Name it so you can unload the same region afterwards.
cfa load_world_partition_region --name WorkArea --center "12000,8000,0" --radius 6000Pinning takes a label substring or a class, and requires at least one, because pinning everything would load the entire map.
cfa pin_world_partition_actors --filter PlayerStartGive the name to release one region, or omit it to release every region this tool loaded.
cfa unload_world_partition_region --name WorkAreaA data layer groups actors so they can be shown, hidden, or streamed together. A runtime layer can be streamed in and out during play. An editor layer only organises the editor and is stripped from a cook, so asking for a runtime state on one is refused rather than silently ignored.
Runtime or Editor. Layers can nest, so a parent can carry a whole set of children.
cfa create_data_layer --name Vegetation --layer-type Runtime --asset-path /Game/DataLayers/DL_VegetationMatches on label substring and class. Only loaded actors can be assigned, which is a good reason to load the region first.
cfa assign_actors_to_data_layer --data-layer Vegetation --class-path InstancedFoliageActorType, parent, editor visibility and loaded state per layer, plus how many actors belong to each. Membership is counted from the actor descriptions, so unloaded actors still count.
cfa list_data_layersvalidate_world_partition flags exactly that, along with streaming being off and actors that do not actually stream.HLOD is what you see where the real actors are not loaded. The parent chain between HLOD layers is what produces more than one level of detail, which is the part people miss.
Instancing, MeshMerge, MeshSimplify, MeshApproximate, Custom, and CustomHLODActor on 5.7 and later. An unknown type is refused with the list this engine actually offers.
cfa create_hlod_layer --name HLOD_Far --layer-type MeshMerge --cell-size 25600 --loading-range 76800By label substring or class. Actors with no HLOD property are reported as unchanged rather than silently skipped.
cfa set_actor_hlod_layer --hlod-layer /Game/HLOD/HLOD_Far --class-path StaticMeshActorCell size and loading range decide how much streams at once. Refused with an explanation if the world uses a hash that has no named grids.
cfa set_runtime_grid --name Foliage --cell-size 12800 --loading-range 25600Seven builders, eight on 5.7 and later: HLOD, minimap, navigation, foliage, spline meshes, static lighting, runtime virtual texture, and landscape. They run for minutes to hours and block the editor.
Without confirm, this only reports what the builder does and roughly how long it takes. That is deliberate: these are not commands to start by accident.
cfa build_world_partition --builder minimapThe minimap builder is the cheapest of them and still measured around 100 seconds on a nearly empty map. Budget accordingly.
cfa build_world_partition --builder minimap --confirmStreaming enabled, actors that genuinely stream, and runtime data layers not left unloaded. Returns a verdict rather than a boolean.
cfa validate_world_partitionRight for a small always relevant actor like a water zone, wrong for anything numerous.
cfa set_actor_spatially_loaded --actor-label WaterZone_Main --spatially-loaded falseOr move them back to the default grid with an empty name.
cfa set_actor_runtime_grid --grid-name Foliage --class-path InstancedFoliageActor