Skip to main content

How occlusion culling affects objects

Occlusion culling treats static objects (like the map) and dynamic objects (like players and pickups) separately.

  • Static objects can hide and be hidden. (You don't always want static objects to do both.) They'll be baked into the data and can't be changed at runtime.
  • Dynamic objects can't hide objects behind them, but they'll be hidden based on a rough calculation of whether they're behind a static object.

Unity uses the Static flags on an object to determine how occlusion affects them. There are 3 different things that occlusion thinks about.

  • Static Occluders. The only things that can occlude are static things that don't move - specifically, Mesh Renderers and Terrain. If they're marked as Occluder Static, then things behind them get hidden. They'll be baked into the occlusion data.
  • Static Occludees. This specifies static things that get hidden. Occludees can be anything with a Renderer, as long as it doesn't move.
  • Dynamic Occludees. This covers anything else in the scene. If the "Dynamic Occlusion" property is enabled, then it can be hidden by Static Occluders using the baked data.

Dynamic occlusion is less precise than static occlusion. In practice, only large, solid objects will hide dynamic objects.

Occlusion culling works on top of static batching, and Unity can hide objects that are part of a static batch.