There’s nothing wrong with the highpoly mesh. But there’s only one smoothing group for all polygons in the lowpoly mesh . It gives you to much curvature in the lowpoly surface which is hard for normal map to compensate in the engine. So you get those gradients in the baked normal map which is bad (gives you compression banding artefacts in the engine). I would suggest you try the following:
- Select your lowpoly mesh and set Smooth Shading for all the polygons, clear all sharp edges and seams if you have any;
- Enter Edit mode > Go to Select > Sharp Edges > Ctrl+E > Mark Seam + Mark Sharp > Exit Edit mode;
- Assign Edge Split modifier and uncheck “Edge Angle” so it will sharpen only those edges you marked as sharp. Basically every hard edge needs to have a uv split on it so you get some padding on bake;
- Unwrap your lowpoly using the seams you get from previous steps and pack it with enough padding. You’ll get lots of pieces but that’s Ok so don’t worry;
- Make a triangulated copy of your low-poly for baking and bake your normal map with padding set to 8 at least;
- Export to fbx, make shure to uncheck “Apply modifiers” if you’re using Blender 2.71 or newer (daily builds).
You should get a normal map with almost no gradients for the flat areas which is how it should be. And that’s the way hard-surface baking works, eliminating any chance of errors and artifacts. There’s much more on that in the Polycount forums, I suggest you visit it. Or post here, glad to help =)
PS. Save baked textures to targa (.tga). Unreal imports it correctly and applies TC_Normalmap compression, which it doesn’t if you use png for example. And there’s almost no to none advantage in using 16 bit png, but you’ll have to set compression options yourself instead of Unreal doing it for you if you import tga files.