Here's a useful technique to bring UE's automatic landscape grass instancing to the next level. Files are available as a Tier 1 reward on my Patreon: https://www.patreon.com/GhislainGir
Tutorial/breakdown of the technique
Without & with the technique applied.
Quick demo.
Height of the grass mesh is baked into UVs before being flattened. The UV vertical axis is only needed here so the horizontal axis is free to use. Here I store a random value per grass blade by shifting sideways each uv island randomly.
Grass XY pivots are also baked into another UV map so each grass blade can be scaled individually in engine using a World Position Offset.
This is what the grass mesh looks like once imported into the Engine.
The landscape material writes the grass paint layer used to automatically spawn grass instances into the 'Mask' output of a virtual texture.
That virtual texture needs to be setup this way for that 'Mask' pin to be able to store any value.
The grass material samples the landscape's virtual texture to get access to the paint layer and scale its height and width accordingly. The less that grass landscape layer is painted, the smaller/thinner they'll look.
The result: grass gets taller and thicker the more that grass layer is painted onto the landscape.
Without. Notice how obvious it is that the same grass mesh is spawned randomly across the landscape and how uniform and boring it looks.