ObjectStreamer - Lightweight Streaming Solution


What is ObjectStreamer?

Object streamer is a lightweight detail streaming solution which helps improve the performance of your games. (In english) it is a script that hides details that are too far away from your character to improve overall FPS.

With it you can define multiple object types which can be streamed at different render distances, for example trees with a render distance of 300 studs and rocks at the render distance of 100 studs.


How is it better than StreamingEnabled?

Unlike StreamingEnabled it is client based and extremely customizable, the properties you can change are:

  1. Render Distance
  2. Which objects are streamed
  3. How quickly the checks are ran

Even with these advantages, it works seamlessly with streaming enabled so I do not recommend disabling it.


How fast is it?

This script takes advantage of Quenty’s Octree Module for spatial querying which gives it a major performance boost.

When streaming about 2500 parts, the check only took about 0.009 seconds when standing still and 0.001 second while moving at the render distance of 100, while this may vary depending on your device the code is blazing fast.


Implementation

  1. First grab the model from the creator marketplace:
    https://create.roblox.com/store/asset/111418939192284/ObjectStreamer

  2. Place the script inside StarterPlayerScripts.
    image

  3. Add the tags you wish to add, put their names in the quotes like this and then specify their render distance.

  1. Add tags to your parts/models:
    image

  2. You are all set! If you have any questions feel free to ask below.


Examples:

A quick video of the streamer in action:

Test it out for yourself:

Support me: Donate to ExoticProto - Roblox

If you wish to support me for my contributions, feel free to donate in the game below, any amount is appreciated!

7 Likes

This might be useful at some point, but if you have a background building on the map it can make the quality of the game worse. Still awesome ngl

Nevermind, I’ve already realized it. Though it’ll be cool if it could decrease the amount of polygons of an object, but that’s hard to implement automatically : (

I’ve redone quite a bit of the system so now it includes multiple tags which can have different render distances, this way you can have trees that are rendered at 300 studs and rocks at 100 studs.

2 Likes

To be honest, this is very unsuitable for use in large maps, strong FPS jumps and this also happens if you just stand still
In general this is terrible specifically for players who drive high speed cars
I have a DistanceCulling system and it handles this much better
Here is a video demo with your"ObjectStreamer" system

ObjectStreamerPreview

Here is a video demo with my system

My System

I would suggest not using an octree system for this, but instead use a voxel grid. It’ll be less accurate but likely have better performance in a lot of cases. Or you could try decreasing the max subregions to a very low number

I assume its because it checks every second and it would be improved if it checked every 0.1 seconds as then less objects would have to be rendered in. I will try to optimize it and get rid of the octrees entirely. A question though, how do you have rendering objects in/out?