We are finding that building HLODs in our project is taking a very long time, reaching upwards of 12 hours on very powerful machines, for levels that are not overly complex, and with only a single layer. While we understand that HLOD builds can take quite a while, this still seems overly long, and we were looking for ways to reduce this time where possible.
In a similar vein, we were hoping to hear about some worked examples of HLOD in practice. While we understand the fundamentals, our layering strategy is quite unsure at this stage; we were looking to implement both near- and far- layers for solid objects and foliage, giving us 4 layers in total. Is this overkill? Does this miss an edge case?
Hefty iteration times are having an impact on our testing, so any input on either reducing them, or tips for setup that will help reduce the number of iterations needed, are greatly appreciated.
HLODs can be very costly depending on the type of world you are building. As a baseline, our City Sample HLODs, took around 6 hours to build from scratch, from 10 machines
Running the build locally on a Threadripper 3990x with 64 cores and 256GB of ram was taking around 30 hours.
Can you share details on the type of HLOD layers you are using ? There are options to control the quality and this often directly affect the build times. By default, quality is semi-automatic, and based on the minimum drawing distance of your HLOD, which would be the point at witch the original actors are unloaded and replaced by your HLOD.
What is the number / size of your world partition cells ? Are you using a lot of data layers ?
A good first step is to rely on instanced HLODs whenever that make sense. Those are very cheap to build. On Fortnite, we use them for trees which would otherwise look pretty bad when simplified.
Having multiple layers is a good strategy. As you probably found out, foliage doesn’t tend to simplify very well.
Make sure to exclude as much actors/components as possible from your HLODs.
In 5.7 it’s possible to select a region on the World Partition minimap, and build HLOD for it. This helps with iteration time when trying to figure out settings.
You can also select a single HLOD actor and use the “Build HLOD” button in it’s detailed properties.
Thank you for your detailed response, I appreciate it!
In terms of layers, we have stuck with merged meshes quite a lot, as we didn’t think instancing would yield near as good results - I will definitely be rectifying that.
The button in the minimap is also great, thank you for mentioning that!
Our cell size is around the default and our number of cells varies wildly by level. We have a few data layers also, which I understand will push the time upwards.
We’ll be exploring this over the coming weeks, and this will be really helpful.