Simple Occlusion Culling

Occlusion culling is a performance technique that helps Unity avoid rendering objects the camera cannot actually see because other geometry is blocking them.

For beginners, the easiest way to think about it is:

  • if a room is behind a solid wall
  • and the camera cannot see into that room
  • then Unity may be able to skip drawing the hidden contents

That can improve performance in the right kind of scene.

Recommended Occlusion Pass

Use occlusion culling after the world layout is stable enough that rooms, walls, and sightlines will not change every few minutes.

  1. Confirm the scene has strong blockers such as walls, buildings, or separated rooms.
  2. Mark appropriate static objects as occluders and/or occludees.
  3. Bake the data, visualize it from player paths, then test on your VRChat target platform.
VRChat note

Occlusion culling can help segmented VRChat worlds, but it will not fix expensive avatars, mirrors, real-time lights, shaders, or open layouts. Test it as one optimization tool, not as a replacement for world performance planning.

Occlusion Culling vs Frustum Culling

Unity already performs frustum culling, which means objects outside the camera's view are not rendered.

Occlusion culling is different. It tries to skip objects that are technically inside the camera view direction but completely hidden behind other objects.

Culling type What it skips Beginner example
Frustum culling Objects outside the camera view A prop behind the player
Occlusion culling Objects hidden behind blockers A room full of props behind a solid wall

You get frustum culling automatically. Occlusion culling needs scene setup, baked data, and testing.

What Occlusion Culling Is Good For

Occlusion culling works best in scenes where visibility is naturally broken up, such as:

  • indoor rooms
  • corridors
  • hallways
  • multi-room buildings
  • spaces with strong visual separation

It is generally less useful in:

  • huge open outdoor scenes
  • wide spaces where almost everything is visible at once

So before using it, ask whether the scene actually has enough blocked visibility to benefit from it.

In VRChat terms, it is usually more promising for a club with backstage rooms, apartment corridors, multi-room galleries, or enclosed buildings than for a single open landscape where players can see across the whole scene.

Why It Helps Performance

If Unity can determine that an object is hidden behind other geometry, it may skip rendering it.

That means fewer visible objects are being drawn at the same time, which can help with performance in scenes where a lot of geometry exists behind walls or other blockers.

It is not a magic fix for every project, but it can be useful when the scene structure supports it.

When Beginners Should Consider It

You should think about occlusion culling when:

  • the scene has many separate rooms
  • the project is interior-heavy
  • players do not need to see every part of the world at once
  • performance hotspots happen because too much hidden geometry is being rendered

If your world is basically one large open area, this is usually not the first optimization tool to reach for.

A Simple Beginner Workflow

Before doing anything major:

  1. Make sure the project is stable
  2. Save your scene
  3. Work on a test copy or a controlled test scene if possible
  4. Make one culling-related change at a time

That matters because optimization work is easiest when you can clearly see what changed.

Mark Objects Appropriately

Occlusion culling works by understanding which objects can act as blockers and which objects can be hidden.

At a beginner level, the most important idea is:

  • large solid walls and structures are the most useful blockers
  • objects hidden behind them may become candidates to stop rendering

Thin decorative objects are usually less helpful as major blockers.

Unity uses two important static roles:

Role Meaning Good candidates
Occluder Static A static object that can block visibility solid walls, floors, ceilings, large buildings
Occludee Static A static object that can be hidden by occluders props, furniture, decorative meshes, room contents

An object can be both an occluder and an occludee if it is static, solid, and useful in both ways. Small props and transparent objects usually make poor occluders, even if they can be occludees.

Dynamic Objects And VRChat Content

Dynamic objects cannot be baked as static occluders. In practice, that means moving pickups, animated props, avatars, and runtime-spawned objects should not be relied on to hide other parts of the world.

Some renderers can still be dynamically occluded by static blockers at runtime, but this is not the same as using them as baked occluders. For a beginner workflow, treat the world shell and major static architecture as the occlusion structure.

Bake the Occlusion Data

In a typical workflow, occlusion culling data needs to be baked so Unity can calculate the visibility relationships in the scene.

That usually means:

  1. Open Window -> Rendering -> Occlusion Culling
  2. Review the Object tab for selected renderers and static flags
  3. Use the Bake tab to generate visibility data
  4. Use the Visualization tab to inspect the result from camera or player viewpoints
  5. Test the scene normally after baking

The exact UI can vary by Unity version, but the concept is the same: Unity needs to precompute visibility relationships.

Do not bake once and forget it. If you move walls, rebuild rooms, or change major static geometry, bake again and retest.

Test the Scene After Baking

After generating the culling data:

  1. Move through the scene normally
  2. Check performance-heavy interior areas
  3. Watch whether hidden areas behave correctly
  4. Make sure objects do not disappear when they should still be visible

This matters because aggressive or poorly suited culling setups can sometimes create confusing visibility behavior.

Test from realistic player heights, mirrors, doorways, windows, corners, and teleport destinations. If the player can see an area from an unexpected angle, your culling setup needs to survive that angle too.

What Makes a Scene a Good Candidate

A strong candidate scene usually has:

  • thick walls
  • separated rooms
  • clear hallways
  • limited line-of-sight between zones

These scene structures give occlusion culling more useful visibility problems to solve.

Good occlusion candidates also tend to have stable static architecture. If you are still blocking out the world, wait until the main room layout is mostly settled before spending time on detailed bake tuning.

What Makes a Scene a Poor Candidate

Occlusion culling is less effective when:

  • most of the world is visible from most positions
  • the environment is very open
  • blocking geometry is weak or inconsistent
  • the scene is mostly outdoor or wide open

In those cases, other optimizations may matter more.

Common Beginner Mistakes

Expecting huge gains in every scene.

Occlusion culling is scene-dependent. It helps most when the layout has solid blockers and hidden areas; it may do very little in open worlds.

Marking every object as an occluder.

Small props, thin details, foliage, glass, and transparent surfaces are usually poor blockers. Use strong static architecture as occluders and let smaller objects be occludees when appropriate.

Baking without visualizing the result.

Always inspect the baked result from real player paths. A culling setup that looks fine from one camera angle can still pop objects from another doorway or balcony.

Treating culling as a replacement for good scene design.

It works best alongside smart layout, room separation, sensible materials, baked lighting, LODs, and controlled mirror usage.

Changing several optimization systems at once.

If you combine culling, lighting changes, shader changes, and geometry changes at the same time, it becomes harder to tell what actually helped.

Practical Advice

  • Use it mainly for interior or segmented scenes
  • Test performance before and after
  • Do not assume every wall-heavy scene will benefit equally
  • Keep optimization changes measurable and controlled
  • Re-bake after changing major static architecture
  • Check object popping before uploading a VRChat world update

Helpful follow-up pages

Final Advice

Occlusion culling is most useful when your scene already has strong visibility separation. If the world is broken into rooms and corridors, it can be a worthwhile performance tool. If the world is wide open, it may do very little.

For beginners, the safest approach is:

  • understand the scene layout first
  • bake culling data carefully
  • test the result
  • keep only the optimization work that actually helps

Related Navigation

References