40 lines
876 B
Plaintext
40 lines
876 B
Plaintext
|
shader_type spatial;
|
||
|
|
||
|
uniform float slope_factor = 8.0;
|
||
|
uniform float blend_value = 0.5;
|
||
|
|
||
|
uniform sampler2D light_map;
|
||
|
|
||
|
uniform sampler2D grass_tex;
|
||
|
uniform vec2 grass_scale;
|
||
|
|
||
|
uniform sampler2D dirt_tex;
|
||
|
uniform vec2 dirt_scale;
|
||
|
|
||
|
varying float height_val;
|
||
|
varying vec3 normal;
|
||
|
|
||
|
void vertex(){
|
||
|
height_val = VERTEX.y;
|
||
|
normal = NORMAL;
|
||
|
}
|
||
|
|
||
|
float get_slope_of_terrain(float height_normal){
|
||
|
float slope = 1.0-height_normal;
|
||
|
slope *= slope;
|
||
|
return (slope*slope_factor);
|
||
|
}
|
||
|
|
||
|
void fragment(){
|
||
|
vec3 dirt = vec3(texture(dirt_tex, UV*dirt_scale).rgb);
|
||
|
vec3 grass = vec3(texture(grass_tex, UV*grass_scale).rgb);
|
||
|
|
||
|
float slope = clamp(get_slope_of_terrain(normal.y), 0.0, 1.0);
|
||
|
|
||
|
vec3 mixin = mix(grass, dirt, slope);
|
||
|
vec3 lightmap = vec3(texture(light_map, UV).rgb)*0.5;
|
||
|
vec3 final_mix = mix(lightmap, mixin, vec3(blend_value, blend_value, blend_value));
|
||
|
|
||
|
ALBEDO = final_mix;
|
||
|
}
|