[Studio Beta] Introducing Occlusion Culling

It doesn’t work with humanoid inside of the model at the moment.

2 Likes

I’ve found and fixed an issue with this. It will go live in a week or two. Thanks for the report!

4 Likes

I believe that anything with animation is not currently culled. We are actively working on this, but wanted to release what we have in the meantime, so that you get something in your hands sooner.

5 Likes

I agree that looks like a bug. Thanks for reporting it! Is there a way I can repro that to see what’s going on?

2 Likes

Yes, occlusion culling works on all platforms, including mobile.

5 Likes

Great to see that the engineers are starting considering doing away with automating everything to the detriment of artistic control.

On this topic, could we update the Envmap system to add more artistic control? I’ve outlined what I believe would be a good system for doing so in a different thread.

Thanks in advance for the response.

2 Likes

very sigma roblox. good job good job good job

2 Likes

Does OC work on low graphic quality or exclusively on high quality level?

1 Like

It works on all graphics levels. It is an optimization, it will help people who need to use the Low graphics levels more than those who can use the High ones.

2 Likes

Please add some sort of API or property on the client to tell if an instance or location is being occluded. It would be incredibly helpful.

5 Likes

This makes such an impact on some of my games; I’d honestly just rather have it live now — regardless of bugs.

6 Likes

Hello, this isn’t directly about occlusion culling but it is about culling.

I see that a culling issue was mentioned with SpecialMesh, so I thought it might be relevant enough to bring up.

A few months back, tree leaves using SpecialMesh in our game started disappearing when slightly out of the camera. I made a post about this here: Tree leaves mesh not appearing in certain angles

I did not completely understand it at the time, but I believe this to be a result of frustum culling? If some clarify or acknowledgement can be given then that would be amazing.

Our game has mostly been static for a long time and the problem only started happening since I had made my post.

If you require a repro, please contact me.

Thanks!

1 Like

What is your use case for this?

1 Like

With such cheap meshes, I might just turn off LOD entirely for these objects. The engine doesn’t have enough detail in your original authored mesh to create something of even lower quality.

2 Likes

This is not really a solution because these models have smaller details as you get closer to them, and breaking those out into separate models inside the tree as main and HQ layers conflicts with easy authoring and asset reuse (ive had issues with nested streaming mesh models), and if i don’t use a streaming model, I don’t get nice distance visibility on streamed out assets which is a smoking gun in my open world because I use part terrain that isn’t currently possible to group for streaming mesh - the foliage LOD is where the impression of the world comes from when it’s streamed out. There is a very inexpensive LOD option for me given my art style but the engine doesn’t support me providing it.

If the engine would just use the original model if it can’t get a lower poly LOD I would be happy enough. Or if it would preserve hard edges and quit looking like melted plastic.

I use bones, EditableMesh and EditableImage instances interchangeably, sometimes bound to RenderStepped, for animating foliage sway, water, EditableImage effects and flickering lights that I’d like to update constantly. Currently, I am conservative with how complicated the code I’m running for this is since I imagine it would hinder the frame rate on most lower end devices if there are enough instances. I’d prefer a compiled in-engine service or method that I could utilize to skip running instructions on something the client doesn’t render by checking if the instance is culled beforehand. As far as I am aware you can’t compile to machine code on the client, so a built in solution would be objectively faster than a custom one? Please correct me if that’s not the case.

2 Likes

Ohhhh that sounds like a really good use. Utilizing roblox’s culling to selectively implement your own code.

1 Like

Amazing! This should be great for facilitating optimization on large-scale maps. By any chance, would this also work as a step towards implementing a camera API similar to Camera: ViewportPointToRay() but that returns a boolean indicating if the model is visible from the viewport? (Not obstructed by any other parts or meshes)

2 Likes

WOOO! Gone are the days of 15 frames per second at last! Good job.

2 Likes

Is there an estimated date on Occlusion Culling being released fully?

3 Likes