Lag reduction in game with tons of assets

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?

5 Likes

I mean, not like all those objects are used all at once. They probably just sit in ReplicatedStorage, where they don’t consume any resources.

2 Likes

This RobloxLearn video could probably help you: https://www.youtube.com/watch?v=VDO_amtWfDw

1 Like

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.

Instance streaming helps with that!

Instances in containers like ReplicatedStorage still consume some resources, even though they’re not rendered or simulated.

1 Like

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.

Point being it doesn’t consume that much resources to in any way affect gameplay or even be noticable.

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.)

1 Like

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.

1 Like

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.

1 Like

Instances take up memory, even if you don’t “display” them.

  • use meshes
  • connect/cache/disconnect events
  • pass by reference principle
  • sanity checks & debounces
  • 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

1 Like

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()