Table of Contents

Culling


Property Type Default Description
Use Baked Occlusion Culling bool true Enables per-chunk occlusion testing against Unity's baked occlusion data. Chunks fully hidden behind occluders are skipped.
Fit Cull Bounds To Vertices bool true Fits each prototype's cull sphere to its farthest vertex instead of its bounding box corner, measured once per mesh at registration. Around 13% smaller on typical vegetation, so more instances cull. Meshes without Read/Write enabled are measured by async readback and use the box radius until it lands.
Use GPU Occlusion Culling bool false Enables real-time GPU occlusion culling using a Hierarchical Z-Buffer (HZB) built from the previous frame's depth buffer. Works with dynamic objects and requires no baking. Can run alongside baked occlusion culling.
HZB Tightness enum Tight How much of an instance's screen footprint the occlusion test covers. See HZB Tightness below.
Shadow Caster Occlusion bool true Culls shadow casters whose entire swept shadow volume is hidden behind the previous frame's depth. Directional lights only, and requires Use GPU Occlusion Culling. Lossless — never drops a visible shadow. Worst-case artifact: a shadow can reappear one frame late after a fast disocclusion.
HZB Shadow Segments int (1–16) 8 Maximum sub-capsules the shadow caster test splits a shadow volume into. Higher values cull more at the cost of one extra depth sample per segment; 1 tests the whole volume in a single sample. Only has an effect on long shadows.
Use HZB Retest Pass bool false Adds a second HZB pass that re-tests occluded instances against the current frame's depth prepass, recovering falsely occluded instances. Requires Use GPU Occlusion Culling. HDRP requires applying the included depth prepass patch.
HZB Pixel Expansion float 2.0 Fixed pixel expansion applied during HZB testing to compensate for camera movement between frames. Higher values are more conservative (fewer false culls) at the cost of reduced culling effectiveness.
Default Small Mesh Size float 0.3% Minimum screen-size percentage for culling non-LODGroup meshes. Meshes below this screen size are culled with a fade-out. Set to 0 to disable. Only applies to single-mesh prototypes without a LOD Group or per-prototype override.
Default Small Mesh Fade Mode enum AnimatedCrossfade Fade mode for the small mesh cull boundary: None (instant pop).
Crossfade (stateless dither).
Animated Crossfade (time-based fade).

For a detailed breakdown of the culling pipeline, see Culling.

HZB Tightness

Controls how the occlusion test samples the depth pyramid. Tighter settings cull more instances but cost more, and the most aggressive setting can produce false culls.

Mode Sampling Trade-off
Loose One depth sample on a mip that always covers the instance footprint. Cheapest. Conservative — never falsely culls, but misses instances it could have culled.
Tight (default) Four samples on the next finer mip. Same coverage as Loose, culls noticeably more. Costs three extra samples per instance.
Aggressive One sample on the next finer mip. Tests only part of the footprint, so visible instances can be culled around the edges of fast-moving objects. Cheapest of the finer-mip options and culls the most.

Start on Tight. Drop to Loose if culling shows up as a GPU cost, or try Aggressive if you need maximum culling and can tolerate occasional edge artifacts on fast-moving geometry.

Shadow Culling Modes

Two distinct approaches are available, and they can be combined:

  • LosslessShadow Caster Occlusion above. Only culls a caster when its entire swept shadow volume is provably hidden. Never removes a shadow you would have seen. Configured globally here.
  • Lossy — per-group frustum and distance culling on BRG Prototype Group. Trades some shadow correctness for a much larger cut in shadow work. Intended for prototypes that cast short shadows (grass, small props), where a dropped shadow is hard to notice.

Occlusion Culling Considerations

GPU occlusion culling uses a Hierarchical Z-Buffer (HZB) built from the previous frame's depth texture. There are two things to be aware of:

  1. Depth pyramid generation takes time. Building the HZB has a small GPU cost each frame — ensure your scene has enough occluded geometry for the savings to outweigh this overhead.
  2. Previous-frame depth causes false culling at low FPS. Because the depth texture comes from the previous frame, fast-moving objects at low framerates can leave behind ghost artifacts where instances behind them are incorrectly culled for one frame.

There are two ways to address the false culling problem:

HZB Retest Pass — Forces all instances to render in the depth prepass (and forces a depth prepass to exist), so the system can re-test occluded instances against the current frame's depth. This is similar to what Unity's GPU Resident Drawer does.

  • Eliminates false culling entirely
  • Culling runs twice — once before the depth prepass, and a second time after to calculate the actual occluded instances- All instances must be rendered in the prepass, even those behind obstacles
  • Forces a depth prepass, which adds some rendering cost

HZB Pixel Expansion — Widens the occlusion bounds by a fixed number of pixels to account for camera movement between frames.

  • Much cheaper than the retest pass — no forced depth prepass and no second culling pass
  • Less accurate — fast moving objects or cameras may still cause some false culling