Selaa lähdekoodia

Fix SSAO ghosting

Panagiotis Christopoulos Charitos 8 vuotta sitten
vanhempi
sitoutus
12804bcc22
1 muutettua tiedostoa jossa 14 lisäystä ja 5 poistoa
  1. 14 5
      shaders/Ssao.frag.glsl

+ 14 - 5
shaders/Ssao.frag.glsl

@@ -82,14 +82,23 @@ void main(void)
 
 
 	vec3 normal = readNormal(in_uv);
 	vec3 normal = readNormal(in_uv);
 
 
-	// Get prev SSAO
-	vec4 clip = u_prevViewProjMatMulInvViewProjMat * vec4(vec3(ndc, UV_TO_NDC(depth)), 1.0);
-	vec2 oldUv = NDC_TO_UV(clip.xy / clip.w);
-	float prevSsao = textureLod(u_prevSsaoRt, oldUv, 0.0).r;
-
 	// Get rand factors
 	// Get rand factors
 	vec3 randFactors = readRandom(in_uv);
 	vec3 randFactors = readRandom(in_uv);
 
 
+	// Get prev SSAO
+	vec4 clip = u_prevViewProjMatMulInvViewProjMat * vec4(vec3(ndc, UV_TO_NDC(depth)), 1.0);
+	clip.xy /= clip.w;
+	float prevSsao;
+	if(any(greaterThan(abs(clip.xy), vec2(1.0))))
+	{
+		prevSsao = 1.0;
+	}
+	else
+	{
+		vec2 oldUv = NDC_TO_UV(clip.xy);
+		prevSsao = textureLod(u_prevSsaoRt, oldUv, 0.0).r;
+	}
+
 	// Find the projected radius
 	// Find the projected radius
 	vec3 sphereLimit = origin + vec3(RADIUS, 0.0, 0.0);
 	vec3 sphereLimit = origin + vec3(RADIUS, 0.0, 0.0);
 	vec4 projSphereLimit = project(vec4(sphereLimit, 1.0));
 	vec4 projSphereLimit = project(vec4(sphereLimit, 1.0));