I’m not downplaying anything, I’m just thinking that while the stuff here can help and is useful, nothing here is anything too crazy to be honest. It’s things i believe most more experienced developers have seen already with some added new things and some additional explanation.
My point isn’t that the entire article was written to teach people how to optimize those sorts of games, I’m just saying that the standard simulator (toddler casino!) isn’t exactly a good example for what optimizations can really change. Hey a open world game for example would have been way better to use as an example instead! Or at least something with a scope higher than a casino for toddlers.
Also while its true that every huge AAA open world (along with most AAA games) uses most of these techniques. However you cannot deny the sheer gap in efficiency between roblox and those AAA games. AAA games actually allow for way higher levels of optimizations which in turn allow for pretty massive and detailed open worlds but not roblox. On roblox all we have when it comes to really pushing the bar and trying to create a massive open world is hoping that the roblox provided streaming will save people loading up the client in said games for the first time from crashing and that’s it.
Streaming only really works on smaller maps. Again i have to ask, what’s the definition of a large map?
As for the memory related issues then here. I got a pretty simple example. I can provide more if you’d like. I don’t claim to be the master of streaming enabled but do believe i at least know how bad it is and how little it does to improve things memory wise.
The example i will give you has in TOTAL 51240 BaseParts.
Standard Part Count: 41610
Union Count: 1850
Mesh Count: 7192
Here is 3 instances of the same spot. Each instance has 3 images showcasing the scene, the client provided memory usage and the task manager provided memory usage. Did 3 instances so i know memory usage dosent magically fluctuate on one instance:
- Instance 1: The scene:
Client Memory Usage:
Task Manager Memory Usage:

- Instance 2: The scene:
Client Memory Usage:
Task Manager Memory Usage:

- Instance 3: The scene:
Client Memory Usage:
Task Manager Memory Usage:

As you can see, all 3 examples provided are very similar. Now lets finally get into testing out streaming enabled.
These are the settings i will be used for streaming:
The overall view distance of streaming is set to pretty high values due to the fact that the map itself is actually unplayable if you use standard numbers. With normal way lower settings you could barely see in front of you and would actually take away from gameplay.
Even right now i believe low but it IS playable.
StreamOutBehavior is set to Opportunistic because LowMemory will actually not stream out anything.
Here i will do yet another 3 instances of 8 images each. The first image will display the memory usage within the default spawn area. Second image will display the task manager memory usage. Third and fourth images are going to be the same except i will be traveling to the other side of the map. Fifth and sixth will be the same except i will come back from the other side of the map to the spawn once more. The seventh and eight will showcase memory usage from the spawn AFTER i had visited every area of the map.
- Instance 1: Spawn Area with Memory usage:
Task manager memory usage on spawn area:

Back of the map memory usage:
Back of the map task manager memory usage:

Back to spawn memory usage:
Back to spawn task manager memory usage:

Spawn after whole map visit memory usage:
Spawn after whole map visit task manager usage:

- Instance 2: Spawn Area with memory usage:
Spawn area with task manager memory usage:

Back of the map memory usage:
Back of the map task manager memory usage:

Back to spawn memory usage:
Back to spawn task manager memory usage:

Spawn after whole map visit memory usage:
Spawn after whole map visit task manager memory usage:

Instance 3: Spawn area with memory usage:
Spawn area with task manager memory usage:

Back of the map memory usage:
Back of the map task manager memory usage:

Back to spawn memory usage:
Back to spawn task manager memory usage:

Spawn after whole map visit memory usage:
Spawn after whole map visit task manager memory usage:

As you can see, as i’ve said before the ONLY TIME streaming enabled really does something is when you first join a game and THATS IT. Even THEN it struggles quickly loading everything as i travel across the map. In half of the examples i had to even wait a good few seconds to get the map to stream out. It can even increase overall memory usage after i had explored the entire map even though everything should be streamed out!
Lets not ignore the fact of how streaming enabled seems to magically also ignore/skip some of the parts from the map as you can see from the images. I had MADE SURE everything is set to CanQuery = true before doing all these tests yet nothing.
As another example, you can see in all these examples i have a menu called “Geometry LOD Control” which is basically my own personal solution for streaming enabled. It’s worlds above what streaming enabled can do! Worlds faster! Worlds more efficient! Worlds more customizable! Nearly EVERYTHING better! The only down side is that of course, it does not have the benefit of not loading the entire map when the client initially loads. (Oh and to be transparent it also suffers from the same part ignore issue streaming enabled does, this is something i need to iron out).
As ANOTHER example. Here i have actually TRULLY massive map:
This map is currently unfinished however i do have its general size calculated. Its around a rough 200kx200k studs in size. At max graphics you can only render HALF of it at once. That’s how big it is. So with that, here’s memory usage without any streaming within roblox studio. (Task manager numbers are nearly identical so i wont show those)
It’s using a massive 10 gb of ram! And of course it does use way less memory in a real game instance.
Here’s memory usage within a real game instance! (This is of course without any streaming)
And the task manager memory usage:

Absolutely massive memory values still! So the solution is streaming enabled, right? No!
Well this is how my studio looked like for around 10-30 or so minutes trying to load that magical streaming:
I am not kidding, it took ages for studio to load up the play test. But after a long while it did finally load, and this is the memory usage:
Considering the playtest alone takes 10 gb, it would mean streaming enabled added a whole 35 gb of memory. Very usable for my large map i know.
Now what about an actual game client? Can’t test because the server crashes when trying to load.
Streaming enabled is actually useless for this sort of map and its why i have my own solution for streaming (which ultimately again, does not have the benefit of not loading the entire map at once yet its the only thing i have)
I’m just pointing out how Chicken says how Roblox helps you out a lot with magical automatic quality scaling (which is pretty mid at best). Or how roblox is such a “bangin’ engine” which is clearly not. The reality is that roblox pales in comparison to any other game engine due to how limited, restrictive and full of magical automatic features. I don’t think roblox sucks, i like it but ultimately i cannot lie to myself and say that roblox is amazing and how good it is. I only wish for roblox to become better all day every day man.
Low blow, pretty mean actually. I can also be mean about those sorts of things but i won’t because its not nice. This isn’t a battle between 12 year olds about who’s cooler than who. Him doing this for way longer than me doesn’t instantly mean he can just invalidate everything i have to say or do instantly. Hey in fact i believe he was wrong about the point in which he said meshes are as light as parts. I had even done testing using the same geometry on both standard parts and meshes and quickly found out meshes are way more demanding than standard parts. As said before, meshes CAN help you optimize however you cannot use them as standard part substitutions. Meshes only help when you can convert a large sum of parts into a single mesh WITH ALSO cut down geometry.
Regardless, i will not believe for a second you can properly optimize a roblox game when the primary way of streaming maps is either using streaming enabled (which feels like parenting geometry to nil after initially loading it) or parenting geometry to nil. I do believe a lot of the explained methods to optimize things around a map could help but ultimately on roblox there is just so much you can do to optimize before you’re entirely forced to cut down your game (or not make anything crazy by default) just to have something that runs reasonably well. This is not an issue anywhere else and only on roblox.