Big map problems, fps drop

Hello, I am making a map that can be considered large.

Most things on this map have bones and have animations.

for example there are 27 different trees and 27 different bones and more than 270 animations just for trees.

Everything is very nice, but as we enlarge the map, instant freezes appear.

The sample image is the one framed in red. you can calculate the size

We can solve the freezing problem by turning the roblox player settings down.

It doesn’t load distant objects, it loads close ones, but this time it reduces the shadows, disrupts the sharpening, the image is not pleasant.
If I scan distant objects and turn off their visibility, this time it will get more tired

Isn’t there another situation where the developers can control the distance in the roblox player settings? or like turning off the rendering of the model directly, can anyone share with me an idea how games with large maps handle this?

1 Like

It’s not the animations that are causing the problem, I have the chunk system for the animations, while in the red area the animations in the green area play, the others do not.

If I use the same system to change transparency, this time more fps drops.

Make a system where it unloads a chunk when your not close! That will solve it, make sure it’s local

Unfortunately, when there are more than 500 deformed meshes, deleting - recreating - changing transparency causes excessive fps drops :frowning:
We should think of a solution other than these.

Maybe you could research on the Debris Service.

The documentation explains to you what the service does and how to use it in scenarios. But to give you a brief summary of it’s purpose, it acts like an Instance:Destroy() except it doesn’t actually yield any code and can be used to not write an entire loop with extended scripts. It’s kind of simple to use and effective for removing specific items that wouldn’t be needed anymore.

It’s simple to do, actually. Say like you want to remove parts that’s in a part hitbox (touching that hitbox), you’d do this:

local Debris = game:GetService("Debris")
local PartsToRemove = HitboxPart:GetTouchingParts()

for a_table, part in ipairs(PartsToRemove) do

    Debris:AddItem(part, 5) -- the "5" is basically an embedded wait function. It'll wait for that amount of seconds before removing the part.

If you don’t want to do that method, you can use the properties in StreamingEnabled (located in workspace). Firstly, which is actually a pre-step, you need to enable it by going into the properties of the Workspace and ticking StreamingEnabled. Then you’ll be meet with more options under it, but the ones we are more concerned about are:

  • StreamingMinRadius – Minimum distance that content will be streamed to players with high priority.
  • StreamingTargetRadius – Maximum distance that content will be streamed to players.

You can play around with those settings to see if the FPS drops, but to take note of they aren’t scriptable.

Accidental bump, but I hope this actually helps you with your problem!

1 Like