New Streaming Integrity Mode

This API is in the works and should be coming soon:

Property Enum.ModelStreamingMode Model.ModelStreamingMode

Enum ModelStreamingMode
    EnumItem ModelStreamingMode.Default : 0
    EnumItem ModelStreamingMode.Atomic : 1
    EnumItem ModelStreamingMode.Persistent : 2
    EnumItem ModelStreamingMode.PersistentPerPlayer : 3

(Tagging @metatablecatmaid since they were asking about it too)

17 Likes

Oh this is what the persistence thing was on models. Hah

1 Like

Does it work vertically though? Just like render distance not seeming to be affected by verticality

edit: was wrong

1 Like

These are interesting settings. I wonder what ‘Atomic’ and ‘PersistentPerPlayer’ means!

I hope it works pretty good and per-mode +per part. I have a game where 99% of the game’s parts are within sub-models of a single model, where the only thing that needs to be loaded in most of the time is the base model & a few specific parts. Unfortunately those specific parts are the farthest away, so I’m terrified of enabling this potentially-useful feature because it’d require a lot of code re-work, where as manual persistence would allow me to easily patch up the few requirements.

1 Like

Glad streaming is still being updated. I will still be waiting for per-model streaming though as my game focuses on long-distance combat and some assets I cannot afford to have stream out.

2 Likes

Is there any chance we will get to customize the render distance at any point?

I have a game with really simple graphics, so that means many people should be able to run it at max graphics, right?
Well… no, because the map is really dense, and there is no way to decouple render distance from the graphics level, both for the player and the developer. So even I, with a decent PC, can’t run it on max graphics at 60fps.

Yes, StreamingEnabled does help with this, but I have heard negative feedback from some players that they get interrupted with loading screens and that it was better when the entire map loaded at once, upon joining the game. My game’s map isn’t heavy on memory and it doesn’t take a long time to load either. It’s the render distance that kills FPS. Most players (including me) would be able to run the game at a higher graphics level if it wasn’t for the ridiculously long render distance.

This new mode should help with that, it makes this far less common.

Edit: @maxwell_edison distance culling should work with spherical radius, it is able to cull in any direction.

2 Likes

Yeah, can a member of Roblox staff please provide us an ETA for per-object streaming options?
I feel like we have been waiting for this for a while, we know it’s coming but we are eager! This could be the thing that improves my game’s performance but as for now I cannot use Streaming Enabled.

1 Like

As someone whose experience does not require atomic streaming of models but did struggle with long streaming times, this update has been a lifesaver. Our complex areas load MUCH faster now (near instantaneous vs. 10 seconds or so, far more on bad network conditions), thanks to the more conservative streaming. I foresee this becoming a popular pick amongst exploration and roleplay type games.


Thank you and cheers to the staff responsible for implementing this! :tada: I eagerly look forward to future content streaming improvements!

2 Likes

Thanks for improving the Streaming feature, for new Roblox games that’s the most important feature.

I would like to ask if by any chance are we receiving a property to choose the speed which the Streaming instances will be replicated/create inside the client?

Trying to stream new areas after a teleport or highly detailed scenarios become a nightmare with Streaming Enabled, because they can crash low-end computers and causes massive FPS drops in any kind of machine.
(This issue only applies for the Streaming Enabled Opportunistic feature)

So would be great to parts outside of the minimum radius load/replicate slower. Thanks and keep up the good work Streaming Enabled team. :muscle:

1 Like

When will we receive the ability to explicitly toggle streaming off for certain models or parts?

2 Likes

I’d like for another developer/staff post/response with some information if possible, since we know the settings are in the API but not out yet, it’d be nice to have some information on this upcoming feature. :slight_smile:

Specifically the ModelStreamingMode enums mentioned in some posts above. I can’t interpret what they mean, other than that it’ll clearly allow us to set persistent items that do not stream out.

A specific question I have is if this will apply to the graphics setting’s render distances as well - If I’m forcing something to be loaded persistently and not streamed out, chances are high that I do not want low-graphics mode players to de-render it. If they aren’t linked it’s somewhat sad, as it only really solves half of the problem when it comes to ‘streaming out’ - with far away visuals that might still be missing, but important to see.

Thanks

A couple folks here have requested a feature to force specific parts/models to always load on clients, but I’d like to add in that a method on the server to forcibly stream in/out a given part to clients (maybe an array of Player objects instead of just everyone?) would also be great to have.

edit to clarify a little

I believe a method to request loading in a specific area exists, which works similar enough to what’s requested, just isn’t particularly reliable for trying to have something constantly loaded.

Using this mode, a min radius of 2048 and a target radius of 4096 my character’s limbs are broken killing my character, always on the same spot in my game when I follow exactly the same path.

This did not happen with the previous MinimumRadiusPause mode and still doesn’t when I revert back to that. Using a target radius of 8192 with this mode seems to resolve it, but it looks like there’s a bigger problem somewhere causing this.

1 Like

I got a response in DMs in regard to my questions regarding persistent parts but unfortunately it’s not great. :confused:

So it’s being worked on but we have no idea how long it will take. Still desperate for the feature in my game though.

Could you DM me a place file with steps to reproduce the problem? That would help me investigate your issue! Out of curiosity, why are you using such a large minimum and target radius?

2 Likes

My map is huge (it reaches over 80k studs in length) and the part density isn’t very high.
I’ll send you the place file and write a very specific guide. The systems in the game are a bit too interconnected so I won’t be able to narrow down the repro case much, but I’ll try my best!

2 Likes

So upon trying to adapt my game, which has very dense close-up detail and very low-density distant details, as well as reliance on various required loaded-in objects, I’ve been struggling very hard.

Some things feel like they shouldn’t be hard to adapt. A server function that spawns a part right next to a player, and fires a RemoteEvent with the part as an argument. a localscript that receives it - it’s being streamed in directly beside the player after all, so it should just load in (near) instantly, right? After all, when streaming is disabled, the part is usually sent beside the remote event - I’ve never referenced something like that and had it return nil. until streaming enabled. Despite being right beside me. That, returns nil about 50% of the time I try to send the argument. So it’s just too slow compared to it turned off.

But it’s strange. Even at point-blank, the game is simply slower and less consistent at loading in within a timely manner than when streamingenabled is off. Creating an entirely new part on the server side, if in range, should not be delayed feeling compared to the replication speed with it off.

This, to me, is why we need persistence modes ASAP. I am hoping setting a model to persistence simply takes it out of the “streaming enabled” pool entirely. If I need to rely on something, I need to be able to connect it to Roblox’s reliable replication, not StreamingEnabled’s no-guarantees methods.

I would love any more information on this if at all possible, please.

I spent literally 3-4 hours last night attempting to make my game compatible. it’s simply not possible in it’s current state. The work required is crazy.

Unfortunately I’m still greatly struggling. Things stream in so slowly, even directly next to the player. Things that should be loading in directly ontop of the player manage to not be ‘complete’ for a brief frame loading in.

I really need an easily toggleable in-game persistency option to make sure important objects do not get the ultra-delayed Stream-In behavior. Default roblox replication is so much significantly faster & consistent that certain things just have to rely on it.

1 Like