Blurry Textures in the material of Landscape

Now, the texture looks fine, however the problem with the material painting still occurs, which is probably the Landscape resolution, the problem is that I can’t change the Landscape resolution settings because when I change one of these, the imported heightmap goes so rowdy.

And as for the testing i was changing the parameters of the RVT reference settings from the Landscape and it shows like this:

And when navigating the world, there’s a very noticeable “texture pop-in” as the resolution changes from very close to the character, which I imagine is something related to the LODs.

Another question I have about the landscape: if I increase the resolution, won’t it be under-optimized?

Thanks for your help, we’re almost there.

The landscape resolution is based on your other settings. You could try 128x128 quads. 2x2 sections might help. It’s what is used for LOD calculations for the mesh and helps with painting.

Speaking of painting, what’s your blend type on your layer blend node? It shouldn’t be blocky like that. But that might be your brush setting too.

Not sure what would cause your texture pop-in. If it’s related to horizon or distant tiles, that can be normal until you generate streaming textures. But it sounds like this is something else. It could also be due to mesh LOD since each section is a tile. You can turn on LOD coloring to see if they pop in the same way.

Increasing the resolution does increase overhead, but I’m not sure I understand what you mean by under-optimized.

Remember there are also the LOD Distribution settings for the mesh.

Hi, I just changed the Landscape resolution settings, just like you told me. As for the blend I’m using in the Blend node, I had it set to Weight Blend and changed it to Alpha Blend, and it looks much better, but it still looks a bit blocky:

I’ve also enabled LOD coloring, but I don’t see much color here :joy::

And what do you mean by fluid textures? The textures have a 2K resolution. And by “under-optimized,” I mean, isn’t it very cumbersome to make a Landscape at that resolution?

Regarding the LOD settings on the mesh, I imagine you’re referring to the Landscape details box, right? If so, I’ve been fiddling with the parameters there and haven’t noticed any changes.

The texture pop-in in Landscape is very annoying. Is this error normal? Or is it an improper configuration?

Thank you and greetings

Weight blend should have been fine. I really don’t understand the blocky blending. I just tried it again on my end and the painting is extremely smooth. The brush falloff setting with or without creates either smooth blend over a large area or a crisp circular transition if brush falloff is 0.

I did have blocky tiles a LONG time ago, but I just can’t remember what caused that. In Landscape mode, you could try using the sculpt tool and selecting the Visibility icon. Then painting on it will make some of your terrain disappear. You would have to change your RVT to support mask and re-add the Landscape Visibility node to your material. Anyhow, you can see the resolution for masking and your blending will be even better because blending isn’t a hard edge. You can undo and then revert your texture afterwards. Anyhow, this should give you an idea how blocky your blending should be.

Make sure you’re using LOD coloring needs to be the one under landscape. Don’t use the “Mesh LOD Coloration”. And you’ll need to zoom out to see red. Gray, red, green and blue are LOD’s 0, 1, 2 and 3 respectively with 0 being the highest resolution of your mesh.

I don’t think I said fluid textures. I think I said streaming textures.

About under-optimized, not sure how higher resolution is more cumbersome.

AS for LOD settings, they are under “LOD Distribution”. Use the Landscape LOD Coloration to ensure they are working correctly. You’ll also be able to see how big your components/tiles are.

The pop-in is absolutely NOT normal. Is this continuously happening? Some pop-in if you enter a new region isn’t unusual, but it shouldn’t be too noticeable. But if you rotate the camera and it’s still popping in as you rotate the camera or do minimal movement, then something is wrong. It would mean your RVT isn’t big enough. Or your landscape is too high resolution. Basically, the RVT can’t hold all the tiles at once that are visible. Also check your texture pools didn’t become too small from increasing the tile size. You can type in the console “r.VT.Residency.Show 1” to ensure this hasn’t become an issue.

Now, if the pop-in is on far away tiles, that’s normal. Those are REALLY slow. This is solved with streaming textures. You have to manually build them. 4 to 6 levels should be enough. It’s on your RVT volume.

Hi, could the blocky texture also be due to the brush size? Isn’t it perhaps too small?

I’m not sure if you’re referring to what I have selected in the image with Landscape visibility:

I’ve managed to adjust the Landscape LODs by activating “LOD Coloration” and tweaking the “LOD 0 Screen Size” parameter just as you told me, and I think the current setting adjusts quite well to the character’s distance. However, the character now appears to be slightly inside the landscape::

And yes, the “texture pop in” keeps happening. It’s a bit frustrating, to be honest. Even though I’m doing what you told me about the “Streaming Texture” and building it at 4.

Layer visibility is as indicated in this image. You’ll need to support a mask channel in your RVT and add the Layer Visibility Node in your material. This tool will make part of your landscape invisible.

Here, I made part of my landscape invisible. I left a single pixel’s worth of the visibility channel so you can see the resolution you can expect. And it won’t be that blocky either because the blending channel can have multiple values. So you can have a smooth gradient.

That’s more than slightly. I don’t think I could recreate that even if I tried. Are your collision settings working? This has nothing to do with what you’ve been doing so far. Are you using a virtual height field? If so, that’s a whole other ballgame. You’ll need to turn that off before continuing to fix the other stuff. If you don’t have a virtual height field, then I have no idea what is causing this.

