-
Notifications
You must be signed in to change notification settings - Fork 4
/
level.gdshader
39 lines (31 loc) · 1.22 KB
/
level.gdshader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
shader_type spatial;
render_mode specular_toon;
uniform sampler2D roads;
uniform vec4 road_color: source_color;
uniform float extra_shading = 0.0;
void fragment() {
vec3 up = vec3(0.0, 1.0, 0.0);
vec4 rock = vec4(0.240000, 0.220000, 0.220000, 1.0);
vec4 sand = vec4(0.800000, 0.712400, 0.216000, 1.0);
vec4 grass = vec4(0.000000, 0.164706, 0.011765, 1.000000);
vec3 world_vert = (INV_VIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
float rock_weight = clamp(sqrt(dot(up, (vec4(NORMAL, 1.0) * VIEW_MATRIX).xyz)) - clamp((world_vert.y - 14.0) / 50.0, 0.0, 1.0), 0.0, 1.0);
float grass_to_sand = sin(world_vert.x / 17.0) * sin(world_vert.z / 20.0) * 2.0 + world_vert.y - 2.0;
float grass_blend = (sign(grass_to_sand) + 1.0) / 2.0;
vec3 surface = mix(sand.xyz, grass.xyz, grass_blend);
if(abs(rock_weight - 0.5) < 0.303)
{
ALBEDO = mix(rock.xyz, surface, round(rock_weight * 3.0) / 3.0);
}
else if(rock_weight < 0.5)
{
ALBEDO = rock.xyz;
}
else
{
ALBEDO = surface;
}
ALBEDO = mix(ALBEDO, road_color.rgb, (1.0 - texture(roads, UV).g) * road_color.a);
ROUGHNESS = 0.9;
ALBEDO.rgb = mix(ALBEDO.rgb, vec3(0.0), clamp((1.0 - abs(dot((INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).rgb, vec3(0.0, 1.0, 0.0)))) * extra_shading, 0.0, 0.25));
}