Advertisement
Guest User

Untitled

a guest
Apr 18th, 2018
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #version 450
  2.  
  3. #define NUM_CASCADES 4
  4.  
  5. layout (location = 0) in vec3 inNormal;
  6. layout (location = 1) in float inPosViewZ;
  7. layout (location = 2) in vec3 inPosWorld;
  8.  
  9. layout (location = 0) out vec4 outColor;
  10.  
  11. layout (binding = 1) uniform ShadowData
  12. {
  13.     mat4 cascadeProjs[NUM_CASCADES];
  14.     vec4 cascadeSplits;
  15.     vec3 lightDir;
  16. } shadowData;
  17.  
  18. layout (binding = 2) uniform sampler2DArray shadowMapArray;
  19.  
  20. vec4 color = vec4(1.0, 1.0, 1.0, 1.0);
  21.  
  22. void main()
  23. {
  24.     // Get cascade index for the current fragment's view position
  25.     uint cascadeIndex = 0;
  26.     for(uint i = 0; i < NUM_CASCADES - 1; ++i)
  27.     {
  28.         if(inPosViewZ > shadowData.cascadeSplits[i])
  29.         {
  30.             cascadeIndex = i + 1;
  31.         }
  32.     }
  33.    
  34.     if (cascadeIndex == 0) { color = vec4(1.0, 0.0, 0.0, 1.0); }
  35.     if (cascadeIndex == 1) { color = vec4(0.0, 0.0, 1.0, 1.0); }
  36.     if (cascadeIndex == 2) { color = vec4(0.0, 1.0, 0.0, 1.0); }
  37.     if (cascadeIndex == 3) { color = vec4(1.0, 1.0, 0.0, 1.0); }
  38.    
  39.     vec4 shadowCoord = shadowData.cascadeProjs[cascadeIndex] * vec4(inPosWorld, 1.0);
  40.     shadowCoord.xyz /= shadowCoord.w;
  41.     shadowCoord.xy = shadowCoord.xy * 0.5 + 0.5;
  42.    
  43.     //if (shadowCoord.z > -1.0 && shadowCoord.z < 0.0) { color = vec4(1.0, 0.0, 1.0, 1.0); } // debugging purposes
  44.  
  45.     float shadow = 1.0;
  46.    
  47.     if (shadowCoord.z >= -1.0 && shadowCoord.z <= 1.0
  48.         && shadowCoord.x >= -1.0 && shadowCoord.x <= 1.0
  49.         && shadowCoord.y >= -1.0 && shadowCoord.y <= 1.0 && shadowCoord.w > 0.0
  50.     )
  51.     {
  52.         float shadowDepth = texture(shadowMapArray, vec3(shadowCoord.st, cascadeIndex)).r;
  53.        
  54.         float bias = 0.005;
  55.         if (shadowDepth < shadowCoord.z - bias)
  56.         {
  57.             shadow = 0.3;
  58.         }
  59.     }
  60.    
  61.     vec3 lightDir = normalize(shadowData.lightDir);
  62.     vec3 normal = normalize(inNormal);
  63.     float diffuse = max(dot(-lightDir, normal), 0.3);
  64.    
  65.     outColor = color * diffuse * shadow;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement