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.)
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.
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
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:
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
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.