I've recently sculpted in some details in ZBrush and created a high poly insect model. After that, I made a low-poly, optimised mesh and baked the normal maps in xNormal. The problem I'm having is that the normal maps do not reflect properly: in picture A, with a standard material applied, the light reflects dead centre of the eye, while when the light is placed in the same position of the normal mapped material, it reflects at the top right of the eye rather than the centre. Does anyone know what might be causing this?
Replies
I can reconstruct your error when I enable sRGB Color Space inside Marmoset. So I would suggest you look for a similar option inside your software:
As a rule of thumb, you want to author your textures in the color space that they will be represented in engine.
A simple way to think about it, is that if you make a texture with sRGB on, then you are choosing color values that you are interpreting with your eye. You look at a wall, and you say thats about 200,200,200 off white. So your Base Color/Albedo will be created in sRGB or sRGB on.
When sRGB is off, you are in linear space. Color values increase in straight fashion rather then a curve. That means, again as a rule of thumb, if your texture represents DATA, you want to be in Linear space, or sRGB off. Roughness, AO, Normals, Height, etc are textures that contain a data set, therefore should be Linear or sRGB off.
With all of that said, you can author and display your textures in whatever space you want, as long as they match between what you authored and what you displayed.
For most cases in game dev:
Base Color/Albedo = sRGB on.
Normals,AO,Height,Roughness,Curvature,etc = sRGB off.
Because the shading is encoded/decoded as data in your normal map it has to be viewed in the same tangent basis as it was baked. That's why baking /viewing between synced applications always looks correct and doesn't require swizzling /channel flipping. Same thing applies for the colour space it is baked/viewed in (always linear)