diff --git a/Enthusiast/BreathOfTheWild_2880p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Enthusiast/BreathOfTheWild_2880p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Enthusiast/BreathOfTheWild_2880p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Enthusiast/BreathOfTheWild_2880p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Enthusiast/BreathOfTheWild_4320p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Enthusiast/BreathOfTheWild_4320p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Enthusiast/BreathOfTheWild_4320p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Enthusiast/BreathOfTheWild_4320p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Enthusiast/BreathOfTheWild_5760p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Enthusiast/BreathOfTheWild_5760p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Enthusiast/BreathOfTheWild_5760p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Enthusiast/BreathOfTheWild_5760p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_1080p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_1080p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_1080p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_1080p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_1080pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_1080pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_1080pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_1080pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_1440p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_1440p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_1440p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_1440p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_1440pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_1440pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_1440pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_1440pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_1800p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_1800p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_1800p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_1800p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_2160p/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_2160p/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_2160p/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_2160p/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+
diff --git a/Quality/BreathOfTheWild_2160pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt b/Quality/BreathOfTheWild_2160pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
index 74502800..328aa41b 100644
--- a/Quality/BreathOfTheWild_2160pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
+++ b/Quality/BreathOfTheWild_2160pUW/cb0e6e8cbec4502a_0000000000000079_ps.txt
@@ -23,16 +23,15 @@ ivec2 ires = textureSize(textureUnitPS0,0);
 vec2 res = vec2( float(ires.x), float(ires.y) );
 int r = int(floor(2.0 / uf_fragCoordScale.y + 0.5));
 vec4 R1f = vec4(0.0);
-for (int i=0; i<r; i++) {
-	float m = (1-r)/2 + float(i);
-	for (int k=0; k<r; k++){
-		float n = (1-r)/2 + float(k);
-		R1f += texture( textureUnitPS0, R0f+ vec2(m,n) * 2.0 /res )/(pow(r,2)-4); //assume 2px offset as well
+float count = 0.0;
+for( int x=-r; x<=r; x++ ) {
+	for( int y=-r; y<=r; y++ ) {
+		if( pow(x,2) + pow(y,2) <= pow(r,2) ) {
+			R1f += texture( textureUnitPS0, R0f + vec2(x,y)/res );
+			count += 1.0;
+			}
 		}
 	}
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((1-r)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(1-r)/2) * 2.0 /res )/(pow(r,2)-4);
-R1f -= texture( textureUnitPS0, R0f+ vec2((r-1)/2,(r-1)/2) * 2.0 /res )/(pow(r,2)-4); //workaround, less like a square, needs proper bokeh
-passPixelColor0 = R1f;
+passPixelColor0 = R1f/count;
 }
+