Model streaming features: Priority Types

As a developer I want better control over streaming with respect to performance.

Right now Roblox will just stream things by distance without any way for the developer to indicate any gameplay importance.

I want a way to stream my distant hero assets before my grass decorations.

So it seems to me that I need to give Roblox more information at a per-model level to accomplish this:

Priority Type enum which allows me to tell Roblox how I want to prioritize this model.

  • Always When Near, current behavior, streams it in when the player is near without respect to priority levels.
  • Priority Gate makes the model eligible for normal streaming only when every model of a lower priority is streamed in.
    • A Priority Level number property informs this type.
  • Emphasized affects the normal distance check so that a higher-priority model is considered to be closer and therefore more important..
    • A Distance Offset number property offsets the perceived distance by a fixed number of studs
    • A Distance Factor number property multiplies the perceived distance.

Right now roblox only understands the difference between an essential (Persistent) model and a non-essential one. Non-essential assets need further nuance when creating high-detail worlds.

Consider a mountain in the distance - the player’s objective. I can make this mountain persistent but I should really only do this with the minimum necessary components to convey the information to the player. More components than necessary will eat into performance, memory, and load time budgets.

Consider decorative flowers at the player’s feet. Players are fully able to enjoy the game without this detail. It realistically never be streamed to someone’s 4GB RAM android TV.

There are layers of detail in games. There are basic shapes of the terrain, props that inform the player, and decorations that do nothing but look nice. These things should be streamed in an informed way so that the player can see distant terrain shapes before they see flowers at their feet. Normal open world games off of roblox already do this - you won’t see high-density foliage a kilometer away in monster hunter. It’ll be shapes, and it’ll resolve as you get closer. That’s not just LODs - that’s the asset not existing at all until you get close enough. And potentially never existing depending on your performance. That’s what I want to do in Roblox.