What's Next for Streaming - We Need Your Feedback!

I just want to reiterate how massively appreciated these recent updates to Streaming have been.

Originally, the lack of developer control over Streaming was the #1 reason stopping me from ever using it, and it was so frustrating that Roblox had always insisted on forcing everyone into a broken “one size fits all” approach when using Streaming; every game is different and has its own unique needs. However, now that we can reliably ensure that critical assets will always be streamed in at the right time, and we won’t have to worry as much about unexpected script errors, I’m very excited to use Streaming for our next project.

Continued updates which allow us to fine-tune the Streaming system to fit our individual games’ needs will be a huge benefit :slight_smile:

31 Likes

The biggest feature missing from streaming for me is a lack of developer tools for testing and debugging, and it’s the main reason I haven’t used it in a production game yet. Being able to emulate devices with low memory is a good start, but ideally we should have more granular per-object controls to craft repeatable worst-case scenarios so we can make sure all bases are covered.

Thank you for taking the time to ask for feedback before going forward with this change! It’s much appreciated. :grin:

23 Likes

The newest changes to streaming are fantastic; namely, the Atomic model option has done a great deal for our Streaming game with a huge world, Find Everything.

If you look at one of the most-liked feature requests of all time, Custom Replication via Zones/Scenes, you’ll know developers have wanted some sort of volume-based streaming zone option for a long time. Current streaming does not allow developers to do this with ease. A new Object type or scripting functionality that allowed us to stream in areas based on volume would be potentially very useful.

For a more simple and broadly useable feature, I think being able to selectively choose players to stream or completely ignore Models would be a godsend. Replicating things to specific players only has always been a pain point when developing on Roblox, and built-in support would go a long way. This feature would work similarly to the newly-added PersistentPerPlayer option, but any Players who are not whitelisted would not stream in the model whatsoever.

57 Likes

Great communication! Here’s a cookie :cookie:

Wishlist:

  1. fine control of streaming, as others have said. I want to remove nearby rocks and pebbles but keep massively distant sky scrapers.

  2. testability of all scenarios, in studio. This means lod viewing and testing too.

  3. ability to selectively replicate things to only certain users and exclude others

  4. streaming zones/volumes including terrain. Although you can code this manually atm it’s a huge pain. We don’t want to have to make everything miles apart in studio to have isolated building interiors or dungeons

52 Likes

10 words: Let us choose instances that are not affected by streaming.
whoops, turns out you already can!

6 Likes

Pretty sure you can already do this by setting an instance’s StreamingMode property to Persistent.

15 Likes

I would like to be able to set my individual loading distance for a model, for example: I want one tree to load with a distance of 512, and another tree with a distance of 256. I consider this to be a very useful feature because it is important to me that small details have a smaller loading distance, while larger ones have a higher one.

8 Likes

Are these those (SE) places that have been on internal mode for the past few months lol

3 Likes

We need a way to stream in certain things at a certain radius. For example, I want a giant mountain to be streamed in at 5K studs away, but I don’t always want a random chair to be streamed in. If I could set that mountain to stream in at 5K studs, and that chair at 50 studs, that would be amazing.

As of right now, I’m okay with StreamingEnabled being default on all new created experiences.
Love the communication and the transparency. Please keep this up.

11 Likes

big +1 for this. I would love to switch over to StreamingEnabled, but I would like things like my terrain, buildings, trees, etc to have different distances to stream out.

11 Likes

Honestly, in my game I have “cinematics” and my game displays every now and then certain parts of the world that are far away from the character. Like a door opening, maybe something happening that the player’s camera will focus on that are really far away.

This is the main cause of why I do NOT enable StreamingEnabled. The function that Roblox provides for us RequestStreamAroundAsync to request an area to load in isn’t reliable as the API itself claims. Every time I change a player’s camera I will have to trigger a RemoteEvent to call the function RequestStreamAroundAsync. This is honestly really bad…

If there is a way to solve this issue in the best way possible, please let me know, don’t come up with messy solutions…


I used StreamingEnabled before and it was great until some users on low end devices sent me pictures of the Terrain looking totally black and certain assets not loading completely at all. Trees missing their leaves, some images not loading either, not sure what happened there and if is related.

Here is a picture taken on 2021:

Such images discouraged me from using StreamingEnabled as well as being useless after some time in the game where the player would crash after some time of walking around the map and some things were loaded in already.


Now I can give it another try, if I find a way of allowing cinematics to show up properly.

2 Likes

maybe an option for the models to fade into existence instead of pop in

10 Likes

i have a round based game that loads in new maps every round and i want that to load in nicely without causing a massive lag spike. due to the game being round based the map and lobby area should always be loaded so i can’t allow workspace to stream in/out automatically or use that functionality at all. however it’d be much easier if i can chose to globally load in and out a Model and have the engine handle that for me.

additionally we should have a method Model:GetPersistentPlayer(): Array<Player>

and

an event Model.PersistentLoaded(): Player

6 Likes

Awesome post! It’s really great to see how far streaming has come and how much is still planned. Speaking from my own experiences with trying to implement streaming into an existing large-world game, I feel confident in saying that streaming and related APIs are no longer the main things blocking adoption.

From my own experience as a developer of a game with a huge, detailed map, the things preventing me from implementing streaming into my projects are now just Studio and server memory.

