17
$\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$
3
  • $\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$ Commented Dec 11, 2014 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
    Commented Dec 11, 2014 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
    Commented Dec 12, 2014 at 2:56

5 Answers 5

27
$\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$
4
  • 1
    $\begingroup$ I have the 3D-Print toolbox addon installed and do a Check All it shows I have 20 Zero Faces. In Edit mode I am able to click this button to show me those faces. I see them and so I select only 1 of these faces and do Mesh > Cleanup > Degernate Dissolve, it doesn't dissolve it. Nothing happens. $\endgroup$
    – Harry McKenzie
    Commented Apr 21 at 6:39
  • 1
    $\begingroup$ You might need to increase the threshold for Degenerate Dissolve, if that doesn't help, please report a bug. $\endgroup$
    – ideasman42
    Commented Apr 22 at 1:48
  • $\begingroup$ Wait I just realized I had to input a merge distance as well. I thought it would just automatically remove it since it's zero face anyway. Guess that's my bad. $\endgroup$
    – Harry McKenzie
    Commented Apr 22 at 2:39
  • 1
    $\begingroup$ "since it's zero face anyway" is often not the case unless every vertex is an exact match, internally it would be a very small number which is why a threshold is used since the value of what you would consider zero depends a lot on your scene scale. $\endgroup$
    – ideasman42
    Commented Apr 24 at 0:00
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$
2
  • $\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
    Commented Dec 11, 2014 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$ Commented Dec 11, 2014 at 13:22
4
$\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$
1
  • $\begingroup$ Having quads can be useful, e.g. for animation. $\endgroup$
    – SilverWolf
    Commented Jun 6, 2018 at 22:12
2
$\begingroup$

I have the best answer ever to help all of you with all of your problems, follow the tutorial:

Assuming that you are using blender 2.79:

1. Activate 3D PRINT TOOLS: User- preferences - addons - search for "3d print toolbox"

2. select your model in object mode, and then navigate to the 3d printing panel, left bar of the program

3. Click on the button "Make Manifold" and then click on "Check all"

4. a list of erros of your model will appear, including zero-area faces, now go to edit mode and you can see in the panel that the button named zero area faces are now clickable, so click on it and he will select all the zero-are faces on your model.

5. Now that all the zero-area faces are selected, press DELETE, and in the options select DISSOLVE EDGES.

6. now press CTRL+T to triangulate the model

Using this method you can resolve all the issues with your model, and it is very good for those who want to print.

$\endgroup$
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$
1
  • $\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$ Commented Dec 11, 2014 at 12:11

You must log in to answer this question.

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