Simple Sphere Normal Map Looks Wrong

Hey guys, I’m trying to understand how normal maps work, so I made this plane facing directly towards the camera and applied a normal map of a sphere. The problem is I can’t figure out why the specular highlight looks stretched out towards the edges on the baked sphere unlike an actual sphere in the render.

If you select the UV map in the normal map node, does it help?

Good observation I tried it out.
Here I have one light, the more it gets to a grazing angle with the plane the more this effect shows up (at the top there are 4 circular planes with a normal map at the bottom 4 actual spheres without.

The same thing with an hdri and a metalic material, here it is more clear what is going on.

Setting the strength of the normal map to .5 I get this (the reflections are better but “amplified”

It could be that the normal made I made is not “correct” I simply did a screenshot render of a sphere with the normal’s matcap shading :rofl: So not at all scientific.

Edit:
A diffuse colour with roughness does work well, the reflections are what get stretched.
Ie direct light and shadows work fine.

Edit 2:
As I expected this is a known issue:

no, it doesn’t change anything.

Well, that article sums it up I guess, blender can’t do reflections for normal maps over 45 degrees. Hopefully they fix this eventually, it looks like it’s been a bug for quite some time. Thanks for the help guys!

I wouldn’t call it a bug. It’s a well known limitation of Normal maps (and not a Blender problem). They aren’t supposed to completly replace geometry with a shading trick, just to give some extra information to a triangle’s surface. You can allways mix the map 50% with a flat normal (.5,.5,1.0) to flatten the result to point where none of these things happen.

Another possibility is to fake the reflection all together, by using the result outgoing vector to probe an environment texture inside the shader. It looses the ‘connection’ with the rest of the scene, but it works (lots of games use this has most don’t rely in raytracing algorithms).

3 Likes

Yea, not really a bug (in cycles), it is a known limitation of path-tracing render engines, this also happens in Ue5, Redshift, Arnold, Karma and other path-tracing engines, as stated in the discussion linked.

Non path tracing engines can get around this so there is hope that it could be fixed in Eevee.

2 Likes