Well, you could try rebuilding landscape under the build menu. You could also rebuild your navmesh if you have one.

I am seeing a lot of detail from your normal map. The detail is looking quite nice so far.

The virtual texture pool for your landscape should be something like DXT5, DXT5. I have masking, so I have DXT5, BC5, DXT5. So I’m guessing you’re using B8G8R8A8 x3 for your landscape. That’s bizarre. I’ve never seen that before. That format is usually only used for UI, but only one of them, not three.

In your console, could you type “r.VT.DumpPoolUsage”, then go at the bottom of your “Output Log” tab (next to the console) and post the output from that command?

Also, could you type “stat memory” in the console and post a screenshot of that? It’ll be in the viewport this time.

edit: “stat streaming” would be good too.

Something very bizarre is going on with your setup. With BRGA8, it’s no wonder you’re getting texture pop-in. You’re using 4x as much memory as you need to and they take 4x as long to load.

Hi, did you mean this with layer visibility?:

Oh! Thank you so much for the detail.

I don’t know why there’s that “B8G8R8A8 x3” thing. I don’t understand what you’re saying… Here’s the screenshot of what you asked me for about “r.VT.PoolUsage”:

And this one about “Stat Memory”:

And if I enter “Stat Streaming,” nothing appears…

And about the “BRGA8,” I don’t know what it is.
Thanks for your help, and best regards!

Yeah, so the blockiness of the visibility layer should be similar to the blockiness of you blending layers. Yours are larger blocks than in my screenshot, but that’s not unusual. My landscape is tiny in my screenshot. With gradient blending, you shouldn’t be getting those blocks. I don’t know what is causing that.

At least the visibility layer should give you an idea the maximum blockiness that you should be getting. In reality, it’s usually MUCH better than that because of gradient blending. And I have to think your issues is with a bad setting with the painting tools.

Your RVT is uncompressed. Can you show a screenshot of your RVT settings? Just double click on the RVT texture.

Your texture pool is 1GB, the default. You can bump that up to 4GB if you want, but you’ll need to edit a config file. From what I’m seeing, your pool size looks fine right now though.

In DefaultEngine.ini, change or add this line in the [/Script/Engine.RendererSettings] section:

[/Script/Engine.RendererSettings]
r.Streaming.PoolSize=4000

To see if you really need to make it larger, you can go in the menu Tools → Audit → Statistics. This will list all textures used by your level (assuming Current Streaming Level is selected on the right). At the top, there are headers. Look for the column header that says “Current Memory” and “Fully Loaded Memory”. You usually need something higher than Current Memory but lower than fully loaded (unless they’re really close). If your pool size is above this, then you should be fine. But the BGR8 encoding is still going to cause you issues.

Textures can be stored in many different formats. The raw uncompressed format is RGBA8 or BGRA8. That’s just plain red, green and blue with alpha. Each of those channels is a byte. So 4 bytes per pixel. However, most video cards support a compressed format. It stores every 4x4 block (512 bits) as 128 bits. So you only need one quarter the memory.

Because it compresses in 4x4 blocks, you want virtual textures to use borders of multiples of 4 for this reason. Virtual textures need to copy borders to allow scaling until the next LOD and blending. You do get some degradation, but it’s usually pretty good quality. The bonus is that you can now store four times as many textures in GPU memory. It loads faster and your pop-ins should be greatly reduced. It also means that the cache and texture pools take four times as long to fill up. DXT1 is the same as DXT5, but no alpha channel and 6:1 compression. BC5 is for normal maps. It only uses two channels. The third channel is computed from the other two. And it compresses 2:1. So not as good, but it means your normal maps look better.

Can you try the menu Build → Build Texture Streaming? And Build Landscape while you’re at it.

If those don’t do anything, I’m at a complete loss as to why your textures are the wrong format.

Can we see your RVT texture settings?

May I ask what your CPU and GPU are?

Something I think I should have asked a while back, do you have more than one sculpt layer? And do you have LayerInfo assets for each Paint layer?

Hi, and what are the correct settings for the painting tool? I have them configured like this:

Here is the RVT screenshot:

So if you’re saying the BGRA8 is having issues, how can I change that texture setting? I looked at the statistics you mentioned, and “Current Memory” shows 46,836 KB, and “Fully Loaded Memory” shows 155,588 KB.

I’ve already built the texture stream, and when I build the Landscape build, I get this message in the console:

image

And my CPU is a Ryzen 5 5900x and my graphics card is an RTX 3070 TI, but I only have one landscape and a few props built, so it shouldn’t be too much of a load.

And by the way, what engine optimization methods do game developers use to achieve the best quality/optimization results?

Thanks and greetings!

Turn on texture compression on your RVT.

Your brush setting are probably fine. You’re gonna get hard edges/transitions with those settings though.

And yeah, your textures are not using much memory at all. So we can rule out texture pools.

The warning is about streaming textures. Those need to be rebuilt every time you change something. I’d turn it off for now. Just remove the texture from the “Streaming Texture” property in your RVT volume. You can re-add it and rebuild it before packaging or once you’re satisfied with your landscape.

