My project uses objects consisting of several parts. In short, all my models consist of literally several parts. Their number should be quite large
I’m going to disable StreamingEnabled, and take optimization into my own hands. Would it make any sense to make a simple system that would hide objects out of sight/ use LOD models for objects at a distance
It’s a dumb question, but would it make any sense to make a LOD model for a house of 10 parts?
Adding LOD would take up more memmory, and there isn’t really a point if its just 10 parts, you won’t see much of a difference.
Why are you disabling streaming? Is it to see further?
Depending on how your game is made it’d be best to just load/unload details of certain zones you’re in
Custom rendering is only good in specific types of games, ping optimization and making code less stressfull is more important, but if you really care about those models, you can render them on client, also you can turn off their collisions if they are not visible or not important, this will surely help
No. There’s no reason to disable StreamingEnabled if you want to render a lower quality model, because the game creates imposter meshes for you, which are inherently going to take up less memory than any lower-quality model you handcraft, as they’re going to have a lower polygon count. Just let the engine do the work for you. It saves on time and performance in comparison to creating a lower quality model yourself.
Also, no, the slight memory increase isn’t a concern either, as once again, these are low-poly meshes and should take up a negligible amount of memory.
Check out this video, it does a great job explaining instance streaming.
Disabling streaming is a bad idea. No custom solution can come even close to its benefits. Also roblox is rolling out occlusion culling very very soon so hiding objects out of sight is already a thing (soon). What performance issues are you running into where you need to start optimizing? Is memory high? Is FPS low?
Roblox already has an object/occlusion culling system recently (in select games) and they’ll be rolling out to everyone soon. If BaseParts are out of sight (out of the camera bounds or hidden behind a BasePart), they aren’t rendered. A side effect of this is that if you have parts with a mesh modifier inside it, it would disappear at the edges of your screen since the bounding boxes are not quite right for object culling. Streaming also automatically generates a lower-LOD MeshParts (only) when its RenderingFidelity is set to Performance or Automatic. If you’re looking towards optimizing it further, try using Actors for script multithreading, add a --!native at the top of your server scripts, and optimize your code. You should also defer updating subtle effects, for example updating the position of rain particle boxes at the second tick inside of RunService.PreRender connections.
Amount of parts is non a very good metric since instancing exists. What you should be doing is looking at how many draw calls and triangles are in your game and trying to reduce those. Draw calls especially since they are extremely expensive. Tl;dr optimize your models for draw calls