Why do ngons require two support edges?

In pretty much all 3D software I’ve used in the past only one support edge has been required for ngons. The reason why having a second support edge is annoying is because it makes makes selecting the top edge loop for beveling more difficult since the loop stops halfway around the ngon… I’m not posting this just to whine, I guess I’m posting this in hopes that maybe there’s some super secret setting that makes it work the way I expect? Am I alone in this irritation? Is there some better way that I’m ignorant of?

this has more to do with how the knife cut the face then the Ngon per say
need to manually correct it
or do the hole using subsurf might work better

salutations

It happens with booleans as well. By subsurf do you mean subdivision surfaces? Not sure what the point of that would be- my goal is to have less edges, not more.

Worth noting that there is no “fixing” these support edges, they are created automatically by blender and can’t be dissolved. You can manually cut a support edge somewhere else and remove one, but there seems to be a minimum of two support edges needed for a convex ngon.

This happens because of the way blender (and I assume other applications as well) handles geometry. In short, blender simply can’t handle a single face with a hole in it - blender doesn’t allow it to exist. When you have a face, it is created by using the 2d space and the verteces as a boundary for the face. But the creation of a face doesn’t differenciate between different vertex normals (because if i understand it correctly vertex normals are derived from face normals), therefore blender has no way of knowing which verteces are connected to form the surface and which aren’t. As far as blender is concerned, all verteces of a face are connected to each other. Therefore if you had a face with a hole in it, the hole would be filled and the inner verteces are redundant. In order in order to avoid this, the boolean operation has to add extra edges in order to avoid faces with holes.

2 Likes

Ngons sometimes requiring a supporting edge is necessary, there’s no question about that- my question is why blender needs TWO when every other software uses ONE. Here’s a screenshot of an ngon in Modo being supported by a single edge:


This doesn’t answer your question, but I’d argue against having any ngons to begin with. It’s a bad habit that might work out fine sometimes, but can get you into trouble others. Even on solid/inorganic models with no smoothing it can lead to shading and light pathing miscalculations.

If you just want more control when beveling, I’d recommend an approach more like this. A few more steps can save you from headaches down the line. :slight_smile:

1 Like

First- let me say that I truly do appreciate your intentions, so please don’t take this the wrong way- but you should avoid thinking in such absolute terms. 3D is a very big industry, and I have been a part of it for a very long time. I understand the limitations of complex topology, but more importantly I understand and respect its potential when used correctly. I’ve heard this opinion about ngons for quite a while now, and I don’t agree at all. I’m a concept designer and working quickly is my bread and butter- your animated gif was excruciatingly slow to watch given that the same task should be accomplished with two clicks max. loop select->bevel. done.

To put it another way, your advice is like telling people that they shouldn’t drive with a manual transmission because it could lead to clutch failure or worse. If you go around saying that to enough people, you’re eventually going to say it to a formula one driver. I get paid to go fast :slight_smile:

1 Like

That’s fine. I respect your difference in opinion. I’m not telling you what to do buddy, just offering my prespective. I also wasn’t trying to come off as condescending either. I don’t know your level of experience, and newbies often don’t know the pitfalls of ngons. If you do get that, then great. That’s all you had to say. :slight_smile:

As someone who’s worked in the industry for a long time, you must realize that in most (maybe not all) professional pipelines, ngons are taboo. At least that has been mostly my experience in the past 15 years I’ve been doing this, but I’m not a concept artist. I’d rather assume you’re in any number of job titles where ngons matter, than the one title where it doesn’t.

So what do you do, mainly? Quick props for kit bashing and over painting?

And Cinema 4D doesn’t require any supporting edges. The supporting edges are hidden N-Gon lines. This then allows the loop selection tool to select the entire loop in one go. Here’s where I created a hole. Note no visible supporting edges. On a duplicate I’m using the loop selection tool. The white ring is a preview of what will be selected when I left click.

My guess is that this a quirk of how bmesh works. I think it would be a good idea to ask one of the developers about this at https://devtalk.blender.org/c/blender. I think asking why bmesh needs two support edges for holes inside ngons should be allowed. Just don’t phrase it like a feature request.

