Before starting project I’m checking the options and I would like to ask about possibility to have loaded more maps at one time. I mean let’s have a player - one person in one map. There is option that player would use teleport (transition which would take a few seconds) and this would move him to the same location BUT in different map. There might be similarities with previous map, mostly terrain profile (but not always the same), few buildings and so on. Is it even possible? Is there elegant way to do that? I think of one possibility, and that is to have only one big map where would be some kind of wall separating both worlds and teleport would move the player by offset to other map.
I read a bit about level streaming. Is this the case for using it or am I wrong?
notes: Maximum amount of maps would be “just” 2 with the same size. I’m aware of the solution would be hardware demanding.
Thank you for any constructive answers.
The issue there is to make sure that stuff is loaded fast enough. your choices are
-load an entirely different map file (which will be the slowest option)
-if there’s similarities in the map then enable/disable the objects that need to change
-have the other location loaded on the same map but out of view of where the camera is
All right and could be the second map pre-cached? The thing is maps wouldn’t be so large and as I said there might be similarities but other asset would be quite different - textures, geometry, animations, environment… Well honestly map will be different.
How small are your maps going to be ?
If the maps are going to be small then you could use tags on all objects on each map and hide/unhide them all when needed. You would unhide the hidden map just before teleporting the player on it while at the same time you would hide everything on the first map. You could place the small maps not far away from each other. But your maps must be really small , I would say below 10Km x 10Km better 5Km x 5Km, to achieve that properly with a good performance overall.
For large maps that wouldn’t really be a good option at all, in fact on answerhub I asked which option to choose when I had to decide how to deal with world composition and after some tests I ended up with multiple levels each in its own folder with a unique skysphere:
Hi @binman100
Depends on if you need Vistas. From your description it does sound like a job that could be pulled of in a large single map. But, to answer the question of more maps at one time, you could pull it off level streaming or a home-grown dynamic load/unload & occlusion implementation. We’re opting to develop a home-grown solution. Our solution is a Multi-user Quest Building System and Occlusion-LOD Manager working together to achieve a custom streaming system.
We’re developing these systems for our MMO to support the concept of Game World Simulation Interaction. Game World Simulation Interaction is intercommunication between World Servers to synchronize actions, clone | merge audio/visual content, game mechanics, players, etc.
The Quest System is built on top of the Real-time, Multi-user Construction System, which is a Glorious 3D Placement Tool. In a nutshell, it spawn-orientate-destroys 3D objects. We use a simple ‘name’ to associate a 3D object to object class parameters {meta-data}. The Quest System is basically a set of User Interfaces to edit meta-data and view results in realtime.
The Construction System spawn-manipulate-destroy all 3D Environment and Entities in the Map at run-time. So the map can be an empty world, but, to take advantage of ue4 global illumination we have the option to layout parts of the level traditionally in UE4 Editor.
All Object Data is saved/loaded in JSON format for local/remote transfer-storage-manipulation. This is vital to achieving Game World Simulation Interaction*.*
The Occlusion-LOD Manager procedurally controls the visibility, tick update, and network updates Entities with consideration to players viewing distance and performance at runtime. It works with UnrealEngine’s Occlusion optimization, precomputed visibility volumes, and LOD methods if used.
But its primary purpose is to provide triggered based occlusion similar to level streaming, Object Pool management (think infinite runner levels), Placeholder Management, and occlusion-LOD management of modular parts attached to entities.
Hi @darthviper107 @DarkS474 @TechLord,
thank you for your valuable answers. I’ll take a look on the mechanism of loading maps and decide afterwards but your answers quite showed me the direction. Thank you a lot.