| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | 
							- #version 430
 
- layout (binding = 0) uniform sampler2D worldPositionSamp;
 
- layout (binding = 1) uniform sampler2D worldNormalSamp;
 
- layout (binding = 2) uniform sampler2D worldColorSamp;
 
- layout (binding = 3) uniform sampler2D worldDepthSamp;
 
- layout (binding = 4) uniform sampler2D ssaoNoise;
 
- const int numberOfSamples = 32;
 
- const vec3 ssaoKernel[32] =
 
- {
 
-     vec3( 0.001,  0.000, -0.000), vec3(-0.002,  0.002, -0.003), vec3( 0.004, -0.007,  0.002), vec3(-0.002,  0.012,  0.010), 
 
-     vec3(-0.012,  0.018, -0.011), vec3(-0.013,  0.023, -0.023), vec3(-0.005, -0.021,  0.043), vec3( 0.034, -0.039,  0.034), 
 
-     vec3(-0.063, -0.040,  0.027), vec3( 0.095, -0.025, -0.001), vec3( 0.048, -0.089,  0.062), vec3(-0.084,  0.041, -0.105), 
 
-     vec3(-0.148, -0.047, -0.056), vec3(-0.039,  0.026, -0.186), vec3(-0.161,  0.065, -0.135), vec3(-0.203,  0.123, -0.079), 
 
-     vec3( 0.216,  0.091, -0.157), vec3( 0.066,  0.305, -0.051), vec3(-0.084, -0.332,  0.083), vec3(-0.050,  0.351, -0.165), 
 
-     vec3(-0.330,  0.127, -0.245), vec3(-0.020,  0.319,  0.348), vec3(-0.396,  0.281, -0.178), vec3(-0.376, -0.413, -0.069), 
 
-     vec3( 0.510,  0.153, -0.298), vec3(-0.451, -0.476, -0.074), vec3(-0.596, -0.302,  0.245), vec3( 0.311, -0.490, -0.499), 
 
-     vec3(-0.439,  0.464,  0.517), vec3( 0.397, -0.557,  0.551), vec3( 0.632, -0.677,  0.151), vec3( 0.574, -0.246,  0.781)
 
- };
 
- uniform mat4 proj;
 
- uniform mat4 view;
 
- uniform int width;
 
- uniform int height;
 
- const float radius = 0.25;
 
- in vec2 varTex;
 
- out float color;
 
- void main()
 
- {     
 
-     vec3 fragPos = texture(worldPositionSamp, varTex).xyz;
 
-     vec3 random = texture(ssaoNoise, varTex * vec2(width * 0.25, height * 0.25)).xyz * radius * 0.5; 
 
-     float occlusion = 0.0;
 
-     for(int i = 0; i < numberOfSamples; i++)
 
-     {
 
-         vec4 projFragPos = proj * vec4(fragPos + ssaoKernel[i] * radius + random, 1.0);
 
-         projFragPos.xyz /= projFragPos.w;
 
-         projFragPos.xyz = projFragPos.xyz * 0.5 + 0.5;
 
-         float depth1 = texture(worldDepthSamp, projFragPos.xy).x;
 
-         float depth2 = projFragPos.z;
 
-         float rangeCheck = float(abs(depth2 - depth1) < radius);
 
-         occlusion += float(depth2 > depth1) * rangeCheck;
 
-     }
 
-     color = 1 - occlusion / numberOfSamples;
 
- } 
 
 
  |