oopss didn’t pay much attention to it before but your blendfunc is backwards.
you should have
blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
( which is basically just blendFunc blend) in stead of what you have. Right now you’re using GL_ONE_MINUS_SRC_ALPHA for the grass texture which is basically 1, so your grass never fades.
This should give you the result you’re looking for.
Anyway i recommend you still change all your scale commands to set in the alphamod shaders because i’ve had some inconsistent results with scale.
Also you’re not using non-linear blending in your example. Non linear blending involves the use of dotproduct2 in your shader which calculates the vertex alphas based on the square(hence non-linear) of the dotproduct of your vertex normals and the vector parameter passed. I recomend you use dotproduct2 blending in your shader as it’s ideally suited for this kind of organic texture blending and it will give you excellent and very natrual distribution of your grass over the dirt.