- Home /
Pixelartifacts on edges when activating Antialiasing...
Hi,
ive already sent a bug report to unity but unfortunately ive no response yet. I get artifacts when activating AA in my scene (editorview, webplayer, standalone).
Theres a mesh with a reflective/specular shader with a cubemap and i get this white pixels on pc and mac, too. (latest display driver, different machines).
Does anybody have the same problems? Any ideas on that? Would be great. Thanks a lot.
I also get these annoying artifacts. Would be nice to see this one solved!
If you were to use another shader, would the white glitches be removed? Is that black border running behind the reflective material? Would it help if it did? (I'm thinking the AA might cause a small gap between the black frame and your reflective shader)
I can make this happen with a non reflective specular shader as well. Right on the border between edges of same object. Both black and white, seems to go to nearest polar of white or black.
I got this too, didn't knew it's only with combination of AA and specular
Answer by -chris · Aug 21, 2012 at 08:18 AM
The built-in specular shader is the culprit. To remove the white artifacts, add `o.Normal = fixed3(0,0,1);` after `o.Specular = _Shininess;` in the `surf` function from the built-in specular shader. This line is omitted due to performance reasons apparently. (discussions here and here)
The shader code below is for plain ol' Specular, from the "Normal-Glossy.shader" file from http://unity3d.com/support/resources/assets/built-in-shaders.html, but with the added fix:
Shader "Specular (Fixed)" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
_Shininess ("Shininess", Range (0.01, 1)) = 0.078125
_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 300
CGPROGRAM
#pragma surface surf BlinnPhong
sampler2D _MainTex;
fixed4 _Color;
half _Shininess;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = tex.rgb * _Color.rgb;
o.Gloss = tex.a;
o.Alpha = tex.a * _Color.a;
o.Specular = _Shininess;
o.Normal = fixed3(0,0,1);
}
ENDCG
}
Fallback "VertexLit"
}
As for the Reflective/Specular shader, adding `o.Normal = fixed3(0,0,1);` gives a compiler error.
It's also been suggested to use Bumped Specular (maybe with Reflective too?) with a flat normalmap to fix the white artifacts.
If you have to add a "rule" to the shader, I can't agree the culprit is the shader. That, to me, says you can fix the problem in the shader and it's probably the easier place to fix it for us - mortal unity developers. Having said that, I tried both suggestions and both work great! Hope this answer gets accepted eventually. :-)
Actually, I noticed now, only the second suggestion (about using Bumped Specular) worked great. The first (and main one, on modifying the shader) one seem to work at first, but later I can notice the hack and the artifacts are still there. So, not so good.
Answer by synapsemassage · Mar 29, 2011 at 08:22 PM
Take a look at this post http://forum.unity3d.com/threads/83260-Unity-3.3-MSAA-and-particles...
Answer by cregox · Apr 11, 2012 at 02:03 PM
I can't reproduce this. Maybe it has been resolved... Even though I couldn't find any mention about this on the release notes since 2.6, except for a brief worrying on 3.2.
Or, most likely, it's an artifact from your specific scene set up, generated because our current algorithms just can't handle everything, specially under OpenGL ES 2.0, like Mr Statement grasped on the comments.
Unfortunately it still happens (as we speak). The specific scene set up being a character mesh with a Specular shader, a directional light and a regular camera. See http://orion5.net/images/white_pixel_artifact.png for an example. It's embarassing to show to people. Custom shaders from 3rd parties (e.g. skin shaders and the like) seem to solve it, so it's definitely the shader and it's definitely anti-aliasing (turning it off will remove the artifacts).
@Orion complex problems are usually a combination of many things and then removing 1 factor that triggers it may seem to resolve. But thanks for the hint, at least I can reproduce it now...
Answer by marsian · Oct 19, 2012 at 02:57 PM
For imported Models, i was able to minnimize artifacts by tweaking the smoothing angle in the importsettings.
Your answer
Follow this Question
Related Questions
Deferred lighting: How to improve quality and anti-aliasing? 4 Answers
Anti Aliasing on Mobile 3 Answers
Graphical bug 0 Answers