What's so wrong with n-gons?

hullo all

hmmm… ive been reading up on many threads discussing the creation of n-gons, but with the 2.35 release, f(ake)- gons will be able to be produced. but, just out of curiosity, why can’t blender have n-gons?

~Delta

Real N-gons tend to subdivide and subsurf in a weird way. And they pop in animation.

They are also extremely handy when modelling and can be fixed (quaded etc) later in the workflow. Not having ngons breaks workflow too often. I believe dynamic FGons are coming so that will help a great deal. Personally, I can’t wait.

problem is that to support true ngons, you need a special structure of the datas, winged-edge or half-edge (it’s where the name of the modeler wings come).

This type of structure has many advantages, but also some drawbacks, and unfortunatly cannot replace easily the one currently used by blender.

the plan is that f-gons will elvove to mimic many of the behaviours of ngons.

You are incorrect sir. If you know the first thing about how Catmull Clark subdivision works, there is nothing ‘weird’ or unpredictable about the limit surface in the vicinity of n-gons. I don’t know what ‘pops’ your referring too, but I have never seen them.

There can be undesirable shading in certain areas of your model that may be exacerbated by animation, but I submit this is more due to the edge connectevity or ‘topology’.

5 sided patches are especially usefull. I personally don’t use anything with more sides than that, but your needs may vary.

Cheers,
Zarf

This is incorrect. The only thing that you need to support n-gons in a mesh data structure is faces that do not use a fixed record length for the pointers/references to vertices.

The Half edge data structure has the advantage that all adjacency queries can be answered in constant time, while the winged edge data structure fails at this in certain situations. However the Winged edge data structure can be extended to support open meshes, I do not know if the same is true of the half-edge data structure. It should be, since a half edge data set is what you get when you ‘slice’ a winged edge data set in half.

I wrote a half edge module for python. It’s a nice data structure that simplifies many things.

For blender it’s not a bad idea for the f-gons to evolve into n-gons. If I am not mistaken, 3dsmax support n-gons in the exact same fashion, by hiding edges. Most of the time the user dosn’t have to worry about that though. However it probably would be a bad idea to retrofit blenders current data structure with a half edge or winged edge database sitting on top of it. It would be interesting to allow different mesh types to coexist within blender however.

Cheers,
Zarf

What is the difference between n-gons and f-gons?

The f-gons (in Blender’s implementation as of now) is just grouping faces together and hiding inner edges. True ngons don’t have to hide edges per se since there is none to hide.

Martin

not to sounds like a stoner, but what are these ‘gons’ you are talking about?

Right from dictionary.com: Polygons

Martin

“gon” refers to the number of side a face has.

a poly-gon has more than one side.

for instance:
pentagon=5 sides
septagon=7 sides
octagon=8 sides

n, in n-gon, is referring to any number, or a n-sided face

f, in f-gon, stands for “fake”, so it is really just masking the underlying faces/edge

hope this helps,
~Delta

Shapes with more than 3 sides ? What’s the point ?

use wings3d sometime

you’ll see

I would like to see ngons and “solids” in blender, but yeah, that would require a major rewrite

I believe the “popping” which was reffered to was when the triangulation [graphics cards don’t support ngons, they are sent a triangulated version to draw on the screen] of a non-planar ngon changes as your view changes. This shouldn’t happen probably, but it may in blender already with quads.

A quick question here. . .

I never could find a document on a winged-edge data structure. So in making winged vertex extrusion functions (am taking a break from that. . .soo complex) I simply made each (Edit) vertex store it’s adjacent faces/edges.

Ehh. . .is that kindof like winged edge stuff? Or not? I’ve found half-edge docs, but I don’t want to do that.

joeedh

A quick question here. . .

I never could find a document on a winged-edge data structure. So in making winged vertex extrusion functions (am taking a break from that. . .soo complex) I simply made each (Edit) vertex store it’s adjacent faces/edges.

Ehh. . .is that kindof like winged edge stuff? Or not? I’ve found half-edge docs, but I don’t want to do that.

joeedh[/quote]

If you couldn’t find a document you were not looking at all.

First hit on google for ‘winged edge’

http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/model/winged-e.html

Thats even the document that the comments in the wings source code refers too if you have questions about the data structure…

Even though theres tons of other information availible, thats all you need to know to get a working implementation.

I don’t know why you wouldn’t want to use the half-edge data structure, it can do anything that winged edge data sets can. As a matter of fact the half edge data structure is a derivative of the winged edge structure where each edge and it’s pointers is ‘split’ into two ‘half edges’ that point to each other. In certain ways its easier to implement, or at least I found it to be when I did it in python.

And finally I repeat: Ngons do not need a B-Rep scheme to be implmented in a mesh data structure.

Zarf

Shapes with more than 3 sides ? What’s the point ?

A comment that goes neatly into the “No one will need more than 637 kb of memory for a personal computer.” - category %|

Yes in fact, lets do away with quads too. Absolutely useless :stuck_out_tongue:

A quick question here. . .

I never could find a document on a winged-edge data structure. So in making winged vertex extrusion functions (am taking a break from that. . .soo complex) I simply made each (Edit) vertex store it’s adjacent faces/edges.

Ehh. . .is that kindof like winged edge stuff? Or not? I’ve found half-edge docs, but I don’t want to do that.

joeedh[/quote]

If you couldn’t find a document you were not looking at all.

Zarf[/quote]

And I looked forever it seemed like. … on Google, too.

joeedh

A quick question here. . .

I never could find a document on a winged-edge data structure. So in making winged vertex extrusion functions (am taking a break from that. . .soo complex) I simply made each (Edit) vertex store it’s adjacent faces/edges.

Ehh. . .is that kindof like winged edge stuff? Or not? I’ve found half-edge docs, but I don’t want to do that.

joeedh[/quote]

If you couldn’t find a document you were not looking at all.

Zarf[/quote]

And I looked forever it seemed like. … on Google, too.

joeedh[/quote]

Thats been the number one hit on google for ‘winged edge’ on google for at least a year…

Zarf