I see the Grass only in a Round Area from the Player

I was using a single rendered image at 2k res for the distance area. Aligned to landscape on a map less then 1km.
after that wasent as performant as I need I just swapped the landscape material and acrually paint grass types on each other carefully. I have a no procedurals layer that is always subtracted from all the grass nodes making it possible to remove them from an area as well (good for clearing up around rocks or changes in vegetation).
My non optimized mesh performs poorly but looks good. The grass shader is full of things like normal wind (looks like the grass moves in distance but the color just shifts around because of the normal map in use). For all intensive purposes I guess it runs OK. Just cant expect the full scene with a lot of trees and other plants to run 60fps at 4k.
For several reasons I’m optimizing slowly (one being double material slot on tree instances, before the impostor).

I’m also starting to think the size of my map and number of components may be an issue - I tested different options, all of them seem pretty equal, even non suggested sizes.
In the process I found that world composition makes render times slightly worse - on the exact same map size (only one tile loaded) vs loading just the map manually.

I am now (I was before too, but I hadn’t played RDR2 before xmas, so I always kind of assumed some popping was acceptable) attempting to essentially create a similar environment to red dead 2 in terms of grass and non-popping lods.
The meshes with single grass blades outperform the full on grass mesh by a lot - with the same material on them.
they are however sized a bit different. 2mx2m, 1mx1m and 25cmx25cm. I paint the 1m and 25cm manually where the 2m pops out of the landscape due to angle.
So far no LODs, and with just landscape and grass around 90fps at 4k.

Re
The best way to change the grass material without having to make a mess is to use a material parameter collection.
I use that already for 3 things, seasonal coloring, wind, and passing in the actor location.
To swap a texture I would use a render target and update the image by writing a different texture to it based on some distance logic.
it’s not rendered or captured so the cost for writing to it just once is fairly low.