GLSL角色描边Shader出现异常红线问题求助
GLSL描边着色器异常红色线条问题
我正在制作一款GLSL着色器,目标是为角色渲染红色描边。该着色器可正常运行,但在部分特定角色上会出现不明原因的红色线条,这些线条附近并无实际颜色,我无法解决此问题。
片段着色器代码
uniform mat4 u_Color; varying vec2 v_TexCoord; varying vec2 v_TexCoord2; uniform sampler2D u_Tex0; const float ALPHA_TOLERANCE = 0.01; void main() { vec4 baseColor = texture2D(u_Tex0, v_TexCoord); vec4 texcolor = texture2D(u_Tex0, v_TexCoord2); if(texcolor.r > 0.9) { baseColor *= texcolor.g > 0.9 ? u_Color[0] : u_Color[1]; } else if(texcolor.g > 0.9) { baseColor *= u_Color[2]; } else if(texcolor.b > 0.9) { baseColor *= u_Color[3]; } vec4 pixel1 = texture2D(u_Tex0, vec2(v_TexCoord.x + 0.001, v_TexCoord.y)); vec4 pixel2 = texture2D(u_Tex0, vec2(v_TexCoord.x - 0.001, v_TexCoord.y)); vec4 pixel3 = texture2D(u_Tex0, vec2(v_TexCoord.x, v_TexCoord.y + 0.001)); vec4 pixel4 = texture2D(u_Tex0, vec2(v_TexCoord.x, v_TexCoord.y - 0.001)); bool neighbourColor = pixel4.a > ALPHA_TOLERANCE || pixel3.a > ALPHA_TOLERANCE || pixel2.a > ALPHA_TOLERANCE || pixel1.a > ALPHA_TOLERANCE; if (baseColor.a < ALPHA_TOLERANCE && neighbourColor) { baseColor.rgb = vec3(1.0, 0.0, 0.0); baseColor.a = 0.7; } gl_FragColor = baseColor; if(gl_FragColor.a < 0.01) discard; }
顶点着色器代码
attribute vec2 a_Vertex; attribute vec2 a_TexCoord; uniform mat3 u_TextureMatrix; varying vec2 v_TexCoord; varying vec2 v_TexCoord2; uniform mat3 u_TransformMatrix; uniform mat3 u_ProjectionMatrix; uniform vec2 u_Offset; void main() { gl_Position = vec4((u_ProjectionMatrix * u_TransformMatrix * vec3(a_Vertex.xy, 1.0)).xy, 1.0, 1.0); v_TexCoord = (u_TextureMatrix * vec3(a_TexCoord,1.0)).xy; v_TexCoord2 = (u_TextureMatrix * vec3(a_TexCoord + u_Offset,1.0)).xy; }
着色器工作逻辑:检测当前像素是否透明,若透明则检查相邻像素是否有实际颜色,若是则将当前像素替换为红色。但部分角色上出现了本不该存在的红色线条,这些线条附近并无实际颜色。
内容的提问来源于stack exchange,提问作者Lunia
相关产品推荐
相关产品推荐

