When camera is near the object, there is no artifact. But, when camera is zoomed out from the object, normal makes some artifact like below images. I checked every shader factor. (disabled and enabled). It's because normal map. And changing normal map setting have no effect. This is my normal map Setting. My shader is a surface shader, just unpack normal and assign to normal variables. Code (CSharp): o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_MainTex)); Is there any way to remove the spots?
I've not seen anything exactly like that before from just normal maps. However you probably shouldn't be using the 16 bits option for normals on organic objects, use compressed or 32 bits. 16 bits is the total per pixel, so only 4 bits per color channel because of how Unity stores normals on PC. That means the normals are only able to represent 16 directions on x and y!
I found it. It's not normal map's problem. It's my code bug. Code (CSharp): fixed NdotV = dot(normal, viewDir); <= this makes the artifact. fixed NdotL = dot(normal, lightDir) * 0.5 + 0.5; half3 ramp = tex2D(_tex, half2(NdotL, NdotV)).rgb; I changed the line. Code (CSharp): fixed NdotV = dot(normal, viewDir) * 0.5 + 0.5 And It is solved. Thank you.