Low Quality Landscape Textures

So for some reason my landscapes textures are being displayed in a super low resolution, and I do not know why exactly.
I haven’t really been able to find anything that could help me fix this myself, so I would really appreciate it if someone could help me out, as I don’t know what could cause such a problem.
This is just a bog standard LandscapeMaterial that takes its textures from a texture array and applies them to masked layers.

Now I do have a lot of buildings/props in the scene, some of which apparently also do have the same issue. But Ill try to fix one thing at a time, unless they are related by cause.

Original Project:

Empty Project (with same landscape):

This could be anything from low mipmaps, low graphics settings to other bugs and issues. However, it looks like an issue with texture streaming.

Check the texture streaming settings in your project and make sure that texture streaming is enabled and set to a suitable level for your project. You can adjust the texture streaming settings in the Project Settings and through console commands and the .ini files.

The game has a default texture streaming load which usually set around 4 GB of data. If you surpass this limit you will start seeing textures like yours. I suggest you try to optimize the textures by lowering the size or create a more optimized shader and workflow.

1 Like

Interesting, well although I don’t know the ramifications for increasing the texture streaming pool- I am targeting mobile hardware so it sounds less ideal.

Any suggestions on what to look into for optimizing both textures and landscape materials inside of UE?

The textures I use are already at x512, x1024.
Although I am selecting them on a per-layer basis using an index to look up in a large texture array- does that load the entire array or individual parts from it? (sounds dumb saying that out loud but want to make sure).

Unknown. It depends on where the array is called.

They are square, yes? Not actuallly 512x1024 ?

  1. don’t use landscape. Finish your work, convert it to a mesh. Use the mesh with the baked out single texture.

  2. don’t have textures exceed 1024 within a landscape material.

  3. doing manual layer blends on a UV instead of using height blend or similar.

  4. limiting number of paintable layers to 3.

  5. limiting textures on layers to 3: diffuse, normal, paked heightmap roughness specularity.

2 Likes

The Array holds all the landscape textures separated into different arrays (Albedo,Normal,etc).
These textures are then only called in a LandscapeLayer MF that directly outputs into a layer blend node.

Yes, they are square 512x512 and 1024x1024 textures

  1. I am relatively new to landscapes so I personally didn’t know you could do this, could you perhaps further elaborate on how I could do this in 5.1 (if engine version is relevant at all)
  2. Don’t have any of those from what I remember :+1:
  3. I don’t think I fully understand what you mean by this. Since the landscape layers are primarily used with Layer Blend from what I have seen. At least personally I am using masks to get the landscape to use the materials I want for each layer. Not sure how I could blend them using UV’s?
  4. Well, I don’t need to paint on them manually, but have many different layers (each for a different texture), since I am applying them via a texture mask. I don’t really know of any other way to reduce that- unless paintable layers are a separate thing all together?
  5. I am currently using only albedo and normal maps but good to know that a larger combination would also affect its performance (which does make sense thinking back on it)

Once you are done/happy with the landscape, you can (or could, not sure on 5.whatver) bake it out to a mesh using various options.
This is the same process used to create landscape impostors.

And/or, you can always export the landscape out of the engine and re-import it after processing it as a mesh.

The only thing you have to do different is the landscape grass, which is not possible as a node on non landscape materials.

You gain a lot in performance doing this, because the landacape system is completely flawed by design.

A layer blend does not work via UV. Usually it is 2 or 3 textures being used to amalgamate 2 materials.

I was referring to several things:

First. A landscape usually scales textures up/down by distance or uses completely different ones for the same material.
This can and should be done via UVs, as it will cost a lot less than blending regularly.

Second, a lot of people contrast tiling by lerping a different texture across the whole landscape to change the way the material colors and give less of an appearence of tiling.
This isnt necessarily wrong, but it is an extra texture that isnt needed.
You can manipulate the UVs of the textures to create a non-tiling randomized output just from the original texture.

Third, the blend between layers.
This by design already uses the paint layers - which are in the end a texture built by the engine as you paint - if you use height blends, you incur a high cost which may not be necessary to achieve the same effect.
Further, even if you use the height blend, you should take care not to height blend over a certain distance - reducing the far cost of rendering, where you really wouldn’t see any difference between the different blend techniques.

