Random level generation and baking navmesh / occlusions ?

What is the proper approach to random level generation when it comes to assets loading and generating navigation and occlusions?

The way I see it - pre-load assets, generate level, generate navigation for AI and bake it, bake occlusions, then let user play. Is it possible to do with Blueprints ?

Alternatively, is it possible to have dynamic navmesh and occlusions, without baking anything and if so, would it tax performance heavily ?

Thanks.

Fortnite is best example what can be done dynamically in unreal, but they do it in C++.

Realistically unreal does not like dynamical content creation.
first problem is that either you see your level in editor (it uses construction script), or you have it randomly generated during gameplay, but it cannot use construction script. It is very hard to do generated levels that are visivle in editor without C++. But there is great example about how to do it. aka “dungeon architect” plugin.

Second major problem is lighting, you need to be careful with materials and lights or else framerate will tank with dynamic content.

Navigation is only one feature that does not care much really. You can recast navmesh after every change to map.

If you by “bake occlusions” mean ambient occlusion, well then such thing done in runtime would make most people reset their PC. Just get any bigger unreal level and try to bake lights, sometimes it takes hour or so, would anybody wait that long for level to load?

There are methods to do great looking game with dynamically created maps (fortnite is example), but that is not easy task, you also are kind of forced into certain artstyle (ie. cannot have advanced lighting).

That’s expected. Multithreaded engines generally don’t.

A game we used to work on had no levels made in level editor. Rather, it was an empty level with world boundaries, to seal playable space off the void. The rest was generated dynamically on the first play and saved as text file basically (layout of the level). Here is the video: https://www.youtube.com/watch?v=g1bbTCcBLU4

What’s “dungeon architect” plugin ?

As you can see on the video above, it’s 100% real-time, powered by an “ancient” (compare to UE4) Darkplaces engine. The only time fps would tank it due to AI and pathfinding that were computed in QuakeC script. Or when using parallax occlusion mapping. Otherwise it ran smoothly.

I meant visibility culling. When building map, there is an option to bake visibility culling. That requires having occluders afaik (at least in Unity it does).

I can assure you not that hard. Doom 3 is all 100% real-time, the game we worked on (video above) is 100% real-time. The question is if UE4 set up to run with 100% real-time lighting on an average PC and look decent enough.

I’m also interested in this, e.g. how to create navigation when generating a random world that consists of many randomly-placed islands? I’ve found that we can’t place navmesh in runtime, so what would be the best workaround?

The first thing that I have on mind is to place one big navigation volume that covers entire possible generation area and then use Navigation Invokers, here’s a video by Mr. Mieszko Z. explaining this ‘active tiles’ feature… What do you think?

You see motorstep, all that stuff is doable, but rather not in blueprints\editor only. So for anybody starting with unreal i would suggest cartoony shaders\style, then focus on gameplay. When one learns more doing more advanced stuff will be much easier.
Also dynamic content is a lot of trouble, so better do good gameplay and level generator, It may turn out that dynamic levels are not that good for your gameplay. While infinite open worlds (levels) look cool, they usually are boring (or rather most implementations are).
So i would first make sure i can do great dynamic levels for my game, before wasting time on battling all those rendering and ai problems.

I am not overly pessimistic here, or ruining all hopes etc. The thing is that I also would love to make some dynamic content for my game. It is just not east task, and decent gameplay (also balance, making sure difficulty does not have spikes etc) on dynamic levels is hardest part of it. I am constantly digging into that, and imo decent dynamically generated game requires C++.