Terrain-only streaming/chunk loading

As a Roblox developer, it is currently too hard to make a game with an extensive amount of terrain without the performance impact that the voxels of terrain bring.

If Roblox is able to address this issue, it would improve my game / my development experience because it will allow for developers to add more expansive areas of terrain. My game in particular is very dependent on the use of terrain as it shapes the map where the roads go etc. If a streaming option for just terrain this means we can fine tune the distance the terrain is loaded and unloaded, it will also mean that the players on low end machines won’t struggle rendering the terrain across the WHOLE map as using the current version of streaming breaks a lot of in game scripts as they rely on parts which get unloaded, making the game unplayable.

It would also be amazing if a player option could be enabled, expanding the use of an in-game menu/settings feature to allow the player to customise the render radius/distance for the terrain, depending on their preference or machine!


Why do you need a streaming option for just Terrain? How come you can’t use StreamingEnabled for your project?

1 Like

When parts get unloaded it breaks some
of our core scripts as they get “deleted” or removed from the workspace when unloaded and scripts aren’t able to access or find them, WaitForChild also has an infinite yield when called on the parts in question.

1 Like

As per the StreamingEnabled wiki article, it says:

The downside of network streaming is it means the client can no longer rely on specific objects being available. Developers should not enable StreamingEnabled unless they understand its implications and have put processes in place to manage them. For example, LocalScripts may have to use Instance:WaitForChild in order to access parts of the game.

You’d need to check if the client can actually see the parts you need.

WaitForChild’s second argument is a timeout; for example,

local Part = game.Workspace:WaitForChild("ThisPartIsFake", 10)
--If the part exists, it prints it.
--After ten seconds, if the part doesn't exist, Part will be nil.