# Normal Artifacts On Grazing Angles

I am currently experiencing a very obvious artifact that only occur when I use normal maps. However it only occurs when looking at surfaces on very grazing angles.

Here is a picture of the artifact:

And here is an image of the normals:

I will also post the vertex and fragment shader code for unpacking normals maps:

vec3 T = normalize(normalMatrix * tangent);
vec3 B = normalize(normalMatrix * bitangent);
vec3 N = normalize(normalMatrix * normal);
TBN = mat3(T, B, N);


vec3 normal = texture(material.texture_normal, TexCoords).rgb;
normal = normalize(normal * 2.0f - 1.0f);
normal = normalize(TBN * normal);


I would really appreciate if anyone has ever experiences this kind of artifact. Is it my BRDF, is it my normal calculations? I am not sure.. I would appreciate any insight people have!

If you want to see my fragment shader and my BRDF you can find the code here:

• Tangents are multiplied by the model matrix, as they dont suffer from non-uniform scale disortion as normal vector do. Also, you do need a vertex normal and a normal vector extracted from the normal map, however, I see you are applying the normalization (normalize(normal * 2.0f - 1.0f)) to the same vector you used to create the TBN matrix – Nadir Oct 10 at 14:34
• Have you identified which part of the code generates the color of the artifact? Have you tried to reduce your shader to a minimal reproduce case? I wouldn't be surprised if it was due to either a normal facing away from light, or a nearly 0 but negative parameter to a pow() function. – Julien Guertault Oct 11 at 4:35