Didnt get notified of your reply so this is mostly for other people looking things over.
The object position I was speaking of is the Landscape.
Absolute world position doesn’t tell you anything useful since its just the value you read of the specific pixel (or vert) being rendered.
Just guessing here - if you implemented any material stuff to help rendering, fhats why.
You have various improvments possible. From adjuating the distance to set fade in/fade out amounts to the more performant “moving grass under the landacape using vertex shader based on camera distance”.
Going back to basics.
The issue is that you want the engine shaders to magically waste resources to compute things per pixel but the fact you have a landscape on top of another is obviously hindering whatever WPO based math the shader is told to run with.
Removing that alltogeter, producing a slope map, then filtering the result of that slope map by WPO will get you to reduce GPU/CPU costs while enabling you to render grass where it needs rendering.
Running the slope map + math within the grass shader and disabling grass alltogether (opacity 0) based on the overall WPO height also becomes possible, enabling you to further customize the look and feel, or avoid grass showing up on snow areas without necessarily having to paint specific snow layers.