Need help understanding HLOD and World Partition for distance-based proxy mesh switching in UE5

Hi everyone,

I’m trying to create a system in Unreal Engine 5 where distant objects are replaced by a single merged proxy mesh with one material, and when the player gets closer, it switches back to the original collection of meshes.

For example:

Far away:
1 merged proxy mesh
1 material

Close up:
10+ individual meshes
original materials

While researching this, I learned about World Partition and HLOD (Hierarchical Level of Detail), but honestly I’m struggling to understand how they actually work.

I watched these videos:

The first video seems to rely heavily on the Hierarchical LOD Outliner, and it generates a lot of clusters automatically. However, what I want is much simpler: I want to choose a specific area manually and have only that area replaced by an HLOD proxy at a certain distance.

The second video seems closer to what I need. From what I understand, the workflow is something like:

  1. Create an HLOD Layer asset.
  2. Assign that HLOD Layer to selected meshes.
  3. Generate HLODs.

But even after watching it multiple times, I still don’t really understand what is happening behind the scenes or what the purpose of the HLOD Layer actually is.

My main questions are:

  1. Do I actually need World Partition for this kind of setup?
  2. If my world is not very large, is World Partition even necessary?
  3. Can I create an HLOD system only for specific groups of meshes instead of the entire level?
  4. What is the correct workflow if my goal is simply:
    *
    show the original meshes when close,
    *
    show a merged proxy mesh when far away?
  5. Is HLOD the correct solution, or should I be using a different system entirely?

I’m worried that I may be misunderstanding how HLOD is intended to work and heading in the wrong direction.

Could someone explain the proper workflow and reasoning behind it in a beginner-friendly way?

Thanks!

I am working on a project with a relatively small/medium world size, but I want to optimize the distant views. Since I encountered errors when trying to convert my level to World Partition, I am trying to avoid using World Partition and automated HLOD layers.

Instead, I am thinking of a manual approach and wanted to ask if this is a good, efficient way to do it, or if there is a faster/better alternative:

  1. Detailed Assets in a Sublevel: I place 10 detailed houses and 10 detailed trees in the world, and group these 20 actors into a specific Sublevel.
  2. Far-view Merged Mesh: I use the “Merge Actors” tool to simplify those 10 houses and 10 trees into a single Static Mesh with 1 Material.
  3. Blueprint Setup: I put this merged mesh into a Blueprint Actor and place it at the exact same location as the original assets.
  4. Distance Switching Logic: When the player enters a certain range (using a trigger volume or distance check), the Blueprint hides the merged mesh, and loads/shows the detailed Sublevel. When the player leaves the area, the Sublevel unloads, and the merged mesh becomes visible again.

To me, this feels like the quickest and most straightforward way to achieve a custom HLOD-like system without relying on World Partition.

Does this sound like a solid approach for a smaller map? Are there any hidden pitfalls or performance issues with this method?

I’ve been finding World Partition quite difficult to use, and online discussions suggest it’s plagued with errors. I recently tried to convert my main level to World Partition using the built-in tool, but the conversion failed completely with the following crash log:

LogWorldPartitionEditor: Error: #### COMMANDLET OUTPUT >> [2026.06.23-16.53.04:706][ 0]LogWindows: Error: appError called: Assertion failed: bIsRoutingPostCompilation == false [File:D:\build++UE5\Sync\Engine\Source\Runtime\Engine\Private\TextureCompiler.cpp] [Line: 259]

LogWorldPartitionEditor: Error: #### COMMANDLET OUTPUT >> Registering a texture to the compile manager from inside a texture postcompilation is not supported and usually indicate that the previous async operation wasn’t completed…

LogWorldPartitionEditor: Error: #### COMMANDLET OUTPUT >> [Callstack] 0x00007fffce1b2620 UnrealEditor-Landscape.dll!UnknownFunction

It looks like a crash related to the Landscape and Texture Compiler during the async compilation phase inside the commandlet.

This made me wonder: Given these types of frustrating conversion errors, are developers actually avoiding World Partition in real-world production?

For those who don’t necessarily need a massive AAA-scale open world, how is everyone handling level streaming and distance optimization nowadays? Are most of you sticking with the traditional, manual Level Streaming system (Sublevels) to bypass these headaches?

I’m currently leaning towards manually merging my far-view assets into a single mesh and swapping it with a detailed sublevel via Blueprint/Streaming Volumes. I’d love to hear the community’s consensus on whether this manual approach is still a common standard.