1 Like

The reason that 2 support edges are needed is that Blender has an internal rule that the same vertex cannot appear twice in a face. With this rule, a number of modeling tools are simpler. The rule could be removed, I suppose - as you say, other software have not imposed such a rule - but it would require a LOT of work now to understand all the places in the code where is is assumed that a vertex appears only once in a face.

Similarly, the rule that any support edges to holes are needed at all could be removed. In fact the code has “ifdefed-out” (i.e., un-active) code to allow faces to have extra data representing internal holes. But enabling that code would be even more of a nightmare of fixing every mesh tool to properly deal with that.

[I am one of the developers]

7 Likes

Interesting, so how does internal triangulation of the mesh work? Triangulation is obviously needed to display the mesh, and blender does it internally without burdening the user with all of those extra edges. Wouldn’t these support edges fall into the same category? I have a relatively decent technical background, but I have not spent any time looking at the Blender code, so forgive my ignorance if it’s a dumb question!

At least from a UX perspective, these support edges feel like the same thing since it’s geometry the user didn’t create, doesn’t necessarily want, and has little control over.

Thanks for your input!

When working with faces in BMesh, as a developer, it appears as if the faces are not triangulated. The triangulation (needed for display) is kept separate from the BMesh – as needed, each face is triangulated and the resulting triangles are kept elsewhere. So when writing algorithms to manipulate faces in BMesh (as most of the tools do), those “internal triangulation edges” are nowhere to be seen and the code doesn’t have to skip over and ignore them – they just aren’t there.

As you say, the support edges are geometry the user didn’t necessary create doesn’t want to see, and I understand your point that it would be better if they were hidden in a similar way to the way triangulation is. And indeed, it would be possible. By activating the code I mentioned in the previous post, a BMesh face would become an outer face (list of verts+edges) and a list of holes – each of them also a list of verts+edges. You can probably imagine how operations of faces (like intersecting with them, insetting them, extruding them, knifing them, selecting and/or testing containment) now become more complicated because you not only have to write code to deal with one list of verts+edges but you have to also deal with the contained ones. Simple geometric properties that may be assumed about faces with one list (and no repeated vertices) may no longer be true but one has to dig back into the mind of the person who wrote the original code to rediscover what properties may have been assumed. Also, making the algorithms general enough to handle these extended cases may slow down the simple case – though probably not much, if done with care.

None of this is impossible, and maybe some day some developer will try to fix it. Because, besides the user benefit, the need to create support edges actually makes some tools in Blender harder to program in some ways (boolean, knife). It would be less scary to make such changes if we had robust unit tests for all of the blender modeling tools, but alas, we do not.

2 Likes

Thanks for the detailed response, it makes a lot more sense to me now. Hopefully some brave soul will take on this challenge someday :slight_smile:

1 Like

As HowardT said, the reason why Blender does not support faces with holes and faces where 1 edge makes up 2 sides is to make it easier for the developers to code tools (and there’s already plenty of todo items in terms of improving tools).


I have to disagree to an extent. While Ngons are not good to have in some situations, there are other places where they are indeed useful, even more so if the shape is convex.

  • They serve as temporary placeholders to later cut topology through
  • It’s a nicer way to terminate edgeloops that you don’t want all over your mesh (for the purpose of avoiding too much density in areas).
  • It helps you use the bevel tool with good results (by avoiding 4 to 5-way intersections at corners if there’s no good place to connect a diagonal edge to).
  • It’s easier to deal with than triangles (especially when doing something akin to points 1 and 2).
  • It allows for fewer faces in general and can even look good with subsurf (but make sure the Ngons are fairly convex when using the modifier). The result is at times desirable to subsurfing triangles.

With a proper approach, Ngons do not need to be your enemy that only get in the way and will make modeling easier. People found that out when they started using Bmesh and most of the arguments against having Ngons quieted down.

1 Like

Agreed, unless sub-D is coming into play, (i.e. much of hard surfacing), then I use ngons all the time, though I do try to add suitable cuts to help with the flow of connecting edges.