New Streaming Integrity Mode

Hi Developers,

Since we first introduced StreamingIntegrityMode.MinimumRadiusPause we’ve been listening to your feedback and exploring ways to make Streaming better in this area. We heard from you that MinimumRadiusPause pauses too often and for too long, and in some scenarios, it can be more disruptive to your players than the incorrect simulation that can result from having it disabled.

Details

To address some of your feedback, we’re introducing a new Streaming Integrity Mode: PauseOutsideLoadedArea. The existing MinimumRadiusPause guarantees that your surroundings up to Workspace.StreamingMinRadius studs away are loaded in before the simulation proceeds. PauseOutsideLoadedArea only guarantees that your immediate surroundings are streamed in, but in return, it results in fewer streaming pauses. Basically, this new mode makes sure there’s ground under your feet and walls for you to run into but doesn’t guarantee much beyond that.

PauseOutsideLoadedArea uses the bounding box of the replication focus to decide when to pause. If any part of the bounding box is not in a streamed-in area, it pauses. The replication focus will default to be the local character unless it is set via Player.ReplicationFocus.

Q&A

How do I choose which mode to use?

  • Most experiences should be able to switch to using PauseOutsideLoadedArea without issue.

    However, if your experience relies on raycasts or similar operations which require a certain amount of content to be loaded in, then MinimumRadiusPause might still be the best choice for you. If you’re unsure, feel free to ask questions in this thread.


Visit the documentation page for StreamingIntegrityMode for more information. Please let us know if you have questions or feedback!

Thank you.

149 Likes

This topic was automatically opened after 10 minutes.

StreamingEnabled Part Filters. (stops parts streaming out in any case)

Please

(cool feature though, albeit the documentation is a bit jargony but thats nor here nor there)

82 Likes

Thank you for this feature, this has been common feedback that our development team has received in our game which has a (really huge) map with streaming enabled in response to gameplay being paused. This is highly appreciated.

11 Likes

StreamingEnabled Part Filters. (stops parts streaming out in any case)

This is being worked on. It was mentioned at RDC and we’ll share more details when we’re ready!

albeit the documentation is a bit jargony

You should have seen the first draft :smiley: Are there any parts in particular you’re referring to? I might be able to make it clearer.

55 Likes

Ehh its fine, I skimmed over it to begin with, dont worry :sweat_smile:

7 Likes

I don’t use StreamingEnabled in my games, but thanks for making roblox better and explaining how to use it :happy1:

I will give it a 10/10

8 Likes

I’ve noticed the Gameplay Paused happen too much on mobile in one of my games, this fixed that issue, Thank you!

7 Likes

I don’t know the amount of times I’ve had to clone objects on the client just to have them always visible + at full fidelity.

3 Likes

I’m unable to use StreamingEnabled in any of my experiences as there is no method to force certain models/folders/parts to ignore streaming, but it’s great some improvements are made. Please support manually flagging models/folders/parts so that this feature can actually be used.

19 Likes

One step closer to making streaming a little less of a headache.

I’d love for a way to choose which (if any) client/s an instance is replicated to. (both streaming enabled and disabled)
For example, in every creatable instance there is a property named ReplicateTo. The server can set this property to an array of >= 0 players to define which [if any] players can possibly be replicated the instance or nil [default] to use standard replication behavior.
As of right now, I can only replicate x to player1 and only player1 via player1's PlayerGui. Also, if I want to have instances descendants of workspace + have them physically simulated + keep them Server-Only, I have to use workspace.CurrentCamera which isn’t the worst thing in the world- but it’s another use case for such custom replication behavior.
Pretty please. ←

7 Likes

I have multiple islands in workspace on the server.
Clients will only keep one island at a time in workspace and put the rest in replicatedstorage.

Could you add an option to disable/enable streaming of specific folders?

4 Likes

I hate to say this but streamingenabled ruined every single game i enabled on, if its not turned on then the game is perfectly fine i do add optimizations to the game and no issues at all

i tried every settings of streamingenabled btw

1 Like

Whats StreamingEnabled for again, I forgot :confused:

3 Likes

I never really understood streaming enabled since low graphics turns my game’s render distance to like 0 anyways. The baseplate already literally fades out of existence for low graphics, what is even the point of streaming enabled?

Does it work vertically? Since render distance doesn’t seem to

2 Likes

Let’s say you have a LARGE game, it takes a while to load right? But what if you only load the spawn area, and around, then prioritize it? Then they can spawn in very fast, all while the outside areas load in the background. This makes load times way faster for the user. It also dynamically loads/unloads areas, instead of having the entire map loaded at once.

This also makes it easier on mobile devices or low-end PCs. Instead of having a small device load the entire map, it only loads what it needs to have a good experience.

8 Likes

This does not do exactly the same thing, because some things still need raycasts. So, your game could still be considered “laggier” due to this. At least that’s my understanding. Somone correct me if I’m wrong.

2 Likes

A low render distance makes it so objects that are too far away aren’t rendered, but still have to be loaded in and will take up place in memory

With streaming enabled those objects are never sent to the client in the first place - as far as the client is concerned, those parts just don’t exist. This way the client doesn’t have to spend time loading in the objects and allows memory to only be spent on what the client actually needs (instead of, for example, some parts of the map thousands of studs away)

6 Likes

Nice feature.
I’ve got a question.

Any reason models are being streamed in without any parts inside them, even the primary part?
This makes it impossible to use Collection Service (tagging) with models, because if you tag a model, and on client listen to CollectionService:GetInstanceAddedSignal(), it fires when the model is streamed in, but you basically can’t do anything because the parts inside it are not streamed in.
So this either results in errors, or you have to use an infinite yield WaitForChild(), which might never yield, because the client may get out of the streaming radius, and model streams out again, without it’s parts ever being streamed in.

I think the models should be treated as assemblies, and stream in fully, or not stream in at all, or at least have such option, so that we don’t have to introduce hacky solutions to this problem (Like tagging the primary part instead, and welding all needed parts to it, so that it is an assembly, even tho there is no need for welds, because all the parts are anchored).

11 Likes

When will be able to exclude parts and models from streaming?

3 Likes