The Idea I have, that I want to achieve
I want to try to improve how Roblox prioritizes rendering with high detail what the player’s camara focuses on using Camera.Focus, but a system where it would adjust the size of Camera.Focus just a bit to optimize performance for the player. Similar to like eye sight where someone with bad vision (or a bad computer) couldn’t focus on things further things away from them compared to someone with good vision. The system wouldn’t try to like boost or devastate high-end or low-end device’s rendering focus, but make it easier to keep a smooth rendering experience. What I’ve tried so far, in action?
This is a sample of a practice game, I’ve been working with to try to do what I’m thinking of. So far its just RenderFidelity and a few other optimizations but not relevant to rendering. (Like collisionfidelity, and fluidfidelity that were enabled on the instances)
Figuring out, what I could do to do my idea
So far I’ve tried using Render Fidelity and setting it to Performance (only available for meshes I found out), and Automatic for everything else. I also researched about distance culling/streaming, then specific object culling, but I wanted to have the loading worked as if it’d disappear appropriately to size, not just at like a set stud distance. Like for our eyes we can’t see what we can’t pick up, and most of the engine handles that already. I’ve also tried Model LOD (only works for Meshes rn) where it generates a very low quality mesh when that object is streamed out or disappears when its outside of stream/render distance. (which is all apart of streaming enabled)
But yea I’m looking for ideas, to help, I’m sure this is really different, but I wanna do rendering that cares about the player’s performance. And yea thats all. Ty for all who wanna help this!
Roblox is already a pretty low performance platform. I could show many references of games that are gigantic and very detailed like “Deepwoken” for example that don’t lag the player at all.
You’re creating a difficult solution for an easy problem. Although, it is pretty cool to try to do LOD culling but its not needed. The best way to do it is to first have the maps load locally, on the client for the player. Then making it so any areas of the map the player isn’t close too isn’t loaded in. If you wanted to go super far into this, you could make it so any part the player cant see also isn’t loaded in but that’d be too much.
Then you have another simple solution like removing textures from objects, you may be able to write a system which removes textures from far away objects, and gives them back when closer but I think that cause more lag than anything, what most games do is add a low graphics mode which removes all textures in the game for that play locally.
There are other optimization methods I’m sure but these are the ones I know of, and what you’re trying to achieve may infact cause more lag unless you optimize the system a lot.
Those solutions could work to an extent and certain situations, but I wanna make something that makes the world accessible for anyone; that if you use it for this game it’d work here too. That the player views the game how’d they view an actual world, yea they won’t have the detail as if it was real, but still the same feel, and I know engines are capable of it.
If they optimized for the performance of each player, from where their device can work. So it can perform to a rate most could like 60 or 120 fps, but those who want to go higher can go higher, but not letting a player who can barely run 60 having to try to render high details when they can’t; giving the player only what they’re able, not suffering them to lose out on seeing the game world the developer wanted them to see.
If you wanted to go super far into this, you could make it so any part the player cant see also isn’t loaded in but that’d be too much.
ROBLOX recently released a new studio beta which does this for us!
I would personally avoid removing parts that are far away from the player since that’s already handled by ROBLOX’s render distance system in the default quality settings, if it ends up being an issue I would focus on creating quality settings which reduce the amount of parts, effects, animations etc: to reduce lag, you could maybe reuse that distance-based loading idea for those instead!