Why are packed level actors more performant re. rendering?

I was wondering what makes packed level actors more performant to render.

So, let’s say I have few big boulders that I turn into a regular old Blueprint and start dotting around my level. My understanding at the moment is that there’s already quite a lot of rendering optimisation happening at this level, not because this is a Blueprint but because static meshes that use the same material are instanced automatically and drawn in a single draw call (so, if my Blueprint is made up of Boulder1 and Boulder2, all the Boulder1s are being drawn in the same draw call etc .)
When I asked on another forum what extra rendering optimisation using a packed level actor would give me, someone replied that “Packed Level Actors result in a single draw call for the whole actor, whereas otherwise there would be multiple draw calls per mesh component.” Is what they mean that, essentially, in a Packed Level Actor the static mesh actors that make it up will be treated as one big static mesh? So that now instead of all of the Boulder1s being drawn in one draw call and then all the Boulder2s being drawn in another, now all of my BoulderPackedLevelActors will be drawn in one draw call?
And would that actually be more performant? I thought bigger static meshes could actually be more taxing to deal with in terms of not working as well with various occlusion culling techniques etc.?

1 Like

Surprised nobody has chimed in. Apparently they are faster. In my tests if i place 100 of them i get a draw from each though. Wish someone from Epic would chime in on what they actually do other than in webinars that they are just faster Faster than ISMs? idk. Large world building with lots of BPPs hit 2k draw calls in a hurry.

We did tests of PLA, BPP and regular Actors (with 90% being Static Mesh Actors and some being BPs containing only Static Meshes) using about 5000 Actors. So each category is roughly 5K static meshes.

The tests showed the following average FPS performances in:

Stand Alone mode played out of the Editor:
Standalone Actors: 110 FPS
Packed Level Actors: 135 FPS
Packed Level Blueprints: 75 FPS

Development Packaged Build (.EXE executable):
Standalone Actors: 87 FPS
Packed Level Actors: 112 FPS
Packed Level Blueprints: 79 FPS

Although the ranking of the three categories remained the same between Stand Alone In-Editor Play and Dev Packaged Build tests, the performance gap between Packed Level Blueprints and Standalone Actors became much smaller. There could’ve been a number of factors involved and we should disclose that our test was casually performed without taking extra care to experiment with controlled variables (though the tests were done within an hour of each other and we did not open new applications that might impact performance).

The overall takeaway is that PLAs are a clear optimization winner and Static Mesh Actors should never be used if they are part of a Prefab-style setup. Packed Level Blueprints should be avoided unless some non-static behavior is needed (like physics based movement or lighting changes) or to animate the static assets in a Level Sequencer (since Sequencers can’t reference anything inside of a PLA or a Level Instance).