Download

Effecient World Composition Level Streaming with Blueprints

So I’ve been stuck on this for a few days.Before I highlight my problem and ask my question let me explain the process I’ve undergone while creating my first open world landscape. First. I created my own height maps within Photoshop by using real world height map data taken from various locations around Earth and combining them into one usable PNG file.
[SPOILER]
https://media.discordapp.net/attachments/551821380790910997/573603561699540993/unknown.png?width=617
[/SPOILER]
.Then, I imported the height map into unreal and applied it to the landscape successfully
[SPOILER]
https://media.discordapp.net/attachments/551821380790910997/573614847766429699/unknown.png?width=1117
[/SPOILER]
After which , I was able to smooth out the terrain using the sculpt tools and texture paint using the Brushify Asset from the marketplace. Next , I realized that I was loading an area easily 55,000 x 15 units and this would create huge frame rate issues, so I needed to split up my world into tiles. Best way to do this? World Composition! So upon successfully splitting my landscape into 15 tiles , I finally had the basis ready to being working on environments one cell at a time. I added grasses, atmospheric fog, etc, to the persistent level and got some pretty nice effects, only I realized a couple of things that were severely hurting my CPU and breaking immersion. The image below is before all the texture painting and environment work. But you can clearly see a defined edge where the other tiles should be loaded.

[SPOILER]
https://media.discordapp.net/attachments/551821380790910997/573603139249242127/unknown.png?width=1084
[/SPOILER]

  1. The textures seem to be streaming in a very high quality , because my system cannot look at my mountain ranges without dropping into the 20fps range. At one point I had a huge foilage instance with over 1 million plants placed via foilage tool. Upon removing it, I only notice a frame rate increase of 2 fps. Which honestly is a little surprising to me.

– Main issue aside, I think this can be solved via view distance LOD’s for the landscape. If you guys have better ideas, please let me know!

  1. When ever I would play the game, World Composition would stream levels successfully. But often times only what was right next to the occupied tile. And NEVER did it stream far enough to have a background view.

So, after scouring the internet for a few days, I came across this tutorial: https://docs.unrealengine.com/en-us/…WithBlueprints
It looks like the basis of accomplishing my problem right? I can control what sub-levels are streamed in while the Player Actor is in contact with the Collision Box from the blueprint. Here is a screenshot of the suggested blue print setup:

[SPOILER]
https://docs.unrealengine.com/portals/0/images/Engine/LevelStreaming/HowTo/StreamWithBlueprints/FinalLoadBP.png
[/SPOILER]
So I have created this myself in my world with a few slight differences. Since I want all sublevels in my world to be visible while the player is in just a single one, I have added an additional 14 **Load Stream Level **Nodes attached to a Sequence Node to the end of this blue print chain with the idea to utilize it like this:

[SPOILER]

[/SPOILER]
Let me explain.

Say the Player Position is in Tile 2x2.

Up close within the tile, at say a view distance of 10,000 from the player, the landscape will be streamed at LOD1. While everything else outside this 10,000 unit radius, but still within tile 2x1 will be streamed at LOD2.

Meanwhile, in order to achieve visibility of the background, we stream the most immediate surrounding tiles, (aka 3x3, 2x3, 1x3, 1x2, 1x1, 2x1, 3x1, 3x2, and 3x3) at LOD3. And stream the outer most tiles (3x0, 2x0, 1x0, 0x0, 0x1, 0x2, and 0x3) at LOD4. Which should theoretically enable us to see the terrain of the other landscape tiles within the Player Position Tile.

Is this an efficient way to do this? Or am I actually making things tremendously more complicated? I kind of figured world composition would do this automatically, but it makes sense that it doesn’t.

Below you can see my implementation, but bewared its messy lol

Your approach is good. But you don’t have to do this manually. In world composition, you can set up and generate LOD levels automatically and just define the distance.

basically, try to generate all the required LODs.