Why the normal map have sharpen edges even though i paint on it?

hi all, i baked the normal map from high to low mesh and set it to non-color, but it still have some sharpen edges, i try to set it to non color also smear and soften them and the normal map look ok in solid


but in look dev the edge still there

can enyone explain for me how to solve this problem and the way to prevent it, thank you somuch!

could anyone help me, please!

Hi, theres an easy fix for this

Go to texture paint mode and select your normal texture in shader editer. Go to tools and select clone brush. Paint a few strokes on top of the model and save the texture.

See my cursor- thats where i painted the clone strokes

It could be some other texture. how many textures have you used on this model? it kinda looks like normal map is fine but some other texture is making a fuss. In rendered mode- try shift+ctrl + clicking on each texture you have to see which image needs to be fixed.

i found the problem on the normal map , i try to paint over it but just only effect on the solid mode but in lookdev the edges still there, here is another mesh i try to paint or smear the normal map and it’s ok in solid


but it dont effect in lookdev !!

if you know please help me thank you

This mostly happens if you push normal map value to a higher value than one. Try reducing it. Maybe add subdivs for your mesh?

Can you show us your UVmap of that object?

UVMaps play a very important role in Normal maps. They define the based axis (Tangent and Cotangent) to determine the normal orientation… Which, on the other hand, can produce Normal maps that necessarily ‘break’ at UV seams, thought they produce a continuous vector field…

Here’s a small illustration:


The left sphere shows the UVmap with all its islands; the middle sphere shows the Normal map (with noticeable seams), and the right sphere is a simple Principled with that same normal map. Can you spot the seams there??

And painting/smearing them over is definitely not a solution!
You can do that with bump maps, as Blender will then calculate the normals based on the bump texture derivatives; but you cannot do it with normal maps.
At least with tangent normal maps. With Object space and world space normal maps it’s possible to do that smearing, but painting vectors as if they are colors is a very strange thing.

my normal map strengh at 1, i add subdivide it make the seam less noticeable but the seam still there :frowning:

here is my uv map (use smart uv ):

, if you know what wrong with my map let me know thank you

There’s nothing wrong with your UVMap… The only problem, as I pointed out above, is that Normal maps are encoded into the UV layout. You cannot smear them, because they will sure break…

And as I illustrated, having normal maps that don’t show continuity (as a texture), doesn’t mean they are incorrect. They may well be continuous in tangent space, and that’s all that matters.

Another small example… If I tell you to ‘turn right’, in your space, you’ll turn right, but in my space you’ll turn left. At the edge between our spaces, there must be a conflict, even if for all that matters, you’ve turned into a fixed location in the world space.

The values for each pixel in a normal map, represent how much the normal should shift in the U, V, and W directions (which come from the UVmap itself). They live in their own space, and each will have their own ‘North’. You cannot treat them as if they are in world or object space.

Bottom line is: You shouldn’t ‘paint’ normal maps! They are mathematical entities, not some canvas with colors.

ok, what you mean is the edge is create by conflict between u v and w, thank for your info, do you have a solution to make it look continuity as a texture, thank in advance

Best option is to use Bump maps. You can paint those with no problem (make sure you use a 32bit texture).
From them you can build a normal map if you need it.

Of course, having a good uvmap is important for other reasons, like midmaps (which can really make your textures look odd). Placing UV seams where they are less noticeable is a good solution.

thank you for your support, i ll try it out
have a nice day:)

Just for closure on this, here’s a setup to convert a bump map into a normal map. If you bake this output, you’ll get a normal map with the same detail as the bump map, and based on your UVmap.

thank , i often bake the normal map from bump map by choose the mesh(that contain bum map image) and hit bake (normal) that auto generated the bump into normal(and it so good), i don’t know what wrong with this method, is this not good as your method above? could you explaint for me why you use above fomular to generated normal map, is this more exactly than my old method ?( i also don’t know the cross product , dot product, normalize node, i dont see them on my blender 2.8!)

Thats pure gold.

hypothetical situation.

Lets assume i have baked normal map from hipoly mesh to low poly with some simple shading information like bevels for example.
I plug this to Bump node via Normal input. Viewport and baking with your node setup works fine.

Now i need to make changes to uv map, Rotate uv shells.
If i bake normal map with new uvmap i will get a lot of errors cause uvshells orientation does not match to face orientation in 3d space.
Is there a way to setup nodes so that it would be invulnerable for rotation changes of uvshells?

Right now the only way i know is to bake initial normal map one more time with new uv changes or do not rotate. Any ideas ?

You’re right… I totally forgot that baking normals now does this as it is rather a recent addition to blender. There’s no difference between both methods, as the underlying math is exactly the same. :wink:

They are operations inside the Vector Math node.

:thinking: If you change the UVmap, then you’re going to need new textures. :confused:

I’m not following… do you mean to use a normal texture from one uvmap in another uvmap? (if so, you might need to bake the tangent vector of the first UVmap into the second UVmap… or just keep both UVmaps in your shader).

thank again for your useful info :wink: