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
- Starting today, you can opt-into this feature by setting
StreamOutBehavior
to Opportunistic - 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. - 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.