Most of those do become pointless if you don’t plan on using the landscape in the end, so you should probably work the peroblem(s) on a static mesh for it.
The issues with blending and multiple materials will be similar.
But you won’t have to deal with layers and the landscape nodes, so it becomes a littlebit easier vs having to learn what the engine uses and how.

Personally, I use a texture and its 4 channels to drive the layers.
This allows for 5 discrete layers.
The quality/resolution of this packed texture (on a staric mesh) can even reach 8K (using VT).

In terms of how it looks, it usually is still 1 8k texture stretched across an 8km area, so about 1 pixel per meter of resolution.
If you go with smaller landacape sizes, you get better detail, thats true, but it starts to depend on the overall size of the map in use.

1 Like

I’ve seen several different implementations of this. I realize math done up-front on the UVs is almost always the most efficient way to to work, but even then I see tutorials/methods that require generating multiple-sets of UVs and multiple texure-samples. Is there a method to generate UVs such that you can sample the one-time, or is that just impossible?

This is the best method I have found that gives basically-true non-tiling (you’d have to have some off-settings and REALLY look for it): Randomized tiling function, eliminate repeating patterns in your textures!

There always seems to be this rule-of-3 to really get past tiling…

For my part, I find using global UVs for my textures to maintain texel-size, but then multiply them to scale up a 2nd sample (no rotation) for each layer works well enough for me. I have a shared noise texture (the ‘3rd’ texture sample, but it’s available across the material) to help break up color (weighted-tint function off the noise-texture) and flatten-out some parts of the normal-map. Those seem to work well-enough to essentially eliminate tiling. Especially if you are going to cover it up with grass and/or other things you would normally do to decorate a scene.

Thoughts? Direction on the UVs? And thanks in advance, and again, you’ve been very helpful to me over the years.

Check out Tharle on youtube.

This specific link may not be the right video, but if you go trhough them all you will likely learn a lot - and enough to just make your own randomizer.


In terms of determing if you should make changes or not… the only way is to go out of your way for a bench test.

First, you need to get your hands on the lower end system you want to support (that may not be easy if you say want to publish on a switch and have yet to be approved).

Then you need to set up a level with the basics you will always have present.
Thats 4 landscapes. Fix your player position within the corner of the 4, so that the LOD0 of each corner component is displayed. (Probably invisi/wall out the area so you can retain player movement).
Then you need to add triggers the player can step into to toggle things on/off.
And you shpuld probably add some sort of FPS display (even if the engine reports lies 90% of the time).

Once you have it, and you publish as release to run it on that specific system, you can get a nice idea of just how bad or how good your work so far with optimizing was.

The very base will always be your painted landscape, the toggles will add whatever is commonly in your final levels such as foliage buildings grass etc. (Note: the 4 scapes should all have the maximum number of painted layers in that component that is set as LOD0 to maximize the worse case scenario of rendering cost).
As you toggle those on the fps will start to plummet.
If you hit below 30fps you know the game is unplayable on that system with those settings.

And adding the word settings also brings to mind that you should likely already have enough of a UI in place to toggle some baseline engine stuff on/off for rendering as well. Like Vsync or the built in quality for instance.
This may not be critical btw, most modern games simply stick you with what is appropriate for the system and prevent you from making changes… for PCs you normally don’t do that because of the huge spectrum of gfx. For consolles its all pre-set anyway so that part is often set.

Once you have the baseline cost of the worse possible scenario on the worse possible machine… you can decide if you should improve performance further or if you did a decent enough job at it to publish.

Generally speaking, so long as the minimum requirements are posted on the game release and you have at least 30fps performance, people won’t review bomb you… for the performance anyway.

2 Likes

Some really interesting stuff :+1:
Ill have to look into how to do any of that, so ill post my question to this here if that’s alright.

1 Like

Managing the Texture Streaming Pool | Tips | UE

https://www.youtube.com/watch?v=uk3W8Zhahdg

1 Like