Your material should not use alpha blending unless you’re using multiple sculpt layers. You appear to only have one, so your paint layers should be blended together using weight blend.

Maxing out your RVT size should not be necessary. I don’t know how big your landscape is though. But even so, that’s crazy high. 512x512 tiles and 1024x1024 tiles should be enough for most cases. And yes, this will cause the 512 on the debug texture to show up instead of 1024. That’s expected. I have a small landscape and use 256, 256, 4 (8, 2, 2) and it’s WAY more than I need.

In game optimizations… depend on what you’re working on. For meshes, it’s avoiding Nanite. That’s gonna a be huge hit on older cards (and even newer ones). I suppose that is perhaps a controversial opinion considering how much Epic is pushing Nanite. But facts are facts. Nanite is insanely slow. Shadows are a big topic as are distance fields. But more static shadows will reduce processing time. You can also reduce tick events. Clouds casting shadows along with certain fog or volumetric effects can cut your framerate in half or worse. On the flip side, distant fog and volumetric effects can actually help. Depends on how you use them.

There are TONS of buffer views in the viewport to help you see what’s taking time. There’s one for shaders that’s really useful. There’s also a “Trace” button at the bottom right of the editor. You’ll need to watch a tutorial to use it, but it’s very powerful and will let you know exactly where the time is spent in each frame. It’s often difficult to decipher exactly what is causing the bottleneck though. “stat unit” is probably my favorite and simplest performance indicator.

There’s lots of stuff that you can dig into to speed up performance. Lumen and lighting in general is a big one. But once you feel you can’t optimize anymore, there’s a button on the top right of the editor for performance settings. In UE 5.5 and earlier, it was quite hidden. It was in a button in the far right at the top I think. Then it was like two submenus in. On UE 5.6, it’s above the viewport on the right with a speedometer icon. The submenu you want is “Viewport Scalability”. By lowering these one at a time and putting them back and with the FPS being displayed “stat fps”, you can see what affects your performance the most. It could be foliage. It could be drawing too far in the distance. Could be reflections. Could be landscape. They’re all there and it’s a real easy way to see what you should be looking at. And lowering some of those settings for your default game isn’t a bad thing either.

Another thing that affects performance, especially with TAA, is called screen percentage. Most AA solutions are also upscalers. They render at a reduced resolution and scale it up. The screen percentage is how much smaller your render buffer is compared to the final output. So if you have 100% screen percentage, then you’re not doing upscaling at all and your framerate will suffer. The editor tries to use a pre-calculated default. But on ultra widescreen, it’s absolutely terrible at this and is WAY too high. So having an option where the user can lower it is nice to have.

Another thing that can be bad is just bad implementations in your game. I’ve seen people do AIMoveTo every tick. This one is incredibly common. The engine will let you get away with it for a few actors. But if you do this for other things, it can get slow real quick. Updates don’t need to be done every single frame. Timer events are event driven and take almost no processing time.

Then there’s other things like say you tab to another window. Do you know what keeps ticking and what doesn’t? It’s not clear. Certain things will keep ticking in the background. Other things are paused, but the timer keeps going. So when you tab back, the next tick has a HUGE Delay value to catch you back up, but this can break your game easily if you don’t take it into account. Other things do NOT keep the timer going. It is paused and resumes when you tab back. Other things are throttled instead of completely stopping.

Anyways, I’ve rambled long enough. Thought I’d give you some ideas on where to look. Optimizations are what I specialize in outside of games (assembly (SSE, AVX), algorithms, data structures, CUDA, OpenCL, etc.) so I love talking about this stuff. With respect to gaming, the engine isn’t my code, so a bit more difficult to know what’s doing what.

Hi, I’ve enabled texture compression in RVT and it’s noticeably improved texture pop-in.

Yeah, I’ve completely ruled that out. I think Epic is so involved because I honestly believe it’s the future of optimization for upcoming graphics card technology, which will in some ways force a lot of people to upgrade their PCs.

Wow, with everything you’ve told me, I think I can get away with rambling about all that.

So, after all, what could I do to completely remove the “blocky” painting? My Landscape is sized at 249, 249, and 84, which I think is normal, right?

Once again, thank you and I appreciate all the knowledge you’ve shared so far.

I think I had that happen to me a LONG time ago… the blocky painting thing. But I can’t remember what was causing it.

Let me try a new project. I just thought of something. I’ll get back to you.

I created a new project and I only see blockiness if I use a small brush when painting the landscape. From what I’ve read, blending only has one value per vertex. I was wrong earlier when I thought it had the same resolution as the visibility layer (though the two could be per vertex).

Here’s what I get with a small brush (size 100 to 200). Main layer is blue. Painted layer is red.

We can clearly see that it’s per vertex.

Here’s what it looks like with a brush of size 500.

Could you provide a screenshot with Lit Wireframe? An area where there is blockiness?

If you’re drawing per vertex, then you just need to use a bigger brush. I hear that using height blending also works a bit better in some cases. If you have a use case for that, you could do that for those layers.