2
0
Эх сурвалжийг харах

Blur : Improved depth-dependant blur

TothBenoit 1 жил өмнө
parent
commit
6bd1b7e77d
1 өөрчлөгдсөн 8 нэмэгдсэн , 10 устгасан
  1. 8 10
      h3d/shader/Blur.hx

+ 8 - 10
h3d/shader/Blur.hx

@@ -4,7 +4,9 @@ class Blur extends ScreenShader {
 
 	static var SRC = {
 
-		@param var cameraInverseViewProj : Mat4;
+		@global var camera : {
+			var inverseViewProj : Mat4;
+		};
 
 		@param var texture : Sampler2D;
 		@param var depthTexture : Sampler2D;
@@ -19,8 +21,7 @@ class Blur extends ScreenShader {
 		@param var fixedColor : Vec4;
 
 		@param @const var isDepthDependant : Bool;
-		@param @const var hasNormal : Bool;
-		@param var normalTexture : Sampler2D;
+		@param var depthThreshold : Float = 1.0;
 
 		@param @const var isCube : Bool;
 		@param var cubeTexture : SamplerCube;
@@ -31,16 +32,13 @@ class Blur extends ScreenShader {
 				var pcur = getPosition(input.uv);
 				var ccur = texture.get(input.uv);
 				var color = vec4(0, 0, 0, 0);
-				var ncur = unpackNormal(normalTexture.get(input.uv));
 				@unroll for( i in -Quality + 1...Quality ) {
-					var uv = input.uv + pixel * offsets[i < 0 ? -i : i];
+					var uv = input.uv + pixel * offsets[i < 0 ? -i : i] * i;
 					var c = texture.get(uv);
 					var p = getPosition(uv);
-					var d = (p - pcur).dot(p - pcur);
-					var n = unpackNormal(normalTexture.get(uv));
+					var d = abs(pcur.z - p.z); 
 
-					c = mix(ccur, c, ncur.dot(n));
-					c = mix(c, ccur, ((d - 0.001).max(0.) * 100000).min(1.));
+					c = ( d > depthThreshold ) ? ccur : c;
 					color += c * values[i < 0 ? -i : i];
 				}
 				pixelColor = color;
@@ -71,7 +69,7 @@ class Blur extends ScreenShader {
 
 		function getPosition( uv : Vec2 ) : Vec3 {
 			var depth = unpack(depthTexture.get(uv));
-			var temp = vec4(uvToScreen(uv), depth, 1) * cameraInverseViewProj;
+			var temp = vec4(uvToScreen(uv), depth, 1) * camera.inverseViewProj;
 			var originWS = temp.xyz / temp.w;
 			return originWS;
 		}