It’s time to finally squash this issue I’ve been having for years. I’ll admit, I’m a bit confused about what’s actually going on, and it’s hard to track down the cause of all this, but I’ll do my best to explain. Also, I’ve seen quite a few other posts about this so it’s probably best to at least gather info so others can avoid these complications.
The Problem:
Mirrored objects end up with incorrect normal mapping on the mirrored side. Example:
Note that the right side is correctly “bumped” yet the left is essentially an inverted version of the normal map.
Here’s another example, probably more noticeable:
It should be noted that I’m using Blender 2.75 for all of my modeling.
What’s happening?
After extensive searching I’ve found a few possibilities as to what this could be.
- Tangents [w] are inverted on the mirrored side
- Normals are somehow inverted on the mirrored side
- The very nature of normal maps in Tangent space doesn’t allow for a mirrored UV map
I thought it was certainly the first item listed, due to my findings on this post. However, I recently attempted that solution for the models above, and they remain the way seen above. (There is a visible change, but it appears to only flip the problem to the other side)
Is there a way to fix this?
I’d like to use the original Blender file (for workflow purposes) as the main Asset for my game. That means I’d prefer not to have to export it as any other format. I’d also like to keep the mirroring on my objects and my UVs the way they are. Any of you other developers would certainly know that keeping the mirror has a tremendous advantage when changes need to be made to the model. And diffuse maps can be made much faster. Certainly modern 3D programs wouldn’t stop us from having a mirrored normal map right?
Here’s a few links that add even more confusion to the issue.
In this post, Daniel claims that Unity calculates the tangents correctly for mirrored meshes. Later on, he says that it could be an issue with other file formats or software. Could Blender be not exporting the “homogeneous tangents” needed to display the normal map properly? Or is Unity grabbing the wrong information from the native Blender file?
This post has doj, who says Unity doesn’t handle mirrored tangents correctly.
This user recommends triangulation. I’ve tried this, and it didn’t help the issue above.
Help is appreciated! Thanks!
EDIT: I’m using Blender’s Mirror modifier. If you’re unfamiliar with this mesh modifier, it essentially duplicates geometry on a specific axis and updates in realtime. In my files, the modifier has not been “applied,” meaning I can’t directly edit the mirrored side. Blender is intended to do this work instead.



