The fix is so obvious that I have no idea what’s going on at Epic. Clearly the normals are being calculated using the camera vector when they should be calculated using the perspective matrix.
In simple terms, if your camera is orthographic mode facing forwards (direction vector [1,0,0]), then every single pixel also represents a direction of [1,0,0].
But if you’re in perspective mode with the camera facing forwards, only the pixel in the center is facing [1,0,0]. Other pixels are facing different directions. Like if your V-FOV is 90, the center-right most pixel would be facing [1/root2,1/root2,0] and the center-left most pixel would be facing [1/root2,-1/root2,0]. That’s the correct vector to perform the calculations on.
For proof just change your view to ortho. The lighting is perfect because the pixel vector is always equal to the camera vector. When you switch to perspective it’s all ****ed up. How much more obvious can it be?