浏览代码

FXAAShader: Interpolate alpha too. See #4287.

Mr.doob 11 年之前
父节点
当前提交
ad326202b0
共有 1 个文件被更改,包括 9 次插入16 次删除
  1. 9 16
      examples/js/shaders/FXAAShader.js

+ 9 - 16
examples/js/shaders/FXAAShader.js

@@ -49,8 +49,6 @@ THREE.FXAAShader = {
 			"vec3 rgbSE = texture2D( tDiffuse, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ).xyz;",
 			"vec3 rgbSE = texture2D( tDiffuse, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ).xyz;",
 			"vec4 rgbaM  = texture2D( tDiffuse,  gl_FragCoord.xy  * resolution );",
 			"vec4 rgbaM  = texture2D( tDiffuse,  gl_FragCoord.xy  * resolution );",
 			"vec3 rgbM  = rgbaM.xyz;",
 			"vec3 rgbM  = rgbaM.xyz;",
-			"float opacity  = rgbaM.w;",
-
 			"vec3 luma = vec3( 0.299, 0.587, 0.114 );",
 			"vec3 luma = vec3( 0.299, 0.587, 0.114 );",
 
 
 			"float lumaNW = dot( rgbNW, luma );",
 			"float lumaNW = dot( rgbNW, luma );",
@@ -71,25 +69,20 @@ THREE.FXAAShader = {
 			"dir = min( vec2( FXAA_SPAN_MAX,  FXAA_SPAN_MAX),",
 			"dir = min( vec2( FXAA_SPAN_MAX,  FXAA_SPAN_MAX),",
 				  "max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),",
 				  "max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),",
 						"dir * rcpDirMin)) * resolution;",
 						"dir * rcpDirMin)) * resolution;",
-
-			"vec3 rgbA = texture2D( tDiffuse, gl_FragCoord.xy  * resolution + dir * ( 1.0 / 3.0 - 0.5 ) ).xyz;",
-			"rgbA += texture2D( tDiffuse, gl_FragCoord.xy  * resolution + dir * ( 2.0 / 3.0 - 0.5 ) ).xyz;",
-			"rgbA *= 0.5;",
-
-			"vec3 rgbB = texture2D( tDiffuse, gl_FragCoord.xy  * resolution + dir * -0.5 ).xyz;",
-			"rgbB += texture2D( tDiffuse, gl_FragCoord.xy  * resolution + dir * 0.5 ).xyz;",
-			"rgbB *= 0.25;",
-			"rgbB += rgbA * 0.5;",
-
-			"float lumaB = dot( rgbB, luma );",
+			"vec4 rgbA = (1.0/2.0) * (",
+        	"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (1.0/3.0 - 0.5)) +",
+			"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (2.0/3.0 - 0.5)));",
+    		"vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (",
+			"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (0.0/3.0 - 0.5)) +",
+      		"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (3.0/3.0 - 0.5)));",
+    		"float lumaB = dot(rgbB, vec4(luma, 0.0));",
 
 
 			"if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) ) {",
 			"if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) ) {",
 
 
-				"gl_FragColor = vec4( rgbA, opacity );",
+				"gl_FragColor = rgbA;",
 
 
 			"} else {",
 			"} else {",
-
-				"gl_FragColor = vec4( rgbB, opacity );",
+				"gl_FragColor = rgbB;",
 
 
 			"}",
 			"}",