Why normalized EXR renderings of surface Normals look different than PNG renderings?
It turns out Numpy does not automatically set the negative values to 0 when casting the array type to uint8. For instance, suppose I have a numpy array as follow:

array([  46.73017823, -250.31618571, -247.44416527,   97.52841554,
       -204.92988386,  191.09452493,  103.15708521,  -86.10470495,
         46.211924  , -195.30653599,  240.44499889, -169.42729244,
        210.44996545, -182.04892973, -166.20581924, -221.11524425,
        164.79367242, -199.80888341,   94.1786936 ,   43.45477102])


I was expecting that doing normalNPArray = normalNPArray.astype(np.uint8) will automatically set the negative values to 0 since uint8 does not naturally support negative values. However, casting the array as np.uint8 gives me the following:

array([ 46,   6,   9,  97,  52, 191, 103, 170,  46,  61, 240,  87, 210,
            74,  90,  35, 164,  57,  94,  43], dtype=uint8)


Doing normalNPArray[normalNPArray &lt; 0] = 0 and then casting the array to np.uint8 will resolve the issue.