Effecient World Composition Level Streaming with Blueprints
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.
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.
2) 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:
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:
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.
Follow this question
Once you sign in you will be able to subscribe for any updates here