How build a large open world when it comes to editor loading times, compiling, assets, and tools?

Hello all,
I apologize for the wall of text in advance. Hopefully, any answers here will not only help me but other devs as well. What is the best way to go about making large worlds when it comes to management and performance in the editor itself? I have been looking into “world streaming” assets like Sectr to help manage things at runtime, but what about when you are actually trying to build a huge open world? My game folder is at 20gb already somehow and I only have one smaller map (I need to look into why that is…). I do have a ton of assets and tools loaded in my project, but so far even with just what I have and not even having built a huge open world yet, I can only imagine how bad it will be once I get the ball rolling.

Does anyone have any experience they can share in this type of situation? One question I have is, at what point do you start to merge your meshes into a big one? My village I have now, each building is made of 4-5 pieces that are more or less just stacked and placed to create 2-3 story houses. What size area do you need to have before its a good idea to start doing this? I have not wanted to yet because I am still not sure if I am 100% done and satisfied with its layout and position since once I combine everything, that is pretty much that. When you actually go about merging them, do you just pretty much select a whole town and make it one mesh? (just all the static things of course)

What is the best way to manage the hierarchy once it starts to get absurdly long? My scene became corrupted somehow last week and the only way I could save my map was to pretty much take everything and prefab it all out in huge chunks, such as the whole town was one prefab, then an entire wooded area, then I just remade a new scene and dragged all the prefabs back in and they retained their position and everything was fine, minus all those things are still one big prefab. Should I un-prefab them, as each smaller item within were all prefabs already, so I have a few huge prefabs of smaller prefabs, which is probably why my folder is 20gb for one level? Should I break the prefab connection and then delete the large prefabs from my project? Though… now all the smaller prefabs have their connection broken from their original prefabs as well. So those are kind of a waste now, too. : /

Am I supposed to literally just make one large map, or is it smaller scenes that are made to act like one big scene? I saw that you can “additively” add scenes to your main loaded scene. Is this the best practice to make a large world?

As for tools, I have a lot of things such as Surforge, ShaderWeaver, Shader Forge, ProCore, texture painters, Behavior Designer, and many other things that I don’t use on a daily basis, just as needed (minus ProCore/ProGrids, etc). Should I just make a new project and move those things over to there instead, or just delete them and then import them again when I need them?

Sorry for all the questions, but tutorials, training classes, reading, etc really only teaches you so much, and a lot of these things just never come up, so I am interested to hear peoples experiences and how they go about handling this type of stuff. Feel free to add in any other tips and tricks you might have to try and make things easier! I started using custom layouts for different things like my main layout is across three monitors technically with just the hierarchy, game view, and scene view in my middle monitor, a large editor pane on the right monitor that has the inspector, console, project view and what not all in it. 2018-02-18 - 05.14.46 ~ Cropped Capture - Imgur as seen here.

If anyone actually takes the time to read all this, I definitely appreciate it, any answers to any of the questions would end up being a big help as I start working on taking my small game and making it grow into what I hope it can become. In order to accomplish that without blowing up my computer or ripping my hair out, getting some tips would at least get me going in the right direction.

Thanks!

2 Likes

How large is your game world?

