What can you do to reduce the lag in a game like Blade Ball, a game that includes thousands of unlockable objects that may even be connected to VFX?
For example in Blade Ball there are multiple different maps, so many different swords, explosions, etc. you an unlock, different animations, etc… But it doesn’t really lag or takes ages to load into the game.
How?
Despite keeping things as low poly as possible of course… . They probably use some self made level of detail system or whatever to make the game run that smoothly, right?
Hmm true. But don’t they still need to get loaded when you join the game?
So the more you got…the longer the amount of time players need to wait to be loaded into the game.
I get where you’re coming, but I think you’re misunderstood about how asset loading works. When a player joins the game, Roblox waits for important stuff to load in (ex. scripts in ReplicatedFirst). After that, you are in the game. Not all assets have loaded, but you are in the game, and can interact with the game world and other players. Developers can set custom loading screens to wait for all of the less important assets to load in. In that case, you can easily omit certain objects or their descendants out of being waited for.
To an extent, yes. But issues arise when you store large volumes of instances in ReplicatedStorage (such as entire maps), lower-end devices can start to run out of memory and other resources.
ServerStorage is an option, unlike ReplicatedStorage, it doesn’t consume client performance. (it is only good for maps, items, ect if you have hundred of them.)
Things not being displayed do not add to lag. You may get a slower load-up with many things in storage, but that isn’t going to affect gameplay after they’re loaded. They don’t even actually need to be in storage in this case… They could be calling IDs.
I remember seeing that phantom forces used insert service to load some assets in their games like maps
Although this is slower than reparenting from replicated storage/server storage to workspace, it uses less memory as the asset doesn’t exist in the game yet.
Also using insert service for a lot of stuff might need you to change a lot of your code as references to the asset might not exist if the asset isn’t loaded in.
avoid recursion and other unnecessary habits like task.wait() as there are more clean solutions to it
properly encode and decode your passed data
avoid overloading the server, e…g only render animations on the client and let the server handle security and validation
do not render parts not visible to you
some are unrelated to your question but I decided to bring them up either way.
you could try to monitor how the game works but this would break the tos/guidelines followed by consequences and therefore I do not encourage this even though your intentions are not inherently evil
While this is true, Instances that have only remained in a place you don’t display them would take up even less memory than ones that are being displayed because Roblox will not try to load assets in those instances like meshes or textures until it actually needs to be rendered somewhere unless the developer explicitly preloads them using ContentProvider:PreloadAsync()