Some Questions about Creating Massive Worlds, with Multiplayer

Hey everyone, this is something I’ve been wondering about for a while now.

I’m trying to make an MMO where the player can explore the whole world, which is a sphere.
The sphere will be thousands of kilometers in diameter, mostly procedural generated but with many hand crafted parts like cities.

The first thing I’ve been wondering is how to use world origin rebasing/world composition in multiplayer. I’ve experimented with several solutions, but they only work in singleplayer.

Another thing I’m not sure of is the size of the project, how much memory would something like this take up? There will be at least a hundred detailed cities and fifty countries, each with their own set of assets(materials, textures, models like windows, doors, buildings, ships, landmarks, etc.)

Thanks!

do a load test before starting any production for this.
throw in dummy assets just to test the performance.

Ok, I get about 50 FPS with nothing but fog and directional light, and the level loads in around 5 seconds.
With 10000 actors in the level(cubes) I get about 40 FPS and the level still loads in about 5 seconds.
With only 20 complex meshes in the level(500,000+ polys) the framerate goes down to about 10fps but the loading time is still 5 secs.

However, when I add a few terrains (4096x4096 each) the framerate gets really low and the loading time is 10+ minutes.

I’ve got an old GTX 650 and a 3ghz processor.

You should be measuring performance impact by frame time in milliseconds, I have links in my sig as to why.

HTH

Ok, here it is again:
Nothing: 18ms
10000 cubes: 23ms (70 when they are all selected)
20 500000+ poly meshes at epic settings: 80ms

I don’t think I’ll use UE4’s default landscape system in the final game because of the performance impact and loading times.

How big was the terrain?, Perhaps it was/is too detailed.
Does changing the resolution affect the frame time (particularly for the terrain)? (This indicates a fill rate issue).

I don’t know how you would go about using a custom terrain system, But the default one will probably be better then using a custom static mesh for the terrain.

HTH

Ok, the cubes are what like 48 polys? 48 * 10000 is only 480k polys. 20 complex mesh @ 500k poly is 10 million polys. as a reference my 8k * 8k landscape is 130,000,000 tris and you have multiple 4k terrains, so yeah fps is going to plummet, and the load times are due to your cpu and hdd.

a world of thousands of kilometers and a hundred detailed cities and fifty countries, each with their own set of assets(materials, textures, models like windows, doors, buildings, ships, landmarks, etc
that’s way to much to hold in ram and process with today’s tech my moderately detailed terrain takes up 130,000,000 tris and 378 Mb ram. thats for 8k * 8k now times that by 10, 100s 1000, and you get the idea. yes you can use world composition and stream parts in, but at that size you will only be able to have like a dot of your terrain loaded at one time.

i have an overclocked 980ti golden sample @ 1550mhz a 4770k@ 4.5ghz 16gb 2133mhz ram 4 ssd in raid 0. getting an 8k*8k area populated with stuff for the game is already starting to make me dip past 50 fps (20ms)

Edit: forgot to mention, even if you use a mesh for your terrain you will still be rendering the exact same amount of polys, but now you wont have any access to the landscape tools in ue4

The first thing beginners try to do is to recreate real-life world or rebuild their favorite video-game.
Of course they fail, but is funny to watch the maturation process…

From “-I want to make the ultimate hyper realistic world simulation MMOFPSRPGRTS magnun opus greatest game of all times, guyz!!” to… “-How the hell do I make pong?”

They’re 4096x4096 each. Any lower resolutions I think are too blurry for the terrains to look realistic.

I know that, procedural generation seems like the best way to do this. I’ve made some simple random generation scripts, but a complete terrain system I’m not entirely sure how to go about creating.
Would it be possible for the environments to be downloaded as the player moves around, to save memory?

Well, I’m not a beginner and I know how to make pong, so creating the greatest game of all time shouldn’t be too hard:P

Thanks, I’ll have to look into this a bit more.

Sorry, one more question, would using Tesselation for the ground help make it harder to see individual polygons on the landscape?
You can see here that from the view of the city the terrain looks okay, more or less: http://imgur.com/HstwE8h
but up close you can see all the individual polygons: http://imgur.com/9MWKRDt
(unless you resample the terrain to something crazy like 16000x16000)

Making good looking tesselated ground will take a while so I wanted to know before I tried it.

quick fyi on the sizes ue4 expects for heightmaps:
8129x8129
4033x4033
2017x2017
1009x1009
1009x1009
505x505
505x505
253x253
253x253
127x127
127x127
the engine will pad the size if it doesn’t conform, and you will get borders around the landscape that will waste polys.

basically, at some point that data needs to be on the hdd and fed into the cpu and gpu, so you may as well keep it on the hdd

tessellation helps heaps, once again you are just adding heaps of poly’s at it.

up close, you shouldn’t really be seeing raw terrain surface, it would be covered in rock, grass, plants, water and other stuff. try to think of it more as a way to shape the level rather than a highly detailed object

Thanks for all the info, I really appreciate it.

I haven’t noticed anything on the edges of the terrains so far, but I’ll try to crop the heightmaps a bit.

I guess the size of the final project will be 10+GB if everything is there, even though most of the assets I’m using are very low poly and re-used a lot. I was thinking of games like X-Plane, which downloads the landscape and buildings as you move around.

The terrains I’m using are 253x253 for grassy areas, but for snowy and desert areas nothing will be covering the ground so I’m guessing that’s where tesselation is used instead of a higher resolution heightmap, right?
UE4’s default terrain system still has the problem of extremely long loading times for levels with 10+ terrains, that’s why I think static meshes or procedural generation would be better.

In one of my old projects, I used about 8 terrains to cover one side of the planet, and it took almost 30 minutes to load or save the level each time. https://youtube.com/watch?v=ypSK8XflxQQ

Thanks again!