how large are your “terrain” chunks? (don’t use squares, if you can help it, use hexes, that way you will only have to load up 7 terrain chunks, instead of 9… saves some memory.

how large is your terrain mesh in meters? that’s gonna make a huge difference in the look… if your mesh is like a meter grid, or 10 meters… and well, there’s a few tips on, well I suggest 1 pixel a meter seems to work best for me so far in Unity (using a heightmap on Unity’s terrain… though, I suspect it’s much better to create all the art and uv mapping in a 3d program like Maya or Blender and then import that into Unity… seems like there is much better control.

here is how I made a huge world, well 25 miles square for Spec-Ops… I made a huge array of cylinders, and removed all the faces but the topmost… so I had a hex array then… I tessellated the cyinder tops (did I mention I made the cylinders with only 6 sides, so they would be hexes?)… so there was 6 triangles faces before, and I tessellated them to be about 800 triangles across (because I was going for a 2 meter per triangle scale), or so… then I selected all of the tessellated hexes and merged them into a single object (but still retaining their indivisuality, so I can break them up again… then I applied a heightmap onto the hex away, (then I went to lunch since that was going to be a long procedure to cook) and when I came back, the heightmap is working… and I separate each hex again, like they were originaly, and delete all the history, then I applied the textures and baked vertex lighting on it… (ooh, I placed trees, just by selecting all the triangles where I wanted trees and I deleted all the rest, and then I just batch placed a tree in the center of each triangle I had saved… I think I just selected all the faces, and then removed any that were not “horizontalish” since I wanted the forests to only be in the flat areas

I have not actually started on my “large” world yet, I only have a hand full of smaller ones. I quite literally just bought Gaia though, I am in process of importing it to create my world. I need to see what kind of chunks Sectr likes best in terms of size, but it dynamically loads and unloads them at runtime. I have not bought it yet, so I am not 100% sure. I do recall seeing it say you can make them any size and shape though.

My first suggestion would be to get all of your core gameplay developed and working in a self-contained project. Building worlds is fun, but I think it’s a mistake to start with it (and a very common one at that). It can give you a false sense of how much you’ve actually accomplished, and you may end up having to re-do a lot of work if you later discover that you’re having problems with your character controller (climbing, slopes, etc) or NPC pathfinding. You may also find that the world is simply too big , with the interesting gameplay content spread too thin.

You’re best off building a small area (say a small town of 4-5 buildings, a bit of wilderness, and a small dungeon-like complex), with fully-developed NPC, dialogues, quests, combat encounters, etc before building a large world map. You’ll have a much better idea as to how long it will actually take to do fully develop the entire world – and you may decide that you need to reduce your scope in order to make your workload manageable.

That wasn’t actually the direct andwer to your question, but I recognized a situation that I’ve encountered many times before. :slight_smile:

In terms of using additive loaded scenes; yes you can certainly do this and it would be very helpful in development. Keep your terrain in one scene and put each significant location (town, etc) in it’s own scene. All of the scenes will line up at 0,0,0.

You can also put your UI and player in a separate scene and load that additively too.

7 Likes

My apologies for not specifying, I have most of that already but its all in a hand full of smaller scenes. That is why I am looking to actually start working on making the world bigger. : ) That is a great idea about doing the scenes in that manner, though, how would you end up patching them all together when its time to combine to one actual large level, just grab everything and drag it around edge to edge? I would be afraid of having t deal with trying to line up all the terrain and what not, then again if all the center sections were fairly flat it might not be too bad.

@MostHated - Don’t start building the town scenes at 0,0,0. When you “merge” all of the scenes, they will line up at 0,0,0. So build your location scenes after you loaded the terrain scene and you’ll already have everything in the right position. If you’ve already started building a location, just additively load you terrain scene and move the objects in your location scene to where they should be on the terrain.

You could also have one “master” scene with the world terrain where you fully detail of and then you just have a copy of the terrain in your other outdoor scenes (which won’t need all of the detail). Most likely yoully need to modify the terrain as you build locations, so having thevterrthe scene loaded additively lets you modify the terrain and save the changes – but it will still be isolated in one scene.

1 Like

Agree with @TeagansDad

If you can get it all working correctly within lets say nine 1KM2 blocks then it’s just a matter of streaming (async loading) more stuff in at certain vector distances and moving said world around you (to avoid physics issues).

I suggest you mod an openworld game first, it gives you some extremely valuable insight into how everything works from hierarchical AI methodologies to chunking terrain / all the way over to markers / navmeshes etc.

One of the interesting points of openworld (real-time) games is not what’s happening where the player is, it’s what’s happening where they’re not. Let’s say attaching marker (proxy spawn location) transforms and events to ToD timings and then spawning from marker locations when the player is in the vector boundary and / or sub triggered game manager systems.

Large games have to be coded and designed in a very specific way, not only for your sanity (because there’s so much going on you get completely lost) but due to performance. Chances are terrain will be your biggest hit and it doesn’t leave that much for whatever else is going on…

I’d also recommend trying out as many toolsets and engines as possible, then stay the course once you’ve decided. If you can undertake a project like this learning an engine is the least problematic part of it.

3 Likes

I definitely appreciate all the insight fellas. Also, I could not agree more on finding a game I can check out and see how things work, that is the perfect idea!

1 Like