Migrating World Partition level with HLODs across projects

I’m trying to migrate the Small_City_LVL from City Sample into a different project. All I need is the environment (buildings, roads, props), I don’t need anything like the crowds or vehicles, so I first deleted all those actors.

Then when I migrate via right clicking in Content Drawer > Asset Actions > Migrate I’m able to get the level into a different project, but it tells me HLODs need to be rebuilt. I did that from the Build menu, but that broke things where instead of the two HLODs which are present in the original project, it only has 1 HLOD. I noticed that I also needed to migrate some C++ code from City Sample, the UCitySampleHLODBuilderMeshApproximate class which is referenced in CitySample_HLOD1_HighQuality as the “HLOD Builder Class”. But even after migrating that C++ class and setting the “HLOD Builder Class” and rebuilding HLODs, I don’t get the same HLOD setup as in the original City Sample. This leads to buildings incorrectly appearing and disappearing at certain distances.

I did notice when I load the level in the second project I get the following warnings, I’m not sure if it’s related or how to resolve these:

LogAssetData: Warning: Failed to convert deprecated short class name "SliceAndDiceManager" to path name. Using "/Unknown.SliceAndDiceManager"
LogWorldPartition: Warning: Invalid class for actor guid `0C0D15E145C2623C5E6FEEB28139F101` ('SliceAndDiceManager_UAID_D45D64562538C9E900_1940796248') from package '/Game/__ExternalActors__/Map/Small_City_LVL/1V/9F/AY9BI4XKSB0XO5M8SF91C'
LogAssetData: Warning: Failed to convert deprecated short class name "MassTrafficZoneGraphDataModifier" to path name. Using "/Unknown.MassTrafficZoneGraphDataModifier"
LogWorldPartition: Warning: Invalid class for actor guid `2305619646A4D7A93C27D997B6CEBBD5` ('MassTrafficZoneGraphDataModifier_UAID_5C879C879000ECEA00_1226936465') from package '/Game/__ExternalActors__/Map/Small_City_LVL/1X/V8/WNGN0M1CYDJ2XOPUQXSZJ'
LogAssetData: Warning: Failed to convert deprecated short class name "SliceAndDiceManager" to path name. Using "/Unknown.SliceAndDiceManager"
LogWorldPartition: Warning: Invalid class for actor guid `D9B97C6F42FC8EEFE011769D17CD7DD4` ('SliceAndDiceManager_UAID_D45D64562538C9E900_1940785247') from package '/Game/__ExternalActors__/Map/Small_City_LVL/ED/1V/07CV4Q5M6UVMTJ2MCG6MQ'

The way I’m verifying the number of HLODs at runtime is using the console command wp.Runtime.ToggleDrawRuntimeHash2D.

Any ideas how to correctly migrate a World Partition level with HLODs between projects?

1 Like

I figured it out! The clue was here in the HLOD documentation:

HLOD Actors will not be recreated or built if no changes have been made to their source Actors. Making changes to the Actors themselves or their meshes, materials, or textures will result in the HLOD being rebuilt if you re-execute the commandlet.

So it seems what was happening is that because UE didn’t think these actors had any changes it wasn’t generating HLODs with them.

To resolve, I had to re-save all actors:

  1. Load all World Partition cells
  2. Select all actors in outliner (Ctrl+A)
  3. Right click on an actor
  4. Save Selected Actors
  5. Build > Build HLODs

Note the building of HLODs in City Sample is slow, it took 30 minutes in Small_City_LVL.

1 Like

Hello how you transfer c++ Class? I tried but error