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

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

Edit:
Iā€™m now using streaming in my game, and itā€™s mostly great. However, it took a while to get everything the way I wanted it to be. My feedback really is that Iā€™d like to stream rocks, flowers, and usually smaller objects on a closer radius compared to other objects.

Previous statement (3/14/2023)

Streaming has gotten a bad rap for a long time. And, due to that, I havenā€™t given it a fair chance. Iā€™m working on a 3D Platformer Collect-a-thon with many worlds that Iā€™d like to have a ton of detail. Streaming seems perfect, but Iā€™m not sure. I feel like Iā€™d need to rework entire system and code to make it work out. With a big project, that switch could take an hour or more.

Iā€™m not the most knowledgeable about this, but streaming just seems like a pain. One that shouldnā€™t be forced upon I donā€™t think.


Iā€™m not sure if this is possible already, but Iā€™d like to stream certain things differently. Flowers and rocks on the ground for example should stream in close to the player and disappear entirely if not in a certain radius, but trees in the distance should be quite visible. This is just how Iā€™d like it to work for my specific game, not Roblox-wide. If they donā€™t already, Roblox developers should be able to make multiple streaming radii, with everything being in a default, and being able to make additional new ones and adding a mesh/part to a system ā€˜radiusā€™. If that makes any sense.


Just testing steaming all itā€™s settings for my game could take hours. Not to mention, again, all the system-wide changes Iā€™d need to make to my code. Maybe I just need to sit down on a Saturday and do all that. :person_shrugging:

4 Likes

The fact that we can stream in certain models and essentially exclude it from streaming is one of the best changes yet for me so far.

Itā€™s so simple, previously it has caused me to put attachments under Terrain just so that my gameā€™s teleporters could have instances with physical data (location) loaded in to teleport to.


I definitely feel that we urgently need replication/streaming that is easier to work with through code. Itā€™s annoying how client-sided code always refuses to run only after everything is initially loaded. For example, if I want to put my gui under StarterGui, I essentially have to use WaitForChild on every instance I access.

This doesnā€™t just feel slower than dot indexing, but it makes my scripts look pretty bad, bad enough to ditch using StarterGui in favor of a custom implementation.

I canā€™t tell you how many times Iā€™ve seen users complain that something doesnā€™t exist in a Tool or a ScreenGui, when in reality, the guiā€™s code just runs before everything is initially replicated sometimes.

It would help if there was some sort of API all Instances inherited as well as scripts only running once their parent is fully loaded in, like Instance:IsInitiallyReplicated() and Instance.WaitForInitReplicated (bad names but you get the idea lol), so this would make practically any instance being accessed outside of itself through code more reliable.

Iā€™d like to wait on the entirety of an instance tree to be replicated in before spamming ugly lines like A:WaitForChild("B"):WaitForChild("C") compared to A.B.C. Chaining both WFC and FFC isnā€™t something I like to do.

My guis are pretty deep in nature, kind of hard to avoid, so I think this is the best example compared to others.

8 Likes

StreamingEnabled is one of the very rare few Roblox updates that I would support being on by default, but I will still never support it being the only option (keyword). Every experience will have different needs and wants: some just have or want to sacrifice the benefits of StreamingEnabled to reap that of everything else (e.g. visuals, non-mobile experiences catering only to higher-end devices and preference). Although I see this post isnā€™t alluding to StreamingEnabled only, I need to make that immediately clear.

My real only asks are for even more granular control over streaming such as radius and selective replication; these were already raised in earlier posts in much better depth than I could hope to go into today, but I want to reiterate how important control and option is to fine tune these features. For me personally, selective replication is the most important - while this has been a long standing feature request and something Iā€™d ideally want on all instances, streaming isnā€™t exempt from that ask.

StreamingEnabled started off very rough and gross to use, but over time itā€™s become one of my favourite performant features and the amount of feedback taken into improving the feature, in spite of the lack thereof on others, has made it something that I am fully willing to use as much as I can. Itā€™s just that I do still want choice - for example, on small worlds or places with largely single-area enclosures, Iā€™m not going to use streaming at all. I still prefer to employ my own solutions to improve performance in those cases.

10 Likes

Kudos for the communication and transparency! I would love to be able to manually stream in and out models when needed (for example, being able to stream in a secret hidden room when the door to it opens or stream it out when it closes).

1 Like

Personally Iā€™d be much more willing to start using StreamingEnabled if the recently added Model. StreamingMode functionality got extended to folders too (For example, I have a folder in one of my games containing all the mechanics I need to be persistent, and having to manually select all the models inside it every time I add a new one sounds like itā€™ll get annoying pretty quick).

That little thing aside, iā€™m loving the route the feature is going, canā€™t wait to see what other improvements are made to it.

4 Likes

