We just released a new opt-in feature to help remote parts outside of the streaming radius become visible with a new LevelOfDetail property for models!
When a Workspace has streaming enabled, parts outside of the streaming radius will not be seen in live games - but with this new property, you can now make them visible. The idea is straightforward: generate representative meshes to be rendered outside the streaming radius. Representative meshes (also called impostor meshes) are colored, coarse meshes that wrap around all child parts of a model.
To use this feature, go to File → Beta Features in Studio and enable Automatic Impostors for Models.
Once enabled, models will have a new “LevelOfDetail” property that you can edit.
Setting it to StreamingMesh will activate the asynchronous generation of a representative mesh that can be seen in live games when outside streaming radius.
Setting it to Disabled or Automatic (default) will delete what’s generated.
Just make sure you check StreamingEnabled in Workspace Properties for the new feature to work!
Automatic update in Studio editing
Changes to the model or any of its children, e.g. adding/deleting/repositioning child parts, resetting colors, will automatically update the representative mesh.
Memory sharing
If you have hundreds of identical models in different sizes and orientations, you’d better create them by copying then transforming, and avoid individual editing unless necessary.
Outside of streaming radius
Streaming is distance based. We consider models crossing the boundary of the streaming sphere as outside. This requires the model size in StreamingMesh to be much smaller than the streaming radius.
Hierarchical models
If a model and its child (or grandchild) models are all set to StreamingMesh, only the ancestor (top most) model will be rendered in game. For better memory performance, you may want to disable the LevelOfDetail property of child models before releasing your game.
Loose low-resolution wrapping
You can set a small workspace streaming radius value (e.g. 256 studs) to see representative meshes closer in Studio playsolo, but remember representative meshes are designed to be seen at a distance (1024 studs away). They may not capture model fidelity well to keep triangle count per model low.
Known Limitations
In-game live update is not supported
Texture is not supported
Team Create and published games are not supported until official release
As always, let us know what you think in the replies below!
This feature was enabled globally on Monday, September 28, 2020 4:10 PM. Team Create and published games are supported.
I think this should be its own separate setting from StreamingEnabled, with properties such as LevelOfDetailRadius or something like that. I’d love to use this in games that don’t have/use StreamingEnabled.
Very neat improvement for people with lower-end devices! Will surface GUIs, textures, decals, and beams be supported in the future? If so, how will it work – will the texture, surface GUI, decal, etc become blurry or just simply go out of view completely?
This oughta be cool, this is a nice feature, agree’d @MZTN_FRAGS this is a good move.
Everything looks so more decorative in the 2nd picture then the 1st, this could definitely help showcases and more as you usually cant see everything from a far distance in most games
It’s pretty appalling that Roblox’s streaming system doesn’t account for the percentage of the screen an object takes up (or would take up) when deciding whether to stream it in or not (or which LoD to use). The massive tree off in the horizon takes up the same screen percentage as a nearby tree of normal size, yet it’s either reduced to actually nothing or a giant green blob with streaming enabled.
This streaming system (and LOD system) is nowhere near where it needs to be in order to be used in production games. I understand this is only a beta, but just… Wow.
This is great news for streaming - it really shows the potential of the platform to make massive games playable across all devices. It’d be awesome if I could grab specifically the mesh it generates though. I’m currently working on a game with distant planets, and it’d be awesome if I could have it generate a model mesh then be able to use that reduced detail mesh in intergalactic maps among other things. Currently I use an auto-lod system, but I’d move over to the official Roblox one if they could allow me to do this.
Without even knowing scripting great performance optimizations are brought by StreamingEnabled. This will make back what little visual losses it brings at that level of development, and is great like how ClickDetectors are replicated with no event code for the basics.
Although people have requested an ignore list for streaming, and in @Rocky28447’s case I could see developer fabricated LOD meshes if any, I in general think that’s a responsibility to be left for developers.
The Front Page game Welcome to Bloxburg is a good example of this I think.