0
$\begingroup$

Flipping vertex / edge normals issue.

I have an object that the normals seem to look correct.

img1

When I test it with the screw modifier one of the sides is still flipped.

img2

I've tried selecting the vertices and the edges and flipping them. I've tried selecting the entire object and recalculating inside and outside normals. Any ideas how to fix the objects normals on that one particular side without applying the modifier?

The reason I want to fix the objects normals first is that I want to do a solidify on the object but I want to keep the object parametric, (don't want to apply the modifier yet I'm still testing and may want to make more edits to it). If I do a solidify it goes in the wrong direction for this one particular side.

$\endgroup$
2
  • $\begingroup$ Huh, weird :) A workaround is to fill the shape with a face. Then the normals work fine. $\endgroup$ Commented Apr 5, 2022 at 9:26
  • 1
    $\begingroup$ @JachymMichal Oh, I was just adding that as an answer, but I have another workaround if he doesn't want to fill it with a face. $\endgroup$ Commented Apr 5, 2022 at 9:29

2 Answers 2

5
$\begingroup$

Vertex normals are calculated from some function (usually the average) of adjacent face normals. In the absence of faces, they default to direction-from-object-origin. So the display of normals in a faceless object isn't telling you much you want to know, in this case.

What does matter, internally, to the normal of a generated face, is the order of the loop of face-corners around it. It is anticlockwise, if the normal is facing towards you.

Your starting mesh (left,below) has a pretty jumbled vertex-index order, presumably as the result of the sequence of operations in its construction, which affects the calculation of loops when faces are generated:

enter image description here

This can be fixed by converting it to a curve, and back to a mesh. (Right, above). You can also set vertex 0, and the loop direction, while it's a curve this way, but I haven't bothered, here.You also have duplicate vertices at the sharp corners, which can be M merged away, if that's what you want.

Re-ordering the vertices makes the normals of the generated faces consistent, although you may need to flip them all in the Screw modifier, depending on the loop direction.

enter image description here

$\endgroup$
4
  • 1
    $\begingroup$ Ha, okay that's what I simply forgot to do in my solution. Of course I could convert it back to mesh... I stopped after converting to curve :D $\endgroup$ Commented Apr 5, 2022 at 10:37
  • 1
    $\begingroup$ @GordonBrinkmann perfectly good answer, IMO (+1)... I just thought it would be good to add an explanation. $\endgroup$
    – Robin Betts
    Commented Apr 5, 2022 at 10:39
  • $\begingroup$ Definitely... when I first read your answer I thought "re-ordering the vertices" - yeah, but how can I do this? I thought this would be possible mesh-only. Then I realized you achieved that through converting twice. $\endgroup$ Commented Apr 5, 2022 at 10:42
  • 1
    $\begingroup$ @GordonBrinkmann it does seem an odd hack. On the other hand, I can't imagine how Blender could provide a mesh-only way that would generalize to all meshes. $\endgroup$
    – Robin Betts
    Commented Apr 5, 2022 at 11:01
2
$\begingroup$

I'm sorry, I don't know what is causing this and haven't found a way to solve it, apart from filling the edges with a face py pressing F. Then they are all facing the wrong way, but you can change that with Alt+N > Flip.

But I guess you don't want to fill the bottom with a face. So here is a workaround: instead of using the outline as a mesh object, convert it to a curve, Object > Convert > Curve. This way it loses the modifiers, but after adding the Screw Modifier again it works as expected, all normals have the correct orientation and you can add your Solidify Modifier.

Now it's not a mesh object anymore, but at least you can keep it parametric and don't have to apply the modifiers.

//EDIT: Okay, as Robin's new answer points out, of course you could convert the curve back to a mesh if you prefer to have it as a mesh. My bad :D

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .