StreamingEnabled exceptions: 'BasePart.StreamOutExempt'

The Issue:

Updating experiences to support content streaming is currently a challenging task for developers, and a task which is impossible for developers who do not have scripting experience.

Implementation Difficulty
The nature of content streaming means that major sections of code often need to be re-written. Any code that makes assumptions about BasePart persistence will always need to be modified. This is tedious work, and the resulting code is often very difficult to test due to the nature of streaming.

Current Workaround
Currently, developers who wish for some parts to ignore streaming must clone these parts from ReplicatedStorage, which is a slow and memory-inefficient work-around. Users of this work-around also sacrifice server-client replication for these parts, which introduces unnecessary inconveniences for developers. Although this replication can be simulated with RemoteEvent schemes, it presents another layer of challenge that developers must overcome on their own.

Accessibility of Content Streaming for All Developers
Any developer without scripting experience will find it very hard, if not impossible to make their experience support content streaming. These developers often rely on older code or code written by other developers, and do not have the knowledge to update them. It would be much easier for for these developers if they could have their existing code support streaming without having to open a single script.

Even for developers who know some Lua, streaming presents logical challenges that may be out-of-reach for a novice scripter.
Furthermore, developers who do have experience may rather spend time working on other features than updating legacy code for performance gains that may or may not be impactful.

The Issues Overall
These issues combine to create friction between the Roblox’s platform’s need to provide optimized experiences to their players, and Roblox’s developers who find this optimization challenging to perform. It is in Roblox’s best interest and developers’ best interest for their experiences to be optimized. Therefore, it should be in Roblox’s best interest to make it as easy as possible for developers to optimize their experiences.

The Solution:

Give BaseParts a new property called ‘StreamOutExempt’ that, if set to true, would prevent the client from streaming them out.

How it Improves My Development Experience
For developers in general, the Issues section highlights many ways this feature would make development more convenient. Part replication, though, is something I would like to touch upon as a use case:

Use Case
Let’s say you have several very large parts that you would like to be consistently replicated to the client from very far distances. Imagine them like visual “beacons” or “waypoints.” The server has a script that controls the properties of these parts, such as color, size, and transparency. These properties can change at any time according to events that occur on the server.
You have client code that is designed to respond to these parts changing, like a compass element that points you towards the nearest position of these “beacons” and takes on its color.

Although this would be possible to write with a RemoteEvent system, it may be more intuitive and quicker to write without one. But if streaming is enabled, the developer does not have a choice.
Allowing these ‘beacons’ to be exempt from streaming would provide the developer more freedom to code the system in whatever way works best for their experience.

Conclusion

Allowing exceptions to content streaming would make it easier for developers of all skill levels to optimize their experiences. This will push the Roblox platform to be more optimized in general, ultimately improving developers’ and users’ satisfaction with the service.

18 Likes

They TOTALLY need to add this, this would basically create an LoD system, but even easier!

Dealing with other players’ characters streaming out when they all use special local effects is really tedious and hard to debug. I’d love a way to specifically mark just other player characters as being exempt from stream-out.

I think this would also be best for my main menu camera system, as i opt to use physical nodes i can move around instead of CFrame values

I already thought that I was the only one who wanted this, I can’t use streaming optimization only for this problem, let’s say I turn on and I don’t have scripts that are tied to BasePart, because it’s not loaded. (This problem greatly affects games with a large world) I hope someone from the staff at roblox will see a similar one (I’m even sure of it))