- Home /
Baked Normal Map Discrepancies
I've baked out normal maps for various objects, but I'm confronted with this problem;
In this quick example I've taken a high-poly model (shown left, in Sculptris) and an equivalent low-poly made in Blender (shown right, in Unity). Both models were exported as .obj files to xNormal where everything was baked into a normal map. Annoyingly all the small bevelled faces now appear concave and the large faces appear convex. I can fix this of course by re-baking it all for a hard-edged model and setting the smoothing angle to 0 in the Unity .fbx importer for the low-poly. This leads to very noticeable seams, as would be expected, so it's not really an acceptable workaround.
So first off, is this something I'm doing wrong, or is there a problem with Unity as it stands? I've been treating it as my fault for a while now, but this thread made me think this might not be the situation (this is also why I'm posting it here as a Unity specific question, as opposed to asking in forums for other programs);
http://forum.unity3d.com/threads/38781-Calculating-Unity-s-tangent-basis-for-xNormal
To my amature eyes it certainly does look as though the smoothing calculations aren't all matching up as they should.
Secondly if it's not my fault does anyone know of a good workaround, or better yet a fix for this? Does anyone currently not have this problem with these kinds of models, and if so what are you doing to make normal maps?
Answer by Piflik · May 04, 2012 at 12:41 AM
How does your lowpoly look like? Smoothing Groups and UVs are most important. You should ALWAYS have different Smoothing Groups for different UV shells and vice versa. Try splitting the UVs/Smoothing Groups accordingly and rebake.
I don't have experience with this with Blender, though. But I had a normal mapped asset from Max in Unity and it looked fine (Tangent base used: R: X+, G: Y+, B: Z+), not as good as in Marmoset, but no normal map errors. I used my own shader, though, so this might have been a factor, too.
$$anonymous$$y lowpoly is the simple wireframe seen in Unity on the screenshot above. Although I'm quite shoddy when it comes to ter$$anonymous$$ology (Blender has an awkward habit of na$$anonymous$$g things differently to everyone else, plus I'm self taught) I believe it has a single smooth group for the whole model, and the UVs are separated into several shells.
I tried what you suggested about splitting it into several smoothing groups for each UV shell, but unfortunately that had the same effect, except with nasty seams along all UV split edges.
Thanks for the reply, but unless I've misunderstood something (admittedly quite possible) I don't reckon this what's wrong.