Ты что то типа этого замутить пытался?
uniform sampler2D texture0;
uniform sampler2D texture1;
uniform sampler2D texture2;
uniform sampler2D texture3;
in vec3 fragmentn;
in vec2 fragmentuv;
in vec3 lightvec;
out vec4 color;
void main(void) {
float diff = dot(fragmentn,normalize(lightvec));
//получаю отклонение нормали от вертикали
float v_diff = dot(fragmentn, vec3 (0.0f,1.0f,0.0f));
//...
float disp=0.0f;
vec4 diffuse;
vec4 diffuse1;
vec4 diffuse2;
if(v_diff>0.95){diffuse = texture(texture0,fragmentuv);}
if(v_diff>0.91 && v_diff<=0.95){
diffuse2 = texture(texture1,fragmentuv);
diffuse1 = texture(texture0,fragmentuv);
diffuse=mix(diffuse1,diffuse2,25*(0.95-v_diff));}
//если местность имеет небольшой уклон
if(v_diff>0.88 && v_diff<=0.91){diffuse = texture(texture1,fragmentuv);}
if(v_diff>0.84 && v_diff<=0.88){
diffuse2 = texture(texture2,fragmentuv);
diffuse1 = texture(texture1,fragmentuv);
diffuse=mix(diffuse1,diffuse2,25*(0.88-v_diff));}
//если местность имеет большой уклон
if(v_diff>0.79 && v_diff<=0.84){diffuse = texture(texture2,fragmentuv);}
if(v_diff>0.75 && v_diff<=0.79){
diffuse2 = texture(texture3,fragmentuv);
diffuse1 = texture(texture2,fragmentuv);
diffuse=mix(diffuse1,diffuse2,25*(0.79-v_diff));}
//если местность имеет пипец большой уклон
if(v_diff<=0.75){diffuse = texture(texture3,fragmentuv);}
color = diffuse*diff;
}