I’m working on a game with a big map and I’ve noticed a scene culling a background with much more in it (Image 1) but less overall rendered triangles gets half the frames in comparison to a scene with more triangles rendered but not culling much (Image 2).
This is amazing to hear! I do have one question though, as of now it only occludes parts, but will it have the ability to occlude polygons instead of parts in the future?
Could you point me to a place file where I can reproduce this? Occlusion culling is supposed to scale itself back if it’s taking too long so that it doesn’t hurt framerate.
Culling individual triangles will always be too expensive. That’s basically what GPU hardware does when we tell it to draw everything, and software can’t compete with dedicated hardware for determining whether each triangle is visible. But we can help the GPU hardware if we can eliminate many entire objects that it no longer needs to worry about, which is what occlusion culling does.
Is there a way to turn this off? It ruined my voxel game’s performance at higher render distances or with caves enabled. It wasn’t like this before the update and you had the option to toggle it.
Are there any plans to occlude beams? I know VFX is mentioned but not sure if beams would fall under that category. Beams eat up draw calls so it could be a big benefit to games that use them heavily
Edit, I have created a bug after finding the issue in my case:
Hi, I have been having a similar issue to CaspianLake with my own game, except it’s 10x worse. It is taking 100ms per frame to perform it’s task. This started on the 25th based on average playtime. Before anything was changed, the game was doing 240fps with the optimizations I implemented. After the changes, the fps has dropped to 9 fps when looking in certain directions, especially in first person.
Sorry for late reply, but I think my game is having issues due to this update possibly as it looks very similar to other reports here, could you please help us in any way?
Hi,
I’m aware that occlusion culling is supposed to dynamically scale itself based on different performance constraints, but I’m finding that occlusion culling is instead significantly degrading the performance of my game on a minimum specification mobile device (iPad Air 1st generation).
The reason for this is that occlusion culling uses up one of the two available cores on the iPad Air (Apple A7 is a dual core processor). Previously, it was possible for the render thread to run in parallel to the simulation thread with just two cores, but now one of the two cores is occupied by the occlusion checks which take up several milliseconds.
You can see this happening here: (take note of how physics and heartbeat simulations only start processing after the frame is completely finished rendering)
The way it was before this update: (this is a simulated screenshot, I unfortunately do not have any microprofiler dumps saved from before occlusion culling going live. Notice that heartbeat can begin calculations while render work is being performed)
What this effectively means is that now, on a device with only two cores (which is the case for the iPhone 5s [aka minimum spec], iPhone 6, iPhone 6s), depending on the game, frametimes could be doubled (since now the render thread and simulation thread end up occurring sequentially, not in parallel. I can confirm that for my game, scenes that used to run at 60fps on my iPad Air now run at an unstable 30-40fps.
PLEASE PLEASE make it so on devices with only two cores, occlusion culling is either disabled or only runs if the game is severely GPU bound.
(note: my game is very light on the graphics side to begin with so although the render thread may have been longer pre-occlusion culling, it was still significantly faster to run with the simulation thread happening in parallel)
The map we’re currently working on is a forest, so it contains a lot of trees (linked via packages). I’ve noticed that these trees don’t get occluded, even when a player is indoors. We’d like them to be culled to help improve performance whenever possible, but it seems like the engine completely ignores them.
Is there anything we can change or configure to allow these trees to be occluded?
Below is a video example where a large Part correctly occludes another MeshPart, but not the trees. You can also see the model’s hierarchy in the Explorer. Thanks!
This is literally in every device as ive never seen occlusion culling actually improving my performance instead of making it worse.
Roblox should put this feature back in beta because its ultra buggy and doesn’t live up to what its supposed to do in the first place (improve performance).
I do not know why the occlusion culling is entirely unaware of the fact that it takes a scenario where the cpu and gpu load are closely matched and then throws a wrench in it all by turning it into a severely cpu limited scenario, resulting in significantly worse frame times… This is so baffling and frustrating that we cannot even disable this feature.
Noticed that in the post stated that currently UI will not be occluded - Would that mean billboard gui but not surface gui?
please correct me if I’m not wrong Theortically surface gui was based on the part’s surface and once the part being occluded and surface gui shouldn’t be rendered as well (?)
Update: Tested with wireframe rendering and confirmed surface gui wouldn’t be occluded at the moment - really looking forward for this feature later!
It’s been months and streaming meshes are still not occluded. This makes using them have an even larger impact on rendering performance. Please take a look at fixing this.
Hey i have a question, when will shadows and lighting be occluded? that would make a HUGE improvement in fps, as games like doors, or any game with alot of lighting would be extremely effective for it
Also ive noticed stuff still gets rendered through walls, as there is an fps difference in specific directions in most games, i think it might be related to shadows and lighting, or occlusion culling doesnt even work.