11
$\begingroup$

I run into this issue all the time and it's really frustrating to fix especially on high poly meshes. Either there's no face joining some edges ("zero-area hole"?) or there is a zero-area face. Either way it messes with the normals making ugly black spots all over the mesh. Here's an example:

enter image description here

To fix the normals I'd quite like to either...

  • split the upper face, as the dashed line shows,

  • or merge the two lower faces by dissolving the edge, as the cross shows.

How can I do this automatically to the entire mesh?

Manual methods aren't acceptable as there's a lot of this kind of geometry. I'd prefer to change the mesh as little as possible, or at least not lose any information by collapsing huge areas.


Sometimes is's hard to actually select the face and I resort to selecting an adjacent one, growing the selection with Ctrl Numpad+ and deselecting the others. Once selected, others can be selected with Select->Select Similar->Area. Adjusting the threshold is often necessary to avoid numerical inaccuracies. It also helps if the model is not too small, so maybe scale it up first.

Below is an example of a zero-area hole, although I've moved the vertex up so you can see it.

enter image description here

You can get the zero-area faces back with Mesh->Clean up->Fill Holes.

enter image description here

Even if I do manage to manage to get rid of the zero-area face, leaving a quad as shown below, I've found triangulating it splits the wrong way and just gives a zero-area face again (this really seems like a bug in blender's triangulation).

enter image description here

$\endgroup$
  • $\begingroup$ I don't think the question is not so clear. Please try keep it simpified. Actually, you can save a lot typing work here simply by showing an illustration with BEFORE vs. AFTER comparison. Does the "deal with" actually mean "remove"? $\endgroup$ – Leon Cheung Dec 11 '14 at 11:59
  • $\begingroup$ @LeonCheung ideally I'd like to keep the mesh as close to the original as possible, just without broken normals. The best solution seems to me to be subdividing the triangle opposite the zero-area face, but I expect this would be difficult to do globally. $\endgroup$ – jozxyqk Dec 11 '14 at 12:29
  • $\begingroup$ @NoviceInDisguise that's the annoying thing. Think of two triangles sharing an edge. Then you split one of the triangles along the edge but not the other. There's a vertex in the middle of the split edge but no vertex on the other edge to merge (remove doubles) with. Although it looks like there's no hole, there is no face in the middle of the edges and if there were it would have zero area. $\endgroup$ – jozxyqk Dec 12 '14 at 2:56
17
$\begingroup$

There is a tool specifically for this.

  • First select all faces (typically selecting the entire mesh is fine).
  • Access this menu item from the 3D View: Mesh -> Cleanup -> Degenerate Dissolve to remove zero area faces, zero length edges.

Using dissolve is useful because it won't make holes where the faces used to be, it simply removes the face and merges surrounding edges.

you can change the threshold as a tool option.

$\endgroup$
6
$\begingroup$

I think @ideasman42 presented a very good point. Just in case below is what you need instead:

  • Select one zero-area face (better to do it in Wireframe mode);
  • Shift G -> Area, to select all zreo-area faces;
  • Manually select adjacent faces you want to merge in, then press F.

enter image description here

$\endgroup$
  • $\begingroup$ This requires selecting the data, which may be fine, but if you have many zero area faces, you might not want to select each one manually. $\endgroup$ – ideasman42 Dec 11 '14 at 13:01
  • $\begingroup$ I think I was kinda mislead by the answer posted by himself, if it isn't what he really meant. $\endgroup$ – Leon Cheung Dec 11 '14 at 13:22
3
$\begingroup$

Thanks to @ideasman42 and @LeonCheung for their solutions! I've combined them here and show an example.

Whether there are gaps in the mesh as in the following:

enter image description hereenter image description here

Or zero-area faces as below:

enter image description hereenter image description here

They can be fixed like so:

  1. If there are holes, Mesh->Clean up->Fill Holes to create zero-area faces. The next step won't work without it.
  2. Mesh->Cleanup->Degenerate Dissolve as in @ideasman42's answer. In my example I'm left with a quad. NOTE: I've still found a few broken faces with only one iteration, so run it a few times. Be careful not to set the threshold too high.
  3. Triangulate, using CtrlT or CtrlShiftT as @LeonCheung says. The latter worked for me. Changing the Quad Method in the t panel (or with F6) also worked.

    enter image description here

    Doing this in blender is quite an important step for me because leaving as quads gives a good chance that other applications down the line do the triangulation and get it wrong.

The process in animated gif form:

enter image description here

$\endgroup$
  • $\begingroup$ Having quads can be useful, e.g. for animation. $\endgroup$ – SilverWolf Jun 6 '18 at 22:12
1
$\begingroup$

One option is to select all zero-area faces, delete the edges which removes all the adjacent and properly filled triangles. Then fill the holes:

  • Triangulate the whole mesh (which may create zero-area faces).
  • Find a zero-area face and select it (easy enough when viewing with shading).
  • Select->Select Similar->Area, as above in the question.
  • Press delete, select Edges
  • Mesh->Clean up->Fill Holes
  • Mesh->Clean up->Delete Loose (I had edges in the middle of nowhere).

enter image description here

  • Triangulate again

enter image description here

Ew! Why does blender seem to insist on triangulating the wrong way? Shouldn't it always go for the one giving the most even triangle side lengths?

If you know of a better way, please post it!

$\endgroup$
  • $\begingroup$ Not a best way indeed. But just want to mention here that if Ctrl T doesn't triangulate it as you expected, you can try Ctrl Shift T. Or tweak options in F6 menu. $\endgroup$ – Leon Cheung Dec 11 '14 at 12:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.