The changes this year have been excellent, but thereā€™s definitely still more work to be done to help with performance optimization in general.

Iā€™d like to see a toggle for visualizing the model streaming meshes in edit mode. It could be a toggle similar to PhysicsSettings.ShowDecompositionGeometry, or some kind of per-model debug option.

Being able to visually simulate how the world streams in/out in edit mode would be cool too.

13 Likes

This is an amazing update to streaming so far! Canā€™t wait to port my games to it and see what performance this brings. Is there any possibility to add icon visuals to instances on the explorer on what to expect on an instance when the game loads this can help for debugging and to see If you have missed something or didnā€™t expect that this instance was not sent, etc.
image

7 Likes

I know it has been said, but I have to add my voice for it, we need more control of what is streamed and at what distances. For my generated terrain, I have mountains in the distance that need to be streamed in, when other objects, such as bushes, stones, and even trees need to be streamed out closer.

3 Likes

How are download times with streaming? Donā€™t we only have like a 50?kbps download time for everything on the client? Also (to me anyway) your video doesnā€™t really give an accurate depiction of how much better streaming is over non-streaming. Could you show an FPS difference or something at runtime of streaming on vs streaming off?


It sucks to say but after looking into it streaming is still not really usable in its current state for us anyway. We will be sticking with custom replication solutions for now until the following things are addressed (if they ever are addressed):

  • Lack of streaming options for individual parts. I get why it wouldnā€™t work/why it gets messy with assemblies but for anchored parts in the workspace, why canā€™t I just make it so specific anchored parts are marked to be excluded from streaming? Many of our scripts rely on single uniquely named objects (especially parts) that are direct children of the workspace, so migrating becomes a pain. Models also have a ton of properties (incl events) so itā€™s counter-intuitive to make models specifically for parts when organization isnā€™t even a factor that is gained.

  • Lack of streaming options for folders. If previous point isnā€™t feasible, the next best option, for us anyway, is streaming mode for folders. Model selection behaviour isnā€™t equivalent to folders so models are often annoying to work with.

  • The fact streaming takes an exclusionary approach. I want things to not be streamed out by default, only stream out the things I mark to be streamed out.

  • Fine-grain/per-instance control of instances is a crucial feature that needs to be implemented before we can even consider adding streaming to our game.

  • More testing options would also be fantastic as previously mentioned here.

4 Likes

Can you provide us the link to those new educational materials please. I would love to check it out. Thank you.

2 Likes

We need better LOD models for things such as planes and skyscrapers:

It also appears as though models increase in tris count?
test2
test2


This may just be me, Iā€™m not certain.

But yeah, Skyscrapers donā€™t look good with Streaming, thatā€™s my main issue.

TL;DR:

Large models look bad with Streaming.

6 Likes

The biggest issues Iā€™ve had with streaming/LoDs to date have been involving complex meshesā€™ collisions - it would be wonderful if there was, somewhere in advanced settings, a way to upload a custom collision mesh and LoDs for certain geometry as a developer.

3 Likes

If StreamingEnabled adds a way whereas you can filter which is blacklisted on getting filtered out then this will be more useful than ever. Thereā€™s a case where I have to preload assets so I put them on workspace and without being able to blacklist them on getting filtered out on StreamingEnabled; these feature is pretty useless for me.

2 Likes

Itā€™d be nice if StreamOutBehavior.LowMemory had alternatives that donā€™t cause performance issues when free memory is low. Iā€™ve noticed that on memory-limited devices that experiences often become unplayable due to streaming not giving enough memory headroom.

2 Likes

Roblox recommends keeping the data rate at max 50kbps probably because a non-trivial amount of households still use dial-up (3% U.S. households from the last article I read on it, meaning millions of people in the U.S. alone) which has a connection speed of ~56kbps. The vast majority of clients can handle much more than this, but itā€™s better to make games as accessible as possible for all users.


My main concern with Streaming is a userā€™s data allowance from their data plan. I havenā€™t tested this, but arenā€™t objects streamed in and out multiple times causing a userā€™s usage rate to sky-rocket compared to the same experience without streaming enabled? It seems like a balance between how much memory is used/available and how much data is received down the pipe/data allowance. Perhaps this problem can be solved by allowing developers to designate objects with a state of ā€œthis object is used quite a lotā€, so stream it out, but keep a single copy of it in memory so a ā€˜stream-inā€™ signal from the server is very lightweight. This very well may already be done on the back-end to some extent: already loaded objects in a non-Streaming experience tend to load faster the second time; but I would very much appreciate confirmation that this behavior extends to Streaming as well.

A userā€™s data rate can be tested, but their individual data allowance from their data plan (and how much is left) cannot, so it may masquerade as a user leaving the experience like normal or a sudden drop in connectivity.

4 Likes