How to optimize load time huge terrain maps?

I have been trying to make a huge map using the ROBLOX terrain lately, using the import function. Its size is about 16384x800x16384.

After I succesfully loaded the map, I proceeded to do some team testing. I found out that the load time took about 2 minutes. This is quite unfortunate. I found a thread that stated that there is no fix for this. But then I realized that the game Jailbreak might even have a larger map. The load time of that game is normal, eventhough the map is absolutely huge for a ROBLOX game. So I was thinking, how does Jailbreak deal with its huge map (and still have a normal load time)?

I tried enabling StreamingEnabled, but it did not seem to do much. Also, I thought that maybe some images might have caused the slow load time (due to the fact that ROBLOX is dealing with slow approval of images at the moment), but that did not seem to be the case.

19 Likes

@Brickman808 Why don’t you try the render? Yeah, ok, you don’t get it: you could make a script that makes the terrain visible when a player is not too far away from its voxel. If the player is too far then its voxel will be deleted or something like that, a copy will be saved before it is deleted, then when the player is close enough to the player it will be, yes, something like that. But I don’t know much about voxel, it was just a little idea. Or you can change the render settings of the player.

Mhm, I could somehow relate to it, but the fact is that I don’t really know how to fix this problem. This is one of my problems too. Or like maybe we need a bigger space of our processor at our PC.

I might be able to make some kind of chunk loader, but I do not really see how adjusting the RenderSettings can fix this issue. Since you can only adjust the quality level (wich should not be necessary because automatic mode should be able to take care of that).

1 Like

I found this thread: Locally-rendered terrain - #5 by TypicalType

It looks like the terrain is kind of made to be server-side, since TerrainRegion is not replicated to the client (correct me if I am wrong). I am considering to give up on using ROBLOX terrain and to start using blender meshes instead.

2 Likes

I’ve spent a lot of time experimenting with terrain optimization. Things I noticed that helped reduce terrain related memory use and load time:

Use the Part-to-Terrain plugin to trim as much terrain away as you can from underneath the biome. If the underside won’t be seen, trim close to the sea bed, then paint the underside all the same sand material. These steps lower numbers and I’ve verified this using the Place Memory in Studio. If the biome under your seabed is very thick now and you make it thin and flat the savings should be significant.

The depth of the ocean as well as how far the water goes out will make a huge difference. Consider reducing it and placing invisible barriers in the ocean so you can swim out but also stop where the camera still sees far away water.

–but–

Roblox has made incredible and exciting changes over the years. I feel like they may have oversold or overestimated the “limitless” worlds this terrain system can enable. It looks OK and you can do very interesting things with the terrain but bottom line… every large terrain test I’ve done gets bogged down pretty quickly.

Jailbreak doesn’t really have an enormous map. They’ve created a very nicely designed large (not huge) looping map. My hat off to them for design excellence.

Consider that not to many (if any) games actually use enormous single maps. All I can think of like WoW and GTA use quick and clever loading to transfer in and out of map sections.

Edit: Also if you are using real places you may want to consider scaling it down to playable size to keep players interested AND improve performance. In the games True Crime Streets of LA/New York they recreated fairly large portions of both cities. If they did the entire thing block by block… attention spans and consoles would both be burning out.

Last… if you do use Blender for terrain so you know there is a per part size limit of 2048x2048. You’ll have to be creative splitting up your terrain. Then there are collision problems with meshparts and triangle/face limits. You’ll learn all about it as you go along. This is also my path. Good luck!

18 Likes

Thanks a lot for your post. I will try to remove all ROBLOX terrain water, since I have my own water (looks a bit artificial but works just fine). Maybe I should try to make the map thinner too, but I will see how it goes.

2 Likes

Removing the ROBLOX water seems to have fixed the issue. The load time of the terrain is reduced to about < 10 seconds wich is acceptable.

2 Likes

Hi, what loading method do you use to load the terrain?

Nothing special. I created the terrain in the editor by using some built-in plugins for transforming height and color maps into terrain.

If you’re wondering about how to efficiently deal with a lot terrain, then you might want to look into content streaming. Enabling this will ensure that content like terrain and parts dynamically load and unload based on the client’s view of the world. This will generally improve in-game performance for games that have big maps.