LibraryOcclusion Culling and Frustum Culling

Occlusion Culling and Frustum Culling

Learn about Occlusion Culling and Frustum Culling as part of AR/VR Development with Unity XR

Optimizing Extended Reality Performance: Culling Techniques

In Extended Reality (XR) development, maintaining a high and stable frame rate is crucial for user comfort and immersion. Performance bottlenecks can lead to motion sickness and a degraded experience. Two fundamental techniques for optimizing rendering performance are Occlusion Culling and Frustum Culling.

Frustum Culling: The First Line of Defense

Frustum culling is a standard graphics technique that eliminates objects outside the camera's viewable area, known as the 'view frustum'. Imagine a pyramid with its tip at the camera and its base forming the screen. Anything outside this pyramid simply cannot be seen by the user, so rendering it is a waste of resources.

Frustum culling prevents rendering objects outside the camera's field of view.

The view frustum is a pyramid-shaped volume that defines what the camera can see. Objects completely outside this volume are not rendered, saving significant processing power.

The view frustum is defined by six planes: near, far, left, right, top, and bottom. Any object whose bounding volume (a simplified shape like a box or sphere that encloses the object) does not intersect with any of these planes is considered outside the frustum and is culled. This is typically handled automatically by the graphics hardware and rendering pipeline.

What is the primary purpose of Frustum Culling?

To avoid rendering objects that are outside the camera's field of view.

Occlusion Culling: Hiding What's Hidden

While frustum culling handles objects outside the camera's view, occlusion culling deals with objects that are inside the frustum but are hidden from view by other objects. For example, if a large wall is between the camera and a distant building, the building is within the frustum but is completely obscured by the wall. Occlusion culling prevents the rendering of these hidden objects.

Occlusion culling prevents rendering objects that are hidden behind other objects.

This technique identifies and discards objects that are not visible to the camera due to being blocked by foreground objects, further optimizing performance.

Occlusion culling is more complex than frustum culling. It often involves creating a 'visibility set' of objects that are actually visible. This can be achieved through various methods, such as hardware occlusion queries or software-based approaches that use depth buffers or scene information. In Unity, for instance, the Occlusion Culling system bakes visibility data to optimize rendering.

Think of frustum culling as ignoring things outside your window, and occlusion culling as ignoring things behind your furniture inside the room.

Implementing Culling in Unity XR

Unity provides built-in support for both frustum and occlusion culling. Frustum culling is generally automatic. For occlusion culling, developers need to 'bake' the occlusion data for static objects in their scene. Dynamic objects that move into or out of occlusion require more advanced techniques or careful scene management.

The view frustum is a pyramid defined by the camera's field of view, near, and far clipping planes. Objects outside this volume are culled. Occlusion culling identifies objects hidden by others within the frustum. A common implementation involves rendering a depth pass to determine visibility, then using this information to skip rendering occluded objects.

📚

Text-based content

Library pages focus on text content

FeatureFrustum CullingOcclusion Culling
PurposeRemove objects outside camera's viewRemove objects hidden by other objects
ScopeObjects completely outside the view pyramidObjects inside the view pyramid but obscured
ImplementationTypically automatic (hardware/pipeline)Requires explicit setup (e.g., baking in Unity)
ComplexitySimplerMore complex

Best Practices for XR Culling

For optimal XR performance:

  • Utilize static occlusion culling: Bake occlusion data for static geometry in your scene. This is highly effective for environments.
  • Optimize bounding volumes: Ensure your objects have accurate and tight bounding volumes for efficient frustum and occlusion checks.
  • Consider dynamic occlusion: For dynamic objects, explore techniques like GPU-driven culling or careful level-of-detail (LOD) management.
  • Profile your scene: Use Unity's Profiler to identify which objects are being culled and which are not, and to pinpoint performance bottlenecks.

Learning Resources

Unity Manual: Occlusion Culling(documentation)

Official Unity documentation explaining how to set up and use the Occlusion Culling system for static objects.

Unity Learn: Optimizing Graphics Performance(tutorial)

A learning pathway from Unity covering various graphics optimization techniques, including culling.

Unity Blog: Understanding Frustum Culling(blog)

A blog post that breaks down the concept of frustum culling and its importance in game development.

Real-Time Rendering: Culling(blog)

An in-depth look at various culling techniques used in real-time graphics, providing a strong theoretical foundation.

GDC Vault: Optimizing VR Rendering(video)

Access to GDC talks on VR optimization, often covering culling strategies for immersive experiences.

Unity XR Documentation: Performance Best Practices(documentation)

Unity's official guide to achieving optimal performance in XR projects, including sections on rendering.

Computer Graphics: Culling(paper)

A PDF document detailing fundamental culling algorithms and concepts in computer graphics.

Wikipedia: View Frustum(wikipedia)

A comprehensive explanation of the view frustum, its mathematical definition, and its role in 3D graphics.

Unity Learn: Introduction to XR Development(tutorial)

A foundational course for XR development in Unity, which may touch upon performance considerations.

GameDev.net: VR Performance Optimization Guide(blog)

A practical guide offering tips and techniques for optimizing performance in virtual reality applications.