Decouple Occlusion Culling from Streaming

Models that are outside of an experience’s streaming radius but within the “render distance” of a user’s graphics settings are not culled when occluded. This is detrimental in settings like large, but dense cities, as far away models that are visible via a user’s graphics settings are not culled when occluded.

image

In debugging this behavior, increasing the streaming radius to infinity and/or disabling streaming produced the expected culling results. But also nullifies the benefits of streaming.

Steps to Reproduce:

  1. Open Roblox’s “Modern City” Template
  2. Set Workspace’s StreamingTargetRadius property to a low number
  3. Set your graphics settings to maximum
  4. Enable the Wireframe Rendering mode
  5. Play Solo

StreamingTargetRadius: 128
image

StreamingTargetRadius: 1024

As we can see, when StreamingTargetRadius is 128, there are still models being rendered behind the building that is occluding them. When StreamingTargetRadius is 1,024, the models behind the building are culled.

I make no distinction of whether the model(s) being rendered are LOD models because culling should be independent of model LOD and streaming radius.

Expected behavior

An occluded model should be a culled model. Occlusion culling should not be informed by streaming/streaming radius.

11 Likes

I wonder if that was the reason behind a previous bug report I made: Roblox's occlusion culling fails if the camera is further away

The staff member that replied said that it had to do with the parts not being occluded because of their size. I’m unsure if this is actually the case though as your report seems to highlight the actual cause of the issue.

Edit: Doesn’t seem to change what I’ve been experiencing (wish it did). Looks like I’m going to have to keep building my own occlusion culling method.

1 Like

This is honestly critical for more dense games like the city we’re making, glad someone caught this.

2 Likes