Problem
Normal mapping in Eevee creates artifacts both in SSR and cubemap reflections. This is because the reflection vector is below the polygon T78501: EEVEE: Normal mapping making specular artifact
Proposed solution
For cubemaps: flip the reflection vector to above the surface if the ray came from behind the surface. Basically, such a ray propagates without changes. Also I fixed NH-product for BSDF to account for the new reflection value.
For SSR: likewise, flip the reflection vector to above the microsurface, then flip it to be above the actual polygonal geometry to avoid self sampling.
Eevee old, Eevee new, Cycles
Alternative solutions
An alternative would be not to reflect, but to clamp the reflection vector to the surface. It distorts PDF much more then the proposed solution.
Limitations
The situation itself is not physically correct and only comes from a possibility of ray coming from below the surface, so any reasonable solution will be more or less fine.




