Don't you guys need/use 'smoothing groups'?

Before someone answers ‘there are sharp edges and edgesplit’, I’d like to say
that what I mean is if you use smoothing groups or sharp edges more generally, in
your workflow.

What Blender does now is split the vertices with the Edgesplit Modifier based on sharp edges
or angles which is totally fine for internal use.

What really sucks though is that no exporter (that I know of) supports smoothing groups as a sort of a property in obj or fbx (as major programs do, I don’t know if they’re stored as a parameter or in normals), but again it splits the mesh.

This creates a bunch of problems if you have a pretty complicated object you need to transfer to another program you need to then merge the vertices and recreate the sharp edges in it or if you want to export it to Xnormal for baking and create the cage withing Xnormal.

Almost the same with importing smoothing groups, there was an option to do it in the obj importer that didn’t work for a long time, but I reported it on the bugtracker and now it should be there in the latest builds.

But really, is there so few people that use it, so that it’s completely unrecognized?

More people would use them if Blender had them. As it is, the devs have been really stubborn about this and since sharp edges are technically superior (compatibility be damned), that’s unlikely to change. Well, as long as you’re exporting to your own engine, the split vertices are pretty much irrelevant - they’d be split anyway at some point. But for working with an established engine like UDK it’s pretty sad.

What do these smoothing groups do anyway?

Just curious because I knocked out a quick .obj parser a couple afternoons ago to figure out how to use python Spark and saw that’s one of the things that needed to be parsed/imported.

You know what smooth shading and flat shading does, right? In Blender, if you generally want smooth shading, but you want some edges to remain sharp, you mark those as sharp and put on an edge split modifier. Smoothing groups used in max, maya, UDK, etc designate per face which faces get smoothed together. Smoothing only works across faces in the same smoothing group. Where two groups meet, the edge is sharp. Blender’s implementation is more powerful, because the faces you’re smoothing together don’t have to form a region. And of course in the end it comes down to the same thing because engines have to split the edge vertices while loading the models. But sadly it makes exchanging low poly models with other applications difficult.

per edge smoothing is fine…

comparability is an io issue and can be fixed in the exporters.

I think that the fbx exporter has options for using faces or edges for smoothing for example. (not at my pc right now to check).

besides smoothing groups is old 3ds cruft. Maya doesn’t use them… it just converts on io.

you won’t find anyone complaining that maya doesn’t support them either… because per edge is clearly simpler to use and gives the same result.

Sure it is. Like I said, it’s better. It’s just that some game engines still rely on them.

I didn’t know Maya doesn’t support them, thought it did.

Wings3D can use edges marked as sharp or smooth and it is able to import OBJ from applications using smoothing groups thanks to that, it is even able to export/import ngons.

That is one of the big shortcomings of Blender if they really want it to be used more widely.
Not being able to keep the edges sharp/smooth or even ngon informations imported or exported in exchange formats like OBJ is a real issue.

Hopefully once the devs manage to get back the many open bugs under control, we’ll start see improvement on all those already included functions and features that frankly need improvement.

I thought I was clear enough, the way Blender deals with it internally is perfectly fine.
And be it ‘sharp edges’, ‘hard edges’, ‘smoothing groups’ I don’t care it’s just a matter of selection.

And yes Maya doesn’t support smoothing groups per se but again it supports hard edges and exports them.

@MadMinstrel

Blender’s implementation is more powerful, because the faces you’re smoothing together don’t have to form a region.

It’s not, you can do exactly the same splits with smoothing groups but it’s easier to use and more intuitive.

My only point is for Blender devs not to ignore it and just import them and export like other programs do.

http://i.imgur.com/Beuta.png

So how would you do this with smoothing groups?

My bad, Blender (at least current builds, in the past it couldn’t do that) is able to import sharp informations for edges from Wings3D through the OBJ format, it’s the export that is losing those informations (unless you apply the edge split and so double the vertices in such edges, not an acceptable workaround in some work exchange conditions).

@MadMinstrel

You can assign your faces to multiple smoothing groups and it should be achievable, but maybe I’m wrong and not everything is achievable.

Anyway It would be tedious.

Edit: But more importantly I made something like that in Wings3d and exported with obj and it’s properly imported in Max.
(but it doesn’t convey which faces are in which group)

dirty trick to export hard edges to xsi from blender:

-apple edge split modifier
-export
-import
-select non-manifold edges and sign them as sharp edge (i dont remember what the name of hard edges in xsi)
-merge (remove doubles) (i dont remember the tool name in xsi)

But: I have worked in 6(!) games that uses Blender as main tool. So everything coming directly from Blender to our engine. And all the coders love the edge split thing. :slight_smile: And hates the smooth groups of Max…

Maya not really the same as Max, which has multiple smooth groups (and is annoying).
I prefer 1 smooth group, usually in maya via unlock normals then soften/harden edge (it’s not even called a smooth group as far as I know).

I am really not looking forward to farting around with this in blender, especially considering export to UDK.
‘sharp edges’ that are really splits in a mesh sound like a bad idea that stuck around.

Gee, thanks, MM! Thanks for signing up to implement them! :wink:

(Hey… that’s how “open source” grows.)

In other words: “Why, yes, we do! … Is it done yet?”

An interesting point to consider is that the GLSL view in Blender itself doesn’t respect edges marked as being “hard”. Obviously, hard edges for real-time display are not as easy to optimise/code as smoothing groups.

Smoothing groups arem’t all that easy to implement properly. I’ve written an exporter out of max once and it got a bit complicated when it came to smoothing groups. Since every face can have 32 smoothing groups

And other problem of edge split is: it can multiply the number of vertices.
For example this is a problem in realtime graphics…

Well, this happens anyway, no matter of which 3d prog you use. Hard edges require two vertex normals per definition and vertices can’t store more than normal each.

Clang, common mis-conception alert! you’ll have to pay for those extra verts if they’re real or virtual. it makes no difference at rendertime

Actually edge split or smoothing groups mean multiple normals at a vertex which means that ultimately you are “splitting” the vertex into multiple at export or render time.

whatever method you use (except a normal map) you are going to end up with multiple vertices if you want hard edges in a realtime app.

Edge split in blender physically splitting the vertices is only a problem if you intend to add other modifiers afterward (eg subsurf then displace) but in that use case you’d be better 9 times out of 10 using a crease rather than a soft/hard edge.

neither does the renderer…
you need an "edge split nmodifier for glsl or render to show you those hard edges…

then again, this isn’t really an issue is it? you won’t see the effect of a crease edge either unless you add a subsurf modifier…