29 lines
771 B
GLSL
29 lines
771 B
GLSL
#version 450
|
|
|
|
float ambient = 0.1;
|
|
vec3 light_dir = normalize(vec3(2, 2, -1));
|
|
vec3 base_colour = vec3(1.0, 0.94, 0.8);
|
|
|
|
layout(location = 0) in vec3 frag_normal;
|
|
layout(location = 1) in vec4 light_pos;
|
|
|
|
layout(location = 0) out vec4 out_colour;
|
|
|
|
layout(binding = 2) uniform sampler2DShadow shadow_map;
|
|
|
|
void main()
|
|
{
|
|
const float lambertian = max(dot(frag_normal, light_dir), 0.0);
|
|
|
|
const float shadow_bias = 0.005;
|
|
const vec3 proj_coords = light_pos.xyz / light_pos.w;
|
|
const vec3 shadow_map_pos
|
|
= vec3(0.5 * proj_coords.xy + 0.5, proj_coords.z);
|
|
float shadow = texture(
|
|
shadow_map,
|
|
vec3(shadow_map_pos.xy, shadow_map_pos.z - shadow_bias));
|
|
|
|
const float intensity = min(shadow * lambertian + ambient, 1.0);
|
|
out_colour = vec4(intensity * base_colour, 1.0);
|
|
}
|