Making a chunk loader

Since my game uses quite a lot of meshes and probably won’t be friendly to slower devices, I’ve decided that I should make a quality filter. One of the things I want to do is make a chunk loader like the one in @Coeptus’s Welcome to Bloxburg. How it works is the further away the player is to a building / are, the less “rendered” it becomes.

I have looked around on the wiki for something to do with this, but came out unsuccessful. Can someone please inform me on how to do this? :smiley:


image

5 Likes

What about Streaming Enabled?


You might not liked it because it disappears, I suppose


I wouldn’t know how to do it but I would start with looping with all parts you want and check distance.

2 Likes

Can I toggle this using a local script? My wiki won’t bring up any search results.

No, you can’t change it during runtime.

If you want any chances of a working game, don’t use streamingenabled.

2 Likes

So it’s completely useless? :joy:

I didn’t see that coming.

I tried it a few times now over the months, it is unreliable and just doesnt work.
Some parts of the map never load, all that kind of stuff

I’m not that surprised :rofl:
Roblox broke my game many times before :expressionless:

anyways, let’s help the dude.

From what I’ve been told and what I’ve seen, chunk loaders are particularly laggy and not the best way to handle this kind of work. It’s more like they split their game into regions and only load in the part of the map that you need.

i.e.

  • When you’re in a lobby, only the lobby is there
  • If you enter a shop building, the rest of the map unloads and only the shop part stays

I’d think StreamingEnabled would be better for use, but apparently that’s no good either according to the conversation above.

2 Likes

Chunk loading is actually removing objects that can’t be observed for interacted with. Dynamic level of detail (LoD) is reducing the amount of detail when far away from objects. Many modern games in the industry implement both of these features for large maps. For example in Skyrim, the outside map is unloaded when the player enters a cave. World of Warcraft and Rift have more seamless transitions with world ‘instances’, a form of chunk loading. Roblox’s streaming enabled setting could be seen as a chunk loader with each chunk being a single part.

As for the LoD, Roblox, is currently working on this. Looking at the roadmap, I see that texture LoD is already implemented and that mesh LoD is on-track for this quarter.

The problem is that chunk loading and LoD on models rather than individual parts/textures/meshes would require information from the developer to avoid messing up their game. Making LoD or chunk loader is a pretty complex process and if not properly tested with an eye on the actual results (not performing per-optimizations and over-optimizations) then it could easily be less performant. If you really want to go down this path, “discrete level of detail” is probably what you are looking for. Other methods would be difficult or impossible to implement in Roblox.

A discrete LoD system needs to:

  1. determine when a player enters within a range
  2. add detail to a LoD object
  3. remove detail from a LoD object

All of these things can be implemented and tested separately. To determine when a player enters a range, there are a couple good examples here, and others on this forum: Proximity-based interaction - Help determining performant practice - #12 by IdiomicLanguage These ranges would need to be linked to a discrete level of detail.

To add/remove details from a LoD object you will need some way to keep track of how much detail is currently being displayed and determine what needs to be added/removed to achieve the desired level of detail. This could be done by making a table that maps models with a LoD tag on them to a table containing this information.

12 Likes