# Normal Artifacts On Grazing Angles

I am currently experiencing a very obvious artifact that occurs when looking at objects on very grazing angles

Here is a picture of the artifact:

I noticed that the issue was coming from my implementation of Cook-Torrance's Specular BRDF.

Here is the equation for the Cook-Torrance Specular BRDF:

More specifically, calculating the denominator is causing the issue:

float denominator = 4 * max(dot(viewDir, normal), 0.0) * max(dot(lightDir, normal), 0.0) + 0.001;  // Prevents any division by zero


When I change the calculation of dot(viewDir, normal) to dot(halfway, normal), the artifact disappears:

float denominator = 4 * max(dot(halfway, normal), 0.0) * max(dot(lightDir, normal), 0.0) + 0.001;  // Prevents any division by zero


But this equation is no longer correct. I was wondering if anyone knows why my implementation causes these artifacts?

If you want to see my fragment shader 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 '18 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 '18 at 4:35