This commit is contained in:
Brandon Mak 2022-11-01 02:32:14 +08:00
parent 53b9c8f746
commit 54a36e1476
4 changed files with 11 additions and 8 deletions

View File

@ -55,7 +55,7 @@ void main()
vec3 positionView = imageLoad (positions, globalThread).rgb; vec3 positionView = imageLoad (positions, globalThread).rgb;
// normal of fragment // normal of fragment
vec3 normalView = imageLoad(normals, globalThread).rgb; vec3 normalView = -imageLoad(normals, globalThread).rgb;
vec3 fragColor = vec3 (0.0f); vec3 fragColor = vec3 (0.0f);
@ -79,6 +79,7 @@ void main()
} }
// store result into result image // store result into result image
//imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(normalView, 1.0f));
//imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f)); //imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(fragColor, 1.0f));
imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgb, 1.0f)); imageStore(targetImage, ivec2(gl_GlobalInvocationID.xy), vec4(imageLoad(ssaoImage, globalThread).rgb, 1.0f));

View File

@ -7,7 +7,7 @@ const int ROTATION_KERNEL_H = 4;
// can perhaps pass in as push constant. // can perhaps pass in as push constant.
const float RADIUS = 0.5f; const float RADIUS = 0.5f;
const float BIAS = 0.025f; const float BIAS = 0.005f;
layout(local_size_x = 16, local_size_y = 16) in; layout(local_size_x = 16, local_size_y = 16) in;
layout(set = 4, binding = 0, rgba32f) uniform image2D positions; layout(set = 4, binding = 0, rgba32f) uniform image2D positions;
@ -43,19 +43,20 @@ void main()
// load all the necessary variables // load all the necessary variables
vec3 viewSpacePos = imageLoad (positions, globalThread).rgb; vec3 viewSpacePos = imageLoad (positions, globalThread).rgb;
vec3 viewSpaceNormal = normalize (imageLoad (normals, globalThread).rgb); vec3 viewSpaceNormal = normalize (imageLoad (normals, globalThread).rgb);
viewSpaceNormal = -viewSpaceNormal;
ivec2 noiseDim = textureSize(noiseTexture, 0); ivec2 noiseDim = textureSize(noiseTexture, 0);
vec2 threadUV = globalThread / size; vec2 threadUV = (vec2(globalThread) + vec2 (0.5f)) / vec2(size);
vec2 noiseUV = vec2 (float(size.x)/float(noiseDim.x), float(size.y) / float(noiseDim.y)); vec2 noiseUVMult = vec2 (float(size.x)/float(noiseDim.x), float(size.y) / float(noiseDim.y));
noiseUV *= threadUV; noiseUVMult *= threadUV;
vec3 randomVec = texture(noiseTexture, noiseUV).rgb * 2.0f - 1.0f; vec3 randomVec = texture(noiseTexture, noiseUVMult).rgb * 2.0f - 1.0f;
// Gram schmidt // Gram schmidt
vec3 tangent = normalize (randomVec - (viewSpaceNormal * dot(viewSpaceNormal, randomVec))); vec3 tangent = normalize (randomVec - (viewSpaceNormal * dot(viewSpaceNormal, randomVec)));
vec3 bitangent = cross (tangent, viewSpaceNormal); vec3 bitangent = cross (viewSpaceNormal, tangent);
// matrix for tangent to view // matrix for tangent to view
mat3 TBN = mat3 (tangent, bitangent, viewSpaceNormal); mat3 TBN = mat3(tangent, bitangent, viewSpaceNormal);
float occlusion = 0.0f; float occlusion = 0.0f;
for (int i = 0; i < NUM_SAMPLES; ++i) for (int i = 0; i < NUM_SAMPLES; ++i)
@ -74,6 +75,7 @@ void main()
// and bring it from [-1, 1] to screen coordinates // and bring it from [-1, 1] to screen coordinates
offsetPos.xyz = ((offsetPos.xyz * 0.5f) + 0.5f); offsetPos.xyz = ((offsetPos.xyz * 0.5f) + 0.5f);
offsetPos.xy *= vec2(size.xy); offsetPos.xy *= vec2(size.xy);
//offsetPos.y = size.y - offsetPos.y;
float sampleDepth = imageLoad (positions, ivec2 (offsetPos.xy)).z; float sampleDepth = imageLoad (positions, ivec2 (offsetPos.xy)).z;

Binary file not shown.