Ngon holes in Ngons?

Question. Is blender ever going to have the ability to create multiple Ngon holes in Ngon faces? Some years ago, I read somewhere in the forums, that Bmesh is designed to be able to do that sometime, but it’s just not finished. Is that true?
Do you think it’s worth it?
I can’t wait for this feature. It always bothered me how it requires two faces to make an “O” shape.

Holes in Ngons aren’t supported, and adding support would mean to add another abstraction layer (Blender would store hole-free ngon sets internally and just not draw the interior edges to make it look like a single Ngon with hole). I can see a purpose for Ngons with holes from a modeller’s perspective, but it’s all quads and triangles in the end. Dunno about the priority of this addition or if it’s even on someone’s TODO list.

As I’ve read somewhere Bmesh by itseft could do it, but the problem is all the operations and modifiers, which don’t expect this. So the main problem is rewriting all the tools for it.

1 Like

Which software allows for this? I’m a bit curious I can’t remember which dvd I was watching from Gnomon but I think it was on environmental modeling in Maya but I recall the instructor saying if you wanted to make a hole in a poly one of the inner vetices had to be connected to the outer ring of vertices like in Blender.

I always have at least one poly line connecting the outer ring to the inner ring defining the inner hole.

Google Sketchup does.

Bmesh by itseft could do it, but the problem is all the operations and modifiers, which don’t expect this

True, I worry it would mean to rewrite all modelling tools to handle Ngon sets…

It would be nice to have support for holes in ngons and a bevel function that is ngon-aware.

Things like this should not happen:


I don’t think it’s realistic to expect Bevel to differentiate between topologically significant edges and cases where edges are just there to split the ngon.

Why not? The inset function does exactly that when you turn “edge rail” off. Bevel should have that option too.

Does Sketchup make use of a polygon mesh, I always thought the underlying tech was different from the likes of Max, Maya or Blender style apps.

By mesh I am not speaking of what you see in the viewport but how the data is stored winged-edge, half-edge etc. If IIRC the data structure is what determines how faces are defined and whether things like a hole without a connecting edge are allowed.

My apologies if I am asking too many techie questions I am currently learning python and data structure that is why I am curious. Perharps I should have restricted my question of the typical 3dapps Max, Maya, XSI, 4D do the allow for a hole in a polyface without a connecting edge.

I too thought I read that the Bmesh data structure could be extended in the future to support holes in faces, as it’s a lot more extendable than the Editmesh structure ever was.

But when it comes to creating holes using a face where two sides share a single edge, I kind of see that as being bad modeling practice in general and I wouldn’t even balk at that being disallowed in the current system (usually I use four edges to connect a hole to the edge of a surface for the sake of trying to establish a decent practice for Ngon use).

This is allowed, it does not matter what is the topology is, only as long as there are two edges available. Otherwise it breaks face information badly.



Does Sketchup make use of a polygon mesh, I always thought the underlying tech was different from the likes of Max, Maya or Blender style apps.

I think you’re right, although I couldn’t find on web what it actually uses. It does support polygon meshes however, which seems to belike another way to access the same information. As flat planes are supported, I don’t think it’s volume-based or the like. It might use custom data structures to store data similar to polygon meshes, but with a lot more abstraction to allow for smooth cones etc. (like an intelligent Subdiv?)

I do find this interesting to think about.

If we are wanting to create holes in a face without any connecting edges, does that really mean that we want to allow an unlimited number of such holes in a single face? Does that mean you can also connect those holes together and create an island in the middle of a larger hole? And then put an unlimited number of holes in those islands that could each have disconnected islands with their own holes? But still have all this be a single face? Yikes…

SketchUp treats such islands as separate faces, so should Blender do. If there’s no connection between a polygon with hole and such an island, is there any point to have these together be a single face?

As far as I remember Joe Eager (Joeedh) added support to the mesh data structure for holes in faces at quite a late stage in BMesh development. He’d done a lot of testing of the API before that but it didn’t know about holes. He was only going to look at tackling that after BMesh was integrated.

This means that the tools aren’t aware of holes either. After integrating BMesh, during clean up, Campbell commented out that code because it was adding, for each face, unused extra data. It was unnecessarily making the mesh data larger for a feature that wasn’t implemented.

My understanding was that each face could support only one, four sided hole.

@Sleeper - quite close, except for the last part, each face had, a data structure which can store any number of loops per face.

This can be enabled again with a compile flag, just search for USE_BMESH_HOLES, ifdef’d this out to save 28 bytes per face.

But don’t be fooled, having the data structure there is like 10min of work, so really its not giving us a head-start to have this.

@CoDEmanX

adding support would mean to add another abstraction layer
, … not sure I agree with this, or maybe its just terminology.

It would mean adding support in 3 places…

  • Blend file save/load (DNA structs MPoly, MLoop)
  • Tool support and modifiers (tools treating holes sensibly), this would be where most of the effort would be spent.
  • Tessellator support (current tessellator doesnt support holes, though we can easily switch back to BLI_scanfill which that does - tessellator use for text and 2d curves).


Regardless of ngon holes, is there any chance to make bevel behave more like inset/outset? It would be a huge timesaver on hard-surface models.

Oh, we’re doing random modelling feature requests now? How about edge offset then? Like inset except takes an edge selection as input and doesn’t need a full loop :stuck_out_tongue:

Bevel isn’t exactly a new feature. It just has some issues…