"Neutral" Normal Map changes with UV direction

Assumption: if I have a tangent space normal map that’s neutral (i.e. all RGBs = 127, 127, 255), it will not matter if UV direction is flipped or mirrored.

Yet:

The character in the above turntable animation has a visible seam across the head.

The artist split the UVs right across the head:

head-albedo-and-normals

So the UVs run in different X directions. It shouldn’t matter (and in UE4, Unity 5, Godot 3.1 it doesn’t), but Blender Cycles produces this very visible lighting/gloss difference.

That is going on here? Does Cycles’ “Normal Map” node immediately convert to world/object space?

If you see the split without the normalmap, it means the normals were not imported. Blender generates normals for a mesh without the presence of custom normals. If there’s a split in the mesh, than the Blender generated normals will also have the split. Game engines split the mesh (duplicate verts) around shading splits, material borders, uv borders and face colors to spare on memory and performance. (Blender stores these per face corner, not per vertex, this is best for the modeling workflow but would be wasteful for a game engine.) So, you should make sure to import the normals. What importer did you use?

1 Like

Well, Cycles shouldn’t produce this result unless something in your material deliberately tells the render to do it…
Please post a screenshot of your material nodes (or a blend file with textures packed).

1 Like

If I disconnect the normal map in my Cycles node graph, the split disappears.

head-without-normal-map

There are no duplicate verts or sharp edge marks, no “edge split” modifier, “auto smooth” is off. I’ve selected a single vertex in the above image to show this.

Aargh! I found it while making the screenshot for you :smiley:

I am using a complex skin shader, but the seam was reproducible with just the Diffuse node, like this:

However, I had forgotten to change the normal map’s Image Texture node to “Non-Color Data”, thus it was doing sRGB conversion. Meaning my neutral normals were de-sRGB-ified from 127,127,255 to something like 188,188,255 :sweat_smile: