Hi,
I am trying to make a procedural map using level streaming. I have a main persistent level containing the sky sphere, directional light, skylight. And seperate 6 levels containing a single landscape in it.
I tried to make a full map by randomly repeating the 6 levels with a grid size of 16x16.( 256 level instance). But the problem i am facing is after the map is loaded the game play is very slow and my frame rate is dropping below 10.
Where as a single landscape of same dimension (component size, section size etc) it is very smooth with frame rate above 70. Also if i put a high detail static mesh in a level and no landscape to make the world, still the frame rate will be above 70.
I have checked the stats and finding that gpu use is very high and is slowing down overall frame rate below 10. Inside gpu stat Basepass and Shadow depths are taking max time. I tried disabling the shadow setting for each of the 6 landscape but still no effect, even i made the landscape with minimum dimension that is section size 7x7, number of components 8x8 but still no effect.
I am clueless about what i am doing wrong here, i followed the same example as given in youtube to make a procedural map. Please let me know how to solve this.
Did you manage to go through with this workflow. I’m doing a very similar setup right now and as I had a horrible lag moving between the levels I decided to go with World Partitioning instead but currently I’m not sure if it will be able to convert my complex landscape geometry to streamed proxies as it does not follow any kind of dimensions.
I ended up working with one big landscape also for the practicality of it. I don’t need to set up multiple landscapes with multiple foliages as all of these maps do share the same foliage and texture assets. Now the size is getting too big to handle so I need to slice it up again.
I now have my game objects still inside level streaming volumes which I bring out as I get close enough. However the World Partitioning would do this automatically without any lag or loading phase if I understood correctly.
Level stream works great with a loading screen as you would be able to level different kind of gaming setups on the same level as they would all consume different amount of time loading but would work identically when fully loaded.
My question is (If anybody ever sees these comments, I have had no luck with this topic) can I make a pseudo open world (where landscapes are logically placed and roads take the player to different levels) with level streaming volumes or should I forget them altogether and focus my efforts on World Partitioning System?
Forget everything alltogeter, make meshes and stream them in when needed based on distance or dedicated entry points.
(Think god of war where you are forced into a doorway to access the next part of the level - they call this Linear level progression).
Note that hangups during transition are common - look up any god of war fps output during a transition and you can clearly see the toll loadong takes (on a ps5 even more-so).
You can do this into a master level by loading parts, or you can load new sub levels into a persistent.
It doesn’t change much.
The end cost to rendering is fairly similar if not the exact same.
Loading time wise obviously a full level has more data and more assets than individual meshes and parts.
Further - if you insist on using landscape just know that your end result will be bad / border on unplayable.
Having multiple landscapes requires a proper setup to where at a maximum you only ever have the 4 immidiate landscapes loaded.
As any of the 4 unload, you gain fps, throwing performance off and making zones in which all 4 are forced to load probably unplayable on some systems - likely dipping well below 30fps on a fully packed scene.
On top of that, landscape (components) doesn’t occlude well, so it literally wastes rendering resources for nothing that’s on camera.
Meshes on the other hand occlude just fine, cost less, provide more ways to slice them up, even procedurally, and with instancing can be re-arranged and in the billion count before the GFX even bats an eye…
Hi MostHost_LA and thank you kindly for your reply.
I’m sorry I took my time but I finally got back into the project. This has been a creative wall for me and I haven’t been able to make any progress since I started thinking about rearranging the world.
I see where you are coming from and your comment makes a lot of sense. Especially the point in handling the landscapes on different platforms. However it makes me wonder why do Unreal and Unity veterans seem to discard the Landscape tools so quickly… I understand they are not the most efficient or lightweight but why was such a tool created if it wasn’t supported or considered as a viable option?
Where I’m coming from I have no slightest interest to discard the landscape tool as it significally speeds up my workflow. It would be impossible for me to complete this project by placing objects by hand or using different set of tools with separate landscape meshes.
I currently have one big persistent landscape sized as 3466x5545. That itself is a huge but it renders fine in the editor and is loaded in to the memory all at once so moving inside of it does not cause any loading issues. The first part of the game is fully dedicated into this map and keeping it loaded all times is essential as the game has a lot of backtracking. It’s also semi-open world where you have multiple routes to different sites. These different sites are then (currently) activated through level streaming where I enable first the buildings and then when entering them (or a proximate area) the objects inside the building.
Now when I combined all the landscapes into one bigger landscape (had to resculpt the geometry and replace the foliage) everything is working quite smoothly. I believe the World Partitioning system will enhance the GPU capabilities as only close proximity parts of the landscape would be rendered but it’s working alright.
The linear level progression was a mandatory back in the days when God Of War was first released as the playstation 2 had a ridiculous small amount of RAM and GPU Memory. The streaming demos showcased by the Epic Games prove that these kind of tricks are not necessary anymore unless the game design supports it and the game benefits from it.
The next step would be to convert my current map to world partition.
I’m planning to create all the areas as individual persistent landscapes (Forest, City, etc…) and then place them to different main levels. This way I could load persistent objects like story or event triggers on the initial load of the level and reduce the loading time when moving around the landscape.
NOTE: For beginners I would not recommend jumping in to the streaming wagon as you need to monitor your resources carefully. Also handling multiple instances of landscapes is really hard unless you “move” from level to level.