Okay, I take my comment regarding specular back. Landscape is too shiny. Even with roughness set to 1 and very rough normal map. Under direct light in the distance surface becomes too reflective, especially on glancing angles. Looks like UE just does not have enough per pixel texture precision for far away pixels. So we need to do a correction. I like how Quixel does it, get albedo and then use it in lerp from min to max specular. Similar to roughness when you don’t use explicit textures.
Quixel
Speaking of Quixel, take a look at their MedievalGameEnvironment project - it is like a treasure chest of techniques and solutions. I have only 16Gb of RAM and could not open it. If you have similar problem, go to the Config/DefaultEngine.ini and change starting map to something light and manageable, like Forge for example.
[/Script/EngineSettings.GameMapsSettings]
EditorStartupMap=/Game/Maps/Forge.Forge
Then you can start exploring all their materials, functions, etc.
RVT
Runtime virtual texture for landscape is pretty cool approach but unfortunately it suffers from tile pop, especially if you have some distance blending in your setup. I could not figure out how to control that. So unless Epic will allow us to force particular tile mips close to camera using RVT sampling for landscape is not practical.
RVT does save 2ms in my very primitive setup. This acts like a top down projection so there potentially could be some stretching on high slopes. But I feel that ditching auto slope and tri-planar is actually not an issue - I prefer to build slopes with cliff geometry anyway since it will look better in the end. You can’t have tessellation with RVT and number of maps is limited. Note that specular/roughness are stored as masks, you can’t pass color information through them. So my attempt to use specular as subsurface failed. In the end you have to apply them regularly which diminishes RVT performance gain. Finally, RVT is camera agnostic so all the CameraDistance logic and such stops working. You do have a workaround, but it is lacking in some areas, especially considering that far mips can pop near the camera. See below sample on how to do distance based blends for RVT.
But while RVT is not practical for sampling in landscape at the moment, it has wonderful use if you still output it. Blending mesh textures with landscape. It is much better approach as all other that include distance fields, TemporalAA dithering, vertex painting, etc. You keep DFAO and shadows and don’t have to do anything special with your mesh.
For this setup I made all my logic in landscape layer blending RVT friendly. Mesh samples RVT base and RVT height, masks and blends accordingly. For normal blending convert landscape normal to worldspace before writing to RVT. In mesh material uncheck tangent normals. I also copied Quixel approach of adding a bit of noise into the blend, looks much better.
Height blend
Another useful technique I borrowed from Quixel materials is height blend. It gives much better results on landscape layer blends. Both weight blended and custom ones like snow. For regular layers you need to output height information. For that just use displacement map. You can pass it around like Quixel does using Opacity pin. See below example of snow layer blended using regular alpha-blend approach:
Now see the same blend using height information:
Here is material function:
Of course UE5 may make all above obsolete but it is a real fun to play around with these. Poking RVT was frustrating at times and it segfaulted more times than I remember but it still amazes me what Epic developers have accomplished with this engine over the years.