Implement shadow sampling in fragment shader
This commit is contained in:
1 parent
a73975a766
commit
070758b6cc
1 file changed
+12
-3
+12
-3
@@ -1,6 +1,6 @@
|
|||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
float ambient = 0.05;
|
float ambient = 0.1;
|
||||||
vec3 light_dir = normalize(vec3(2, 2, -1));
|
vec3 light_dir = normalize(vec3(2, 2, -1));
|
||||||
vec3 base_colour = vec3(1.0, 0.94, 0.8);
|
vec3 base_colour = vec3(1.0, 0.94, 0.8);
|
||||||
|
|
||||||
@@ -13,7 +13,16 @@ layout(binding = 2) uniform sampler2DShadow shadow_map;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
float lambertian = max(dot(frag_normal, light_dir), 0.0);
|
const float lambertian = max(dot(frag_normal, light_dir), 0.0);
|
||||||
float intensity = min(lambertian + ambient, 1.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);
|
out_colour = vec4(intensity * base_colour, 1.0);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user