On our streaming enabled test build with our full gameplay-ready map, studio often crawls down into the 15-20 FPS range and eats up ~15 GB of memory. Selecting services like Workspace or ReplicatedStorage (or really anything with a large number of descendants) will freeze up Studio for 2-3 seconds, searching/filtering for anything is super unresponsive, and starting and stopping tests can take minutes. Saving the place file, publishing updates, and even opening the places (especially with team create enabled) is another huge time loss because of the project size.

And this is just the place file where streaming is actually enabled. We have to work out of smaller / lite version of our game to keep studio performance from being a huge productivity killer. All our map and asset work has to be done in other team creates, and assembled and tested back in the main file(s). No matter how much we try to mitigate Studios performance issues, we can’t ever escape them. As our game grows in size it only gets worse.

These workflows feel counterintuitive to a lot of what Roblox has been working towards when it comes to project and asset management, but you can’t work on a big game without them. These performance issues are a big part of why I switched to a vscode + rojo setup. The amount of development time I’ve been able to take back from waiting for Studio to respond has been huge, even in the lite versions of our development environments.

Server memory is something I spend a lot of time on. Big games, no matter how you pack them, take up a lot of memory and the ~6.5GB we’re allocated on the server is not enough. On a 30 player server, our non-streaming/custom chunking system sits at the ~5.5GB mark. Our gameplay ready streaming build with 1 person in the server starts at 5.5GB and we can push it into the crash zone just by having more players join the server.

There is a lot I can do to convert my existing project into one that is more optimized for streaming, but memory headroom is a huge concern for me as a developer. Being able to build and stream these giant, detailed maps doesn’t mean much to me if the rest of my game has to min-max every MB of RAM left over just to function.

Having a big map is really only half of having a big game, and while streaming has made leaps and bounds to enable big games, other aspects of the engine and creation experience are not yet up to par. I very much look forward to seeing what further improvements are to come!

19 Likes

I think it would be great to be able to set whether you want an instance to be replicated to the client on creation per instance. It would be great for things that only need to be on the server to possibly save performance and internet usage especially if properties on those instances are being rapidly changed.

I don’t expect a change like this to be made but it would be nice especially going alongside other existing features like network ownership and with how dependent roblox is with client and server replication and stuff of that sort.

Other than that I think streaming is super neat and helpful for games with big maps, lots of high quality models, etc.

5 Likes

Terrain streaming definitely needs some improvements. Lower streaming radiuses cause terrain to glitch out which is still a problem to this day. I also realised that this is a problem even on clients which can load more than the minimum.

Custom LOD for meshes would be awesome as well. If this was added, I could add my custom LOD meshes for far objects or clients with really low memory available for textures.

5 Likes

Honestly I really love that Roblox is developing tools for us to optimize our games without making our own systems

would be better if we had more control over it and be able to see what certain points of the map would look like when you’re in studio, would also be good to see the map in studio with an editable quality setting so you can see how everything looks at certain quality levels

4 Likes

Along the lines of supporting ‘huge’ games going forward with streaming, Roblox really needs to address game max size limitations imposed by the arbitrary ‘2 minute’ upload timeout. Devs with slow internet upload speeds are limited to the size they can upload within that 2 minute threshold. I think Roblox needs to set a place size limit that is the same for all Devs and allow Devs on slower uplinks to wait as long as they want for an upload/publish to complete (even if it is an hour).

As it is now, a dev with a gigabit uplink can publish significantly larger ‘places’ than dev B with slow internet.

Please fix this!

some numbers:
ISP upload limit - Max game size limit(in 2 minutes, best case)
1 Megabit - 7.5MB
2 Megabit - 30MB
5 Megabit - 75MB
on so on…

4 Likes

I’ve been using StreamingEnabled extensively for a long time and here are the most major things that I would love to see in order to balance client performance and server workload for streaming assets to multiple clients.

Currently, In my game, I have areas that have very big models with thousands of parts (Buildings created by players) and other areas that have very low part-density. It would be nice to be able to set custom streaming radius per model per user. This would allow the high-part-density models to require to be closer to stream in, while low-part-density areas could be streamed in at a larger radius!

Additionally, giving us access to changing streamingRadius on the fly per player would allow us to set streamingRadius higher on higher end devices such as PC’s, while setting it lower on mobile devices. That way PC’s can have better visual fidelity and decrease load on the server from having to stream in/out too many parts at once.

5 Likes

Thanks for the transparency and communication, really glad to see Roblox being more open with developers about their future plans, especially relating to StreamingEnabled.

I’ve been using StreamingEnabled in my game for over a year, it was a bit tedious to change code to work with it but overall it’s helped us out a lot. The recent changes in our ability to make models persistent with Streaming have really benefited my game and fixed a lot of things players were complaining about.

For feedback I’d really like to see Streaming work better with smooth terrain as sometimes the loading can be a bit buggy. I also wouldn’t mind being able to view how Streaming looks in your experience from studio rather than having to play test each time you make a change to it. Only other thing I can think of is to let us change the radius streamed into a player based on their device/platform. So maybe higher on platforms like PC and lower on devices like phones, tablets, etc.

Keep up the great work with Streaming, really glad to see the recent changes made!

1 Like