Stream Out Behavior: New Property for Streaming Enabled

Hello developers,

With Streaming Enabled, as people move around the world, the engine will dynamically load or unload assets and stream more of the world in. Currently, in experiences with Streaming Enabled, the client will only remove streamed in parts when there is insufficient memory. This can improve load times and memory usage, but is not ideal for larger and more detailed worlds which make heavy use of systems such as rendering, replication, physics, etc.

Content streaming relies on both the person’s current location AND the paths they took to get there since they loaded in. Because of this, it lacks predictability with what is streamed in for a client.

To address this we are introducing a new workspace property and enumerated type (enum): Workspace.StreamOutBehavior and StreamOutBehaviorMode

Workspace.StreamOutBehavior : StreamOutBehaviorMode

Set the desired streaming out behavior by using one of StreamOutBehaviorMode values.

  • Default - Default behavior, currently same as LowMemory
  • LowMemory - Regions removed only in low memory situations
  • Opportunistic - Regions beyond target can be removed by engine, even when sufficient memory

Default is currently unchanged and has the same behavior as LowMemory, although this will be adjusted in the future. See below for the adjustment phases.

When StreamOutBehavior is set to LowMemory, streaming will behave the same as it does today. Clients will only stream out parts when the client is in a low memory situation. In these situations, the client may remove content until only the minimum radius is present.

When StreamOutBehavior is set to Opportunistic, then regions can be removed on the client even when there is no memory pressure. Initially, clients will stream out regions that are at a distance from the player/replication focus that is a multiple of the target radius.

Over time, the logic the engine uses to determine which regions to stream out will evolve, but the client will never remove contents that is closer than the target radius except in low memory situations.

Property Adjustment Phases

  1. Starting today, you can opt-into this feature by setting StreamOutBehavior to Opportunistic
  2. Over time, the Default behavior will be adjusted to reflect Opportunistic and you will need to explicitly set the StreamOutBehavior to LowMemory to continue using it.
  3. In the future, we plan to remove StreamOutBehavior entirely and only use the Opportunistic behavior settings. It will be some time before the property is removed and we will be rolling out new features to give you more control before that happens.
267 Likes

This topic was automatically opened after 10 minutes.

Wish we got the ability to prevent parts from streaming out. Yes, I can develop my game to work under StreamingEnabled, however this can actually be quite difficult as it would force us to reinitialise the part everytime it’s streamed in.

Still amazing that we got more control over streaming behaviour.

89 Likes

Although this will help just a little bit, when will StreamOutBehavior Completely be gone. It’s a great feature, but I am not sure how often I will use it. It would be nice if we got an update when StreamOutBehavior gets removed. I am glad we get more use out of it, but its too difficult to use.

9 Likes

This makes my mind boggle even while reading this, can anyone explain this to me in a TL;DR or simpler term?

8 Likes

Very excited for this!
The inability to stream parts out more aggressively has been a huge gripe of mine with the streaming system. On my games in particular, devices with higher memory capacity would be able to stream more of the game in, but in turn bog down the GPU resulting in poor framerates. I needed to develop auxiliary systems to force unneeded props to stream out to keep framerates manageable.
In playing with this change for a few minutes, it seems this new property solves that fundamental issue perfectly!

Thanks for this update!

21 Likes

This’ll allow for Mobile users to experience detailed open world games. That will allow for them to be on the front page. That will allow me to play them! Finally!

15 Likes

StreamingEnabled only shows parts that are near the player, in order to reduce memory and computational overhead.

Current StreamingEnabled behaviour is to start to remove parts when the player’s device runs out of memory.

The new Opportunistic StreamOutBehaviour (which will eventually become the default) will remove parts that the player walks too far away from, regardless of available memory. I assume this is to help reduce CPU/battery usage on mobile devices.

25 Likes

This may break some games that rely on the behaviour that parts will only be streamed out at low memory. Is there anything to make sure maps don’t always stay at their minimum radius.

4 Likes

Change it back to LowMemory? They’re giving that option to choose.

3 Likes

Yet it will be removed eventually.

1 Like

What case could someone be relying on that behavior in? As far as I know we can’t track client memory availability or when the system is about to stream something out.

3 Likes

Yet, you used to be able to know that most of the time, a part that a player teleported from would still be available for a few extra seconds however that is no longer the case.

2 Likes

Nobody said they’re being removed. It’s being set as an option and slowly defaulting to Opportunistic.

Was corrected.

3 Likes

In a case like that I’d say there’s currently no proper way to know when something will stream out or in. Guessing how many seconds you have to still work with it is just making room for some pretty easy bugs arrising when you expect something to exist which won’t.

I believe games using streaming enabled have been expected to be programmed in such a way that things don’t fall apart just because something streamed out. Hopefully the controls they spoke about in the post will give developers access to any cases I’m unaware of where that’s not acceptable.

3 Likes

This is what I’m talking about.

1 Like

Oh… Hopefully the new features that says it’ll be rolled out will compensate before they do indeed remove it.

2 Likes

Very cool. This will be great for open world games, since it won’t use as much cpu and whatever.

1 Like

Is there a way to make players visible when streaming is enabled? people are able to shoot anyone from far distances if streaming enabled that is because the parts not loaded but characters loaded

2 Likes

Stream Out Behavior is a new feature that was just introduced. Your reply, asking when it will be gone, makes zero sense.

Unless you mean, when will parts never unload on a client, in that case: absolutely never. Memory is a constraint, you can’t just create more.

3 Likes