Packed Level Actors and Occlusion Culling/ Frustum Culling

I started a discussion over on Reddit last night regarding PLAs and how they work, and I’d like to ask here as well to see if anyone has a deeper understanding of how culling works with Packed Level Actors.

I realize now that PLAs are mostly an editor convenience for creating prefabs that are easy to reuse in your scene, but they do also combine multiple copies of the same mesh into a single mesh instance as I’ve shown in this video:

So that’s cool. However, what I was curious about is how those “combined” meshes would be culled via the view frustum. For example if I stand at the base of the wall, will the top parts be culled because they fall outside of the camera frustum.

So I created a simple test level and used the FreezeRendering command so I could see what’s being removed, and to my complete and utter shock, the PLAs behind and to the sides of my view weren’t even being culled. This makes it seem like they are less efficient than even regular static meshes.

Can someone clarify why this is happening and how it’s better?

They are getting culled, the reason they LOOK like they aren’t getting culled it because the FreezeRendering command does nothing for Nanite meshes.

image

If they aren’t Nanite meshes you may want to test placing them further away, as I’m not sure whether AABB or spherical bounds are used for ISM culling, if it’s spherical bounds then a really large mesh could be prevented from being frustom culled just by virtue of having a really large bounding sphere that captures the camera.

Wasn’t able to reproduce this with a non-Nanite mesh:

Some notes that may be relevant:

  1. I’m on Linux and Vulkan
  2. This is 5.6.1, built from source

Generally speaking, PLAs will create a new set of ISMs if anything about the mesh is different from the others, for example I use the raytracing groupid pretty much everywhere, and changing it creates a separate ISM component for each raytracing group id, even though the meshes/materials are all the same. This is to say: The properties of the mesh instance matter in whether or not they can be merged into a single ISM component.