Normal Maps- correct geometry for acquired/scanned map to read correctly

Hi all-

I have a normal map that was created by a scan of a real object. The source geometry is a convex form, all the way around. (think of a pretty squashed tube)

So the resulting map is giving you not just the dimples, indents, surface detail along the tube, but also some of the ‘roundness’ of the geo it was grabbed from. With me?

My q is this: if a modeler creates a perfect example of the geometry ‘roundness’ (ie models a squashed tube, not just an extruded cube), is the map going to add its inherent ‘roundness’ to the roundness of the mesh? Sort of ballooning the mesh visually? Seems to me that it will.

Does the mesh in essence need to be flat for the light to read correctly? Been a while since I’ve dug into nm limits and such.

Workarounds? Gotchas? Sucks to be me? :wink:

Thanks!

A normal map is a representation of the difference between two surface normals, generally a low poly mesh and a high poly mesh. There’s always going to be some distortion and error caused by the quantization of the normal map when using your average 8bpc texture, but even at 16bpc you can get noticeable distortion in especially difficult geometry. Often times much of the visible distortion comes from differences in tangent calculations between applications, i.e.: if the tangents are calculated different between the generation of the normals and the renderer ultimately using them they won’t look very good.
This image is a good example of why tangent calculations matter, though the content is mildly out of date as Unity now uses xNormal’s default mikkTSpace calculations.

Now if you have a normal map intended for a high poly model and use it on a low poly model it’s guaranteed to be wrong as the normal map really only works for the mesh it was generated for, unless it’s a flat plane or you’re using world space normal maps. Sometimes it can look good enough to still hold up, especially when used for LOD meshes that aren’t close to the screen. However it sounds like you are planning on using the normal map generated from the scan (intended for use on the geometry it also spat out) on a hand modelled mesh as presumably your main in Engine model, you are absolutely going to see artifacts from that.

It would be possible to generate a normal map for the hand built lower poly mesh that pays attention the higher poly mesh’s normal map though. I believe xNormal can do this if you assign the high poly model a normal map before baking, but I’ve never tried this and it’s definitely not going to be standard settings, so it might not. Otherwise for sure Simplygon can do it, but that also generates the low poly mesh for you, I don’t think you can supply your own, and it’s not free like xNormal. Algorithmic’ Designer might also be capable of it, but again not free.