So as far as 4k textures, unless you are on a very large screen, very close, you will likely not notice a difference between 4k and 2k. Visual Tech Art has a video on this:
For reference, I work off a 44inch HD TV that sits about 4’ from my eyes (I know…) and I can BARELY tell when I go to 4k. Between the untiling functions to mix-match and the idea that my texture are somewhat scaled down (tiled across a smaller linear distance in worldspace) you just can’t see the difference unless you are looking for it. As it is, I have to lean-in to see and when I sit back at a playable distance, it’s a non-issue.
The idea here is texels, how much worldspace/screenspace does a single pixel of that texture occupy? If you scale the texture up to cover a larger area, then you need more details to cover that area, otherwise if you scale it down then it tiles more, but each pixel in the texture occupies less space on screen, so you cannot see that it’s 2k, 4k, etc. Heck I can go to 1k and see a bit of a difference but it’s not game breaking.
You also get a performance boost from using smaller textures since there are less bits to load into the card, shuffle-around, etc.
My suggestion is to work natively with 4k and then use either max-texture-size in the texture-properties in the unreal content-browser or use an LOD-bias in the material itself. LOD-bias would be preferred as that is something you can change on the fly. As well since the source-textures are 4k, you can always go back to ‘full resolution’ and you don’t lock yourself to just-2k.
WRT Nanite and the vertex-shader, if you are using the maths wisely, you should still come out ahead if you load up some things into the vertex-shader. It’s almost always a good thing and since nanite creatively destroys the mesh vs prebuilt LODs, that at-a-distance caveat with the 1pixel mesh is less-impactful in that particular regard. Nanite will still 3x the cost but the way it simplifies should end up with less-vertices than what you might get with a hand-made LOD at that distance. So, ‘yes’ you should still do it, but be aware there might be use-cases where you come out behind is all.
The quality of things would be the same paradigm as regular meshes: values on the vertices will be interpolated across vertices and if sampled in the pixel-shader, be beholden to that behavior. Nanite wouldn’t change this, it’s more fundamental to the multiple passes in the display-layer.
As for arrays, they work the same as ‘regular’ textures in that you still need an UVs (XY coordinates) but they also append a 3rd value (the Z) which is what slot in the array you are looking at. So you could load up 50 textures into that array and the maths you make come up with whatever UVs you need to mix/match, untile, etc, that wouldn’t change from the single-texture use-case. But then you just append that 3rd value to say which texture in particular you want the XY coordinates to apply to.
In my case I opted to use UDIMs instead as they are virtual-textures which offer some performance benefits, but also the way they are addressed, I can put ALL my textures into one big lookup table and go from there. ref: Streaming Virtual Texturing in Unreal Engine | Unreal Engine 5.5 Documentation | Epic Developer Community
For my landscape material I worked off BananableOffense’s tutorial and tried both Texture Arrays and UDIMs. They both work fine, just some slight adjustment in how to calculate the UVs, but the UDIMs do seem to offer a distinct performance benefit since they stream in.
Lastly, for your distance stuffs, that wouldn’t change either, you can still do what you already do, but with my particular untiling solution you don’t seem to really need distance textures. There is really no tiling up close, and the distance takes care of itself, comes out in the wash as it were.
EDIT: you’ll want something that basically follows this form:
picoritdidnthappen
EDIT2: the solution works well on nanite, but its not cheap. However, texture samples are very low, 20ish for the entire thing which includes puddles, animated raindrops (flipbook layer), snow, water, ice, as well as physics and grass-logic. Also includes a few misc features (glints on snow/ice, etc). Alex’s video is what really brings the number of texture samples down, so much-much credit to him he literally helped me make my world work.
THIS guy was my first video, and he’s got a great 4part series, but the puddles I found most useful: