Normal map is inverted when using mirrored geometry

Sculpted model, retopped low poly version, rendered out tangent space normal map in Xnormal (with -Y as it should be). After rendered it out, cloned leg and arm to another side and attached it to main body mesh. Imported it into UE4 to see how normal map looks and it looks fine except for one thing - on the cloned/mirrored side normal map is inverted, as you can see in attached image. So my question is why the normal map is inverted and how to fix this? I checked default mannequin, from first glance it uses same setup as I do (leg and arm are copied from one side to another not to waste texture space) so what did I do wrong?

hey, it’s not the normals, it’s the uv coordinates, that are inverted. unreal won’t forgive you that. set the tiling of your texture to “mirror” inside unreal…
and in your 3d program, select all the mirrored uv’s, mirror again, so they are basically unmirrored, and place them one uv tile to the right. this should work

Thanks, doing this fixed the issues. That said, that’s quite a bit of fiddling for something fairly simple and I’m rather certain UDK didn’t need anything like this cause I used plenty of mirrored geometry. I’ll presume this is some kind of bug and hopefully will be fixed soon.

glad it helped. i didn’t find any other solution to it though.
it’s a really odd problem and i don’t know why this behaviour is still implemented as is. i don’t see any benefit…
so yes, they should fix it

hey nebularium, would you mind to accept this as an answer again? i think somehow it was canceled.
thx man!

Sure ;d ()

The real answer to this is to uncheck sRGB in the texture properties. It seems to use a bootlegged world normal, otherwise. It is also best to have the Compression Settings = NormalMap (if it is not).

Mirroring UVs should always be supported by engines, as they are great for optimizing texel density and not having to do re-work. Especially useful in Environment Art pipelines.

  • Note: Importing a fresh normal map to the project, and relying on UE’s auto-compression algo, automatically sets these properly.