New Beta Feature: LevelOfDetail Property for Models (Enabled Globally)

Hi Developers,

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.

MenuCapture

Just make sure you check StreamingEnabled in Workspace Properties for the new feature to work!

EnableCapture

Examples:


LevelOfDetail Disabled
StreamingMesh Enabled

Modeling Tips

  • 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.

223 Likes

This topic was automatically opened after 15 minutes.

Finally, builds can look fine from afar. Mobile players shall also rejoice. Now all that’s left to fix is Terrain LoD…

40 Likes

Thia will be extremely helpful for people with cheap devices that can’t play some games with high quality. Such an amazing update for devs!

6 Likes

My game’s map is already built out of many identical models. If I turn this on, will it know they’re all the same model?

18 Likes

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.

18 Likes

Please make this accessible via Script and changeable during runtime.

It will greatly help players customize their settings to be best for their device

44 Likes

Will it be supported in the near future?

Very happy to see this for more seamless and immersive experiences in-game

1 Like

This will help a lot to develop games too, so that they can play high quality games

For anyone on mobile unable to view the examples, here’s what they look like:

LevelOfDetail Disabled

StreamingMesh Enabled

(The fancy table formatting messed up on mobile, but the <table> tag works fine.)

Edit: Thanks to @system trying to download local copies, it broke again.

Edit 2: Seems like the only solution is to not use one table because of system reformatting images.

9 Likes

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?

I think it’s a really good way to improve quality of game environment overall, I think this was a very good move by Roblox studio

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

Wow, I’m not gonna lie, this is pretty horrendous.

Original Model

With StreamingMesh

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.

EDIT: I’m sure this is a bug, but the model literally never streamed in no matter how close I got.
https://i.gyazo.com/aa205a7a5f0d678c86f076def5505a01.mp4

33 Likes

Now far-away build actually load and look nice! I like it.

2 Likes

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.

Well, it is in beta. I do hope they add percentage based streaming in the future though because that is pretty horrendous to look at.

1 Like

Not exactly what I was looking forward too, I was looking forward to a system similar to the mesh render fidelity system we already have.

1 Like

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.

1 Like