Dynamic Occlusion Culling (used in Killzone 3)

While stumbling through some old Siggraph slides, I noticed a occlusion culling technique used in Killzone 3: (Slide 45+)

As far as I understood they render the bounding box/ simplified collision meshes into a lower resolution buffer. With this they check if an object is occluded by another and skip the rendering of the occluded object.

The advantages as they state are:
-Automated process
-Always on
-Easy to understand/ tweak
-Works with dynamic objects

I don’t know how good this approuch is, but I find the idea pretty intressting and would love to hear some opinions.

As far as I know UE only solution for culling is the cull distance volume.

The Unreal Engine 4 have this already but you got the other option of the Cull Distance Volumes too to combine with that more focused to large worlds or other optimization things.
But yes the UE4 have an internal automatic system of this.

Hi 0tacun,

The engine does this already by culling anything that is not within view.

You can see this occlusion culling in action by hitting ~ to bring up the console window and enter r.VisualizeOccludedPrimitives 1 This will only work in the editor viewport and not while in standalone game or PIE.

Any objects that are in your scene that are occluded will have a green bounding box for their representation. You can easily test this in one of the template projects or one of your own.

Thanks Hevedy and Tim for the information!

I didn’t noticed it, since I could still view the occluded objects in wireframe mode. But I’m glad and impressed that it is already there.

Btw, stunning 4.8 release!

This tripped me up five years later. :slight_smile:

Glad to see that it now also works in both PIE and standalone!

However, something still confuses me… why does it say that it drew 50k polygons, when there’s literally like a dozen or so on the screen and the rest is behind the door?

The screenshot was taken with Play Standalone.

(And this might not have to do with culling, but the DrawPrimitive calls **triple **when I move my pawn… and I literally only move the pawn through a static world, nothing else. EDIT: This last thing had to do with a single spotlight attached to the pawn, despite the entire world being composed of unlit materials…)