Modifiers And Ngons

June 12, 2009 at 8:35 pm 59 comments

Note: As always, I do not suggest testing the bmesh branch as yet, since it is fairly unstable at the moment

Subsurfed Ngon

Subsurfed Ngon

I’ve been working a lot on the modifier system (and the massive amount of code that drives it and much of the rest of the mesh system).  I’ve successfully gotten through the bulk of the major changes; modifiers now have the ability to process ngons, though at the moment most don’t.  I did manage to get subsurf to work with them, though interpolation currently doesn’t work (so UVs, vertex colors, etc won’t work properly with it).

The modifier system was one of the last big refactor hurdles; and while I still have a lot of work to do getting what I have stabilized, once I’ve tracked down most of the bugs I’ll be free to start concentrating on getting mesh editing to actually work again.

There will be some caveats, in the short term.  Constructive modifiers (other then subsurf) will not handle ngons, instead they will work directly with the triangulated mesh data (which means if you apply them, you’ll get a horrible mess).  Some can be easily rewritten in bmesh; for others, I need to see if a simpler, faster solution is possible (one of the advantages of the array modifier, for example, is that it’s fast and doesn’t take much RAM, both of which may not be true if it were simply recoded to use bmesh).

At this time, I’d appreciate it if people could give comments on the things they really hate about the old mesh modeling tools.  That way I can hopefully get a better mental picture of key mistakes not to repeat (which would save me precious time having to fix them later).

Development Notes

Mesh data now represents faces in two distinct layers: MFaces (which is limited to triangles/quads, and is the original structure used to store faces) and MPolys.  MPolys are the “real” faces, while MFaces store the triangulated form of the mesh.

DerivedMesh now makes this distinction; I’ve renamed all the interfaces for MFaces, to make it clear they operate on “TessFaces” now.  For example, ->getNumFaces became ->getNumTessFaces.  I then added in interfaces for MPoly, using an iterator approach for simplicity of implementation.

The iterator interface is completely different then how the rest of derivedmesh works; most of DerivedMesh assumes a fixed size per geometric element (e.g. vert/edge/face), while MPolys are actually a combination of the MPoly struct, and an array which defines the face boundary.  Because of this, I felt it would be unnecessarily awkward  to carbon-copy the original MFace interfaces, which generally work by duplicating specific arrays in the mesh for easy access.

If people are interested, I can post the relevant new data structures.  They’re not particularly complex; Mesh and the M*** structures are for storing object-mode data, so they’re designed to be simple and fairly light on RAM.  Oh, and as always, donations are nice. 🙂


Entry filed under: Uncategorized.

BMesh Status Status Update

59 Comments Add your own

  • 1. Dead Eye  |  June 12, 2009 at 9:32 pm

    Oh yeah I can give some advice on stuff that I find infuriating in Blender.

    *The cut tool should be re developed to allow users to cut from face to face or vertex to vertex or any combination there of. 3ds Max uses a good system for a cut tool.

    *The spin tool needs to be reworked to allow the old and new functionality. For example you should be able to chose to spin around the cursor or an edge. If you spin around an edge it should not create more edges. Think of a extrude function but one side is always restricted to an edge and the other is restricted to a 180 degree curve.

    *Smoothing groups would help but I don’t know if that is your department.

  • 2. karamelo  |  June 12, 2009 at 10:09 pm

    -No offset tool.
    -Unable to fill a non-quboid shape with a grid.
    (I mean this:
    -No pen tool.
    -No arc tool.
    -No … cad tools.

    Thanks for asking.

  • 3. karamelo  |  June 12, 2009 at 10:11 pm

    Sorry for double post, correct link:

  • 4. thelowlander  |  June 12, 2009 at 10:40 pm

    the cut tool does allow you to cut from vertex to vertex, use ctrl to snap. but I’m unsure what you mean by face to face. Do you mean you click on a face and it will create a vertex there, and on another face and it will create a cut along the shortest route, creating vertex when it comes across and edge?
    smoothing groups do NOT help!! Sorry but they are a messy approach to something we have a cleaner system for. we can set faces smooth and solid, we can set objects smooth and solid, and we can set edges to be sharp!!! This single fact, that we can make edges be sharp, boils down to EXACTLY the same functionality that 3Dmax’s smoothing groups do. In max you can make as many smoothing groups as you like, but they are processed the same way as our “set sharp” method.
    Smoothing groups are a lot harder to manage and keep track off. Please… NO smoothing groups. We have something superior.

    • 5. Dead Eye  |  June 13, 2009 at 7:14 pm

      Oh I didn’t know there was a set sharp function. That was one of the things that always frustrated me.

  • 6. Gur  |  June 13, 2009 at 12:45 am

    I don’t really hate the tools in Blender, and I haven’t used any other program except for trying Modo for a short period. The thing with Blender is that it feels hard to have control over the mesh when modeling, everything works fine when you try do do organic modeling (since it doesn’t have to be so perfect) but you feel a little crippled when doing for example non organic subdivision modeling things where you want much control even when the shapes get a little bit more complex, but it may be that it’s just me that’s bad at it and not the tools since I don’t know what to improve on them.

    What Dead Eye wrote, on the cut tool is something that would be nice, I’ve seen some videos of subdivision modeling using 3DS Max, and the cut tool just looks so powerful, sticks to vertices and edges for more control and all.

    Another thing is the falloff tool, it works fine in Blender for doing small bump and hills, but you don’t have much more control over it, not like in Modo where you can put out a shape for the falloff tool to follow, like with linear falloff you put an object that looks like an armature (with one end being thick and the other one like the tip of a needle) in the 3d view you then can move it around and put it where you want with the “needle tip” being the point that affects the model the least and “thick” one affects the most, then just select the verts/edges/faces that you want to scale or move and it will follow the linear “armature like object”, it’s just so neat and it gives so much control (I cant overuse this word it seems :P) which is what I would want in Blender.

    Sorry for writing so much, but I hope it’s not all junk..

  • 7. Gur  |  June 13, 2009 at 1:38 am

    I don’t really hate the tools in Blender, and I haven’t used any other program except for trying Modo for a short period. The thing with Blender is that it feels hard to have control over the mesh when modeling, everything works fine when you try do do organic modeling (since it doesn’t have to be so perfect) but you feel a little crippled when doing for example non organic subdivision modeling things where you want much control even when the shapes get a little bit more complex, but it may be that it’s just me that’s bad at it and not the tools since I don’t know what to improve on them.

    What Dead Eye wrote, on the cut tool is something that would be nice, I’ve seen some videos of subdivision modeling using 3DS Max, and the cut tool just looks so powerful, sticks to vertices and edges for more control and all.

    Another thing is the falloff tool, it works fine in Blender for doing small bump and hills, but you don’t have much more control over it, not like in Modo where you can put out a shape for the falloff tool to follow, like with linear falloff you put an object that looks like an armature (with one end being thick and the other one like the tip of a needle) in the 3d view you then can move it around and put it where you want with the “needle tip” being the point that affects the model the least and “thick” one affects the most, then just select the verts/edges/faces that you want to scale or move and it will follow the linear “armature like object”, it’s just so neat and it gives so much control (I cant overuse this word it seems :P) which is what I would want in Blender.

    Sorry for writing so much, but I hope it’s not all junk..
    And sorry if I double post now, but it just doesn’t show up (ignore this sentence if I don’t)

  • 8. FishB8  |  June 13, 2009 at 4:32 am

    Are you working on the current mesh code? I’d say try to coordinate your work with the bmesh code base. (unless the work needed is the same regardless of the mesh code base)

    It would seem a waste if you have to recode everything once the bmesh code is intigrated.

    -We need good better boolean code. If you monitor the bf-committers mailing list, there was some nice boolean code from another project released recently and it’s library is being integrated. Looks very promising. Might look into it if you havn’t yet.

    -IIt would ne nice to be able to select a set of planer faces (or even non-planer would be cool too) and have it replaced with a bunch of square or triangular faces (sort of like what you get when turning a NURBS surface into a mesh). The use for this is when you have a big surface that is really nasty with the faces. Extruded test is a great example. It would make for much cleaner surfaces, which in turn produce cleaner results when applying modifiers. Try to apply a modifier to extruded text, It can get ugly.

    @Dead Eye: Smoothing groups suck. Hard / soft edges give much better control.

  • 9. Adam Weber  |  June 13, 2009 at 5:20 am

    The bmesh system by default should solve the most frustrating thing for me: sections of the mesh getting deleted when I remove a vertex or edge rather than putting an ngon in its place.

    Most of the things that I find infuriating have to do with modifiers rather than the mesh/modeling system itself, but if there is one thing that will make this seriously awesome for my personal workflow that would be the ability to hilight potential mesh problems when I’m wrapping up such as ngons, poles, non-manifold geometry etc. That would make cleanup go a ton faster.

    Yeah, I already told you that a few weeks ago, but that feature would be a godsend to me.

    Keep up the good work, I’m always looking forward to updates.

    • 10. Dead Eye  |  June 13, 2009 at 7:24 pm

      I noticed that the Backspace key does not do anything when you have an edge, vertex or face selected. This might be a good key to set up to remove unwanted edges instead of deleting them. a way to create n-gons if you will.

  • 11. Billrey  |  June 13, 2009 at 6:46 am

    I’d say you could save some time by not implementing the old Spin, Spin Dup and Screw tools – they are really arcane and almost useless.

    Instead, these features are exactly the kind of thing that makes sense as a modifier, so that you can non-destructively continue working on a profile (of, say, a wine glass) and the modifier lathes the profile into a cylindrical shape. Spin Dup and Screw can simply be options inside that modifier.

    The advantage is also that you could then spin around an arbitrary axis, and even specify a ‘spin object’ much like the Array modifier lets you specify an ‘offset object.

    On a different note, the extrude tool is already incompatible with 2.5s ‘tweak’ workflow, because after your extrusion is performed, Blender jumps into the Grab tool. This makes it impossible to tweak the extrusion result using the Redo Last Operator. Translation should instead be part of the extrude tool itself.


  • 12. michaelw  |  June 13, 2009 at 7:48 am

    Others have already mentioned the “cut” tool, and there have been reponses not “clear” on what is meant….

    I thought I’d describe it in detail!

    Maya, max, modo, wings3d (and blender through the “knife pro” script) all offer a cut tool that adds vertices to edges when you click on an edge

    a sequence of clicking on edges adds edges in connecting the new vertices…

    This is nicer than using the “knife” tool where a selection of data to be operated upon needs to be made first which slows the workflow

    ****with this sort of tool “selection” and action are the same thing!…*****

    Wings and Maya allow you to “skip over” an edge(or edges)… because the line to the last vertex created with the cut tool crosses the intermediate edge (or edges) a vertex is added on each intersection and edges created to connect them (obviously this is view dependant… and backface culled)

    the silo cut tool doesn’t allow that last functionality, but it also allows clicking within the middle of faces (and adds vertices)

    with silo if you click “off the mesh” and drag then you get a behaviour like the current knife tool in blender… but acting as if all edges in the mesh are selected (when indeed none are)

    in silo and wings, if you select edges first THEN operate the cut tool you get behaviour like “subdivide” in blender…

    Basically, all of these tools are at there core the same thing, and go hand inj hand with ngons! this is really the only functionality “missing” from blender, and is the number one tool for box modelling !

    the “knife pro” script is asgood as it gets in blender now, but it’s messy and not nice to use because of the lack of ngons

    On other notes… I agree, Deleting edges should just “dissolve” the edge… the same is true for vertices

    Otherwise, blender gets it very right from a modelling point of view…

    I agree with many others posting here: “spin” really should be a modifier

    also selecting and visualisation could be good with more options! (eg colouring poles different as an option (and different types of pole having different colours for example.) This visualisation should be allowed to be enabled and disabled as it’s handy when you need it, distracting when you don’t!

  • 13. Andre  |  June 13, 2009 at 12:33 pm

    I would like to see things like bevel and extrude work well. They currently do, no complaints really.

    I have to echo what karamelo said, in that it would be very cool to be able to do chamfers and fillets. These could probably be done as scripts though.

    In addition it would be great to be able to use curves more without having to convert to mesh, such as doing a real extrude on a curve and being able to manipulate the points on the extrusions as well, extruding the new curves etc. Tall order, so no expectations.

    I could be wrong and it might be possible with lofts, but I don’t think so.

  • 14. gustav  |  June 13, 2009 at 4:23 pm

    I agree with michaelw. Blenders is already great for modelling . But a better knife tool and offset tool (silimar to this is the only tools I’m missing right now (and of course ngons! =).

  • 15. Gur  |  June 13, 2009 at 5:17 pm

    I have to second the offset tool, was in a situation once where I needed it, but after some time I found out that Bezier curves has an offset like tool (the Width slider under “Curve and Surface”), worked really well, but an offset tool that’s easier to find and work with would of course be awesome.

  • 16. FishB8  |  June 13, 2009 at 5:53 pm

    One thing I forgot that should be simple to do, and incredibly useful: direct access to an object’s origin. Right now there is no way (that I am aware of) to directly grab and / or rotate an object’s origin without moving the actual object itself.

    Currently I get around it by creating an empty, and moving / rotating it to how I want to orient the object’s origin, and then use the “Axis Orientation Copy” script. But that’s a bit of a pain to do and should be much quicker.

    It would be nice to have an “Axis Mode” in addition to the “Object Mode” and “Edit Mode” (or something similar) to allow quick access to the object’s origin (or axis or whatever you want to call it)

    • 17. Dead Eye  |  June 13, 2009 at 7:30 pm

      Yes this is most differently needed.

  • 18. FishB8  |  June 13, 2009 at 6:14 pm

    @Billrey: I think what you are talking about is turning edit mode into a modifier

    • 19. Billrey  |  June 18, 2009 at 8:52 pm

      Take the array modifier, for example. Array could also be implemented as a one-off tool, though it wouldn’t be nearly as useful.
      Similarly Spin(lathe is a better name) is much more powerful as a modifier than an operator tool, because it is non-destructive. At any point in time you can change the number of steps after applying the effect – you can even animate it!

  • 20. dEspadas  |  June 13, 2009 at 6:28 pm

    Just something that I think would be really nice, specially when using ngons: a way to select, highlight and cycle through the n sided faces (be it 3, 4, 5, 9 faces or whatever). I think Modo or Silo has something similar and it is a time saver when you need to clean the mesh.
    So something in the UI like “highlight n sided faces” or “go to next n sided face”, with selectable n, would be a great add to mesh editing possibilities.

    Maybe the same principle to vertex, so you get info about the number vertices that has 3, 4, 5 or more connections and ways to select or highlight them to easy editing.

    In the same spirit, more feedback about what is on the mesh is good too. So, info about the number of vertices, edges and faces (I would suggest tess faces for this info), and if you “click” on the face info it shows the number of 3,4,5… faces. A expanded way to deal with the info that is already in the top bar, I guess.

  • 21. Dead Eye  |  June 13, 2009 at 7:41 pm

    I just wanted to add two more things.

    I feel there is a need to have an operator window for every tool that allows the user to do an edit. For example the *extrude* operator would have a window that had a number for how much you would like to extrude and a button for executing the operator. This may be one of the aims of blender 2.5 so I may be just repeating what is already going to happen.

    The other thing is that it would be really cool if one could move UV projection origins. For example when you lay down a *box* UV projection it would be cool if you could also move and scale the box to *fit* the mesh. Maybe even add a *fit* function to UV mapping.

  • 22. bunny  |  June 14, 2009 at 2:55 am

    I wrote a long post before realizing that all of our suggestions echo each other: cut tool, bevel, inset/offset.

    Here’s some threads about inset/offset at BA:
    And macouno wrote a script way back when:

    Longish thread about bevel:

    Also, a mesh script I like a lot is Crouch’s LoopTools:
    The only problem is that it doesn’t work across the center-line of a Mirror modifier (like for a lowpoly character’s neck). I don’t know if this is an issue with EditMesh, the mesh script interface, the Mirror modifier, or just the script itself. Actually, this last one should probably be ignored until I ask Crouch about it.

  • 23. Fobsta  |  June 14, 2009 at 3:20 pm

    Many of the current Blender polygon modelling tools destroy the uv coordinates.

    It would be great if the new bmesh tools preserved the poly uv info. For example this would massively speed up the creation of LODs for games if after I’ve stripped out a load of edges I don’t have to go back in and correct the uvs

    thanks for listening and all the hard work

    • 24. Axon D  |  June 22, 2009 at 1:50 am

      Yes, this would be great. and going further, a kind of Preserve UV function like in Max is good for adjusting some problems in a low poly version of a mesh.

  • 25. dEspadas  |  June 14, 2009 at 7:33 pm

    +1 for trying to keep UV, even if I edit, delete or recreate a face.

    some other ideas that I often wishes for:
    – possibility to slide vertex and faces too, not just looped edges.
    – possibility to slide with “constrain” the edge, ie. it will just “move” the edge in the arbitrary axis of the loop, without changing the shape/size of the loop to match the next loop.
    – multiple edges slide.
    – a more advanced way to “make faces”, since we will have the ngons possibility, where I could tell where I like my edges to go before it makes the faces. Something like “hinted auto”, don’t know.
    – more options to subdivide the faces: sub with tris, with quads, with Ngons.
    – Join tris to ngons, join quads to ngons, split ngons to quad, split ngons to tris. ( this way I could rework the faces with the suggested knife tool :P)
    – A “view tesselation”, where blender shows me the mesh as triangles for export or render, without actually tesselating the mesh.
    – Possibility to rotate edges in this “view tess” mode.
    – ways to align vertices, edges and face, ie. align to global z, align to local x, align to target y, and so on…
    – more ways to select vertex, edge and face, that works like the edge loop selection without the need for an actual loop, ie. select all connected vertices that has a close enough z position.
    – a “distribute” tool that “evens” the spaces between selected loops, faces, edges or vertices in a axis.
    – smooth loop, where it tries to “smooth” vertices positions on any given axis.

    Hummmm, there is too much already, but it just something to think about, since you asked for. 😛

    Hope it can helps, and thanks for you hard work! 🙂

  • 26. vykelt  |  June 14, 2009 at 10:53 pm

    I’d like to agree with those who requested the ability to drop a vert or an edge and have it just become an Ngon, but but maybe just add the option to have it go to Ngon or just delete in the delete menu

    Thnx and keep up the awesome work. I’m looking forward to seeing your results.

  • 27. joeedh  |  June 14, 2009 at 11:46 pm

    So, here are some responses. They’re in order of posts.

    @DeadEye: A better cut tool (well, we call it knife) is planned to be redesigned, yes. We already have similar functionality to smoothing groups with sharp edges, their just not integrated well (you have to add an edgesplit modifier, which is actually one of the slowest modifiers we have). The spin tool idea sounds good, I’ll add it to my todo.

    @Karamelo: I think an offset tool is a good idea. As is being able to fill an outline (or an ngon I guess) with a grid, though that last might be better left for some clever scripter to do first (so someone else can figure out the best algorithm for that 🙂 ). What are pen/arc tools, I’ve seen these mentioned before, but I don’t know what they are.

    @Gur: That’s a cool idea, but probably outside the scope of this project.

    @FishDB: Bmesh will allow integration of much better booleans code, I don’t
    know if it’ll end up being Carve or not though.

    For your second idea, it sounds like what your proposing is identifying
    selected regions of faces, finding their boundaries, deleting the interior
    faces, then filling the space with a grid? That’s a similar idea to what
    Karamelo said, but with some cool twists I think. 🙂 So you could
    basically select the front faces of a converted 3d text mesh, then
    turn them into a nice looking grid 🙂 Nice and easy.

    @Adam: there’s already a “dissolve vert” tool.

    @DeadEye: interesting idea, I kindof like it, not sure if other devs would though.

    @BillRey: recoding spin/screw as a modifier is a good idea, I think. Wonder how hard would it be as a bmesh modifier. . .hrm, still need to code some stuff so bmesh modifiers are nice and easy to code. About extrude, yeah it is annoying how translate overrides the redo panel. Extrude is a compound operator (almost like a macro) so I imagine the best thing to do is just list both extrude and translate in the redo panel?

    @michaelw: I plan on making a flexible knife/cut tool. basically, you’ll be able
    to add points anywhere you want, on edges, verts (it won’t add a point there obviously, it’ll just use the vert), and faces, and once you’re done the tool will figure out which things to cut. this will all be backface culled, and not rely on selection. your visualization ideas sound good, btw.

    @Andre: what are chamfers and fillets, sorry rather tired and can’t remember 🙂 oh and curves aren’t related to the mesh code, really 🙂

    @FishB8: I agree. I’m not totally sure how this would work, but I would like to see this happen (not sure if it will as part of this refactor though).

    @dEspadas: those are good ideas, I have them in my todo list for when I get around to that sort of thing 🙂

    @DeadEye: uv stuff isn’t really part of this project, and I’m not sure how the UI for tools will end up looking.

    @Fobsta: Better behaviour for decimate is planned by other devs, I believe. Nearly all mesh tools preserve UVs; decimate, despite being imho a somewhat important tool, does not (it uses rather ancient code). I’d suggest trying out the PolyReduce script in the Mesh menu (in editmode).

    @dEspadas: Making faces from a “net” of edges is something I want to do, though I’m still not quite sure how the algorithm for that will work. Also, my plan (hopefully) is to make a more advanced tesselator that’ll not suffer from stretching or other interpolation issues (though it might not make models suitable for realtime use). Smooth

  • 31. exfate  |  June 15, 2009 at 1:29 am

    An Inset tool would be nice. Essentially the scaling in/out part of a bevel, without any extrusion height. Of course, using a bevel tool and just not extruding would work, but I think it’s better as a separate tool.

    The ability to extrude a region around local normals its faces. Meaning an extrusion where each face follows its normal, but they are extruded as a region, joined together.

    With tools like inserting a vertex along an edge, or connecting two edges, there should be the ability to specify an optional number of vertices/connections numerically so you can do something like insert 3 new evenly spaced vertices/connections.

  • 32. Max Puliero  |  June 16, 2009 at 6:34 am

    thankyou very much!!

    you are amazing 🙂

    I think that the main problems now are 2:

    1- support much much much more polygons… like 2 bilion eheh, just because blender using the sculpt tool.

    2- a great normal optio nscale, an example: if I have a sphere I can extrude to 0 and moving along the normal by the alt+s function, but If I want just scale down the size along the normal I can not .


  • 33. Max Puliero  |  June 16, 2009 at 6:36 am

    sorry I have to add another one.

    can adit 2 different mesh in the same time, also the uv 🙂

  • 34. michaelw  |  June 16, 2009 at 8:57 am

    Great to hear your responses Joeedh!

    dissolving edges by “making” faces might be similar to what is in now, but does seem counter intuitive really… I guess blender “got away” with it because it didn’t support ngons, but now this just seems weird!

    wrt deadeye’s backspace idea,

    it does seem to me that with ngons the “what do you want to delete today” menu is a bit of a pain really…

    having a mixed “delete” menu seems like a bad idea… slowing you down as you stop and think do i want dissolve or delete?

    I guess the “issue” is that unlike other software you’re not in “edge” mode or “vertex” mode etc… so for delete you need to offer a menu..

    Is the same true of a “dissolve” command though? if the user is in edge mode and triggers a “dissolve” command the intention is clear… the same for vertices mostly (though I guess the user might intend to disolve the verts or edges in this case… for faces… not immediately apparent… verts? edges? what if the selection mask is set to vertices, edges and faces?

    it seems to me that this doesn’t matter:
    it wouldn’t be “bad” to assume the user always wants to dissolve the edges in the current selection except when the selection is a single vertex or vertices that don’t share edges, in which case those parts of the selection would “dissolve vertex”…

    …or you could add a “popup” on dissolve if the intention is unclear..Dissolve: edges? | vertices? though is this necesary? Obviously a vertex with only one edge, “dissolving” it is the same as deleting it….

    so a nice compromise perhaps IS to have “dissolve” as a separate command… with custom keymaps the exact key it’s mapped to can be less of an issue.

    but “backspace” would seem a very good default 😉

    With a “dissolve” command I’m sure there are some circumstances that actually are identical to delete, but from the user perspective not having to worry about the distinction is actually more friendly…

    On another note just to get radical:…because “dissolving” vertices with one edge is actually == deleting them…maybe “delete” only deletes faces, everything else is actually “dissolve” so the “what do you want to delete today menu becomes: Dissolve | delete IF the selection contains faces… else just “dissolve”… this last point I’ve not thought through fully, but it seems …possible

  • 35. Daaark  |  June 16, 2009 at 9:01 am

    INSET please.

    It’s so painful not having it. I know it can be worked around with an extrude and then a scale, but it can also cause bad problems if you aren’t paying 100% attention or lose track.

  • 36. Justin  |  June 16, 2009 at 5:08 pm

    Sorry, I did not have time to read all previous posting…so there may be a double request/annoyance in here.

    1. simple cut tool, without the addition of triangles to adjacent faces(knife exact)…this is obvious.

    2. cut tool..connect the dots, click to create a again for the next point…etc…etc(look at silo/3dsmax/trueSpace/modo)

  • 37. joeedh  |  June 16, 2009 at 6:50 pm

    @Justin: I plan on doing both. also, I’m going to make it so subdividing one edge of a quad doesn’t produce triangles.

    @michaelw: The delete menu will probably have to be left much as it is (people are too used to having it, and I’m sure there are plenty of situations where you need it). Making a separate dissolve hotkey is possible though.

  • 38. michaelw  |  June 16, 2009 at 7:35 pm

    Ha ha, i figured as much! Dissolve hot key’s enough for me!

  • 39. Briggs  |  June 17, 2009 at 2:54 am

    Michael W:

    Dissolve edges/Fuse faces is kind of an interesting UI question. Internally it shouldn’t make any difference to the code; ie a face selection can be fed to the fuse faces BMOP directly or we can convert an edge selection to a face set then send that to the BMOP.

    From a user standpoint it might be useful to support both I think. Edge dissolve probably has more compatibility with other applications like wings/silo, but one thing I have noticed is its much easier to brush/lasso select a group of faces than the edges connecting them. Both approaches have merit I think, and supporting either should be simple (Wings already does I think)

    The ‘what do you want to delete today’ menu (I thought I was the only one who called it that) is kind of tricky and its variety of options each have their own uses depending on what you want to do and that cannot be defined fully within the context of selection mode IMO. However I think having dissolve there is a mistake, because dissolve and delete are conceptually two different types of operations. One is is taking away what is already there without actually changing what is left, the other is taking something away while leaving whats left over in a modified state.

    The rest of your points about selection mode and context strike at the heart of what is a very problematic area for Blender’s mesh code, and actually quite controversial. Selection modes are, as you point out more like ‘masks’ than actual modes, and this leads to all kinds of problems, including a broken edge select mode for years now (although most people never seem to notice this it does in fact stop some tools from working properly).

    I had a talk with Ton and @ndy about this at Bconf one year. My intention was to make selection modes less like a ‘suggestion’ and more like a rule. Part of this plan was also to make tools highly sensitive to selection mode. Unfortunately it became apparent this would be a huge shift and actually potentially create more problems than it solved. I dropped the issue completely after that since all attempts to solve it over the years have seemed to be doomed to failure.

    So one solution that would work within the current selection/mask framework is inserting all kinds of ‘special case’ if/then/else logic into the interface code to call different tools based upon some sort of context hint like what type of elements are currently selected (I think this is what you were getting at). The danger here is that its completely opaque to the user and subtle behaviors can actually lead to frustration or appear as bugs. For instance the f-key tool in trunk has some corner cases that for years I was unaware of as a user until I read the code. So getting really tricky with these ‘hints’ might be very harmful and I’m left wondering if there is a better way…


  • 40. Briggs  |  June 17, 2009 at 5:13 am

    I actually have been thinking about the x-key menu issue some more and have to retract some of my earlier statements. I think it can be removed and made dependant upon selection mode while retaining all the current functionality. Here is what I am thinking should be done as far as breaking this into other tools.

    remove edges – x-key delete edges and faces option
    remove faces – x-key delete only faces option

    delete edges – x-key delete edges option
    delete faces – x-key delete faces option

    dissolve vert
    dissolve edge
    dissolve face

    mode: Vertex
    x-key – delete vert
    ctrl-x-key dissolve vert

    mode: edge
    x-key – delete edge
    shift-x-key remove edge
    ctrl-x-key dissolve edge

    mode: face
    x-key – delete face
    shift-x-key remove face
    ctrl-x-key dissolve face

    delete all would be removed. Its a redundant feature.

    Addendum to the remove edges feature:
    This would be equivalent to the delete edges and faces feature currently in the x-key menu.
    However as it is currently exhibits some strange behaviors that should be treated as bugs and changed.

    Also removing face/edge dissolve from the f-key menu should be done.


  • 41. michaelw  |  June 17, 2009 at 11:40 am


    First up i like your proposal.

    “However I think having dissolve there is a mistake, because dissolve and delete are conceptually two different types of operations”

    (apologies for starting on the most minor points first…) I agree…

    ….which is why I question having them as variations on the same key in your new proposal… I know that in blender similar commands are grouped like that, but I’d prefer “instant and un-modified” access… you see, for modelling I’m more likely to “dissolve” than “delete”…. (but maybe that’s just the “Wings” talking!)

    still, if the keymaps allow multiple keys to trigger the same action it’s not an issue… (like “x” and “del” trigger the same action I’d have ctrl-x and backspace (for example) both trigger “dissolve” (and still allow “f” in face mode to “dissolve faces”)

    so to check functionality:

    “Dissolve vert” removes the vertici and all edges connected to the vertici…
    “Dissolve edge” dissolves the edge… does it remove (delete) “orphaned” vertices? (ones that end up with no edges)
    “Dissolve face” dissolves all the shared edges within the selected faces… if only one face is selected does it do nothing? or delete it?

    the “logical” answer to those two questions is to keep orphaned vertices and to do nothing if only one face is selected…in both cases the user should have chosen delete if that was the intention….

    ….well maybe, but Personally I think it’s nicer to delete in those cases even though the user is actually “dissolving” as a courtesy for cleanup….

    Two things spring to mind… I’m unclear on what happens with multi select, or whether your proposal even allows it….
    Your explanation is clear with one mode… so I guess that you’re disabling it….

    Just thinking through if your intention was to keep multi select:

    it seems that for DISSOLVE:
    edges trump verts and faces trump edges…

    that is to say:
    in “multi mode” then, if faces are “active” in the mask then it doesn’t matter what else is in the mask…for these purposes we are in face mode

    if edges and verts are “active” and faces are not ….then for these purposes we are in edge mode

    Those two rules cover all multiselect posibilities…

    for “DELETE” would that work though? I’m not so sure… (meaning there will likely be lots of users that have a problem with that and would rather be given the old option… )

    …but that only arises when you allow multiple modes, which is why I’m thinking you’re proposing to disable “multimode”?
    There will always be those that don’t like that either…

    I like the proposal, but if that can’t be agreed I’d hope the dissolve logic could work as above…

  • 42. Briggs  |  June 17, 2009 at 3:05 pm


    Your right I ended up contradicting myself there a bit. Although I feel grouping the dissolve tool in with delete using the second method is a lot less of a logical error than having it in the delete menu. I can’t back that up though, it just ‘seems’ less wrong to me.

    As far as defaults go, its really difficult to say what is appropriate here. Different people are going to approach modeling different ways. 2.5 should give people the option to change it if they don’t like it.

    As for the dissolve tools….

    Dissolve vert would remove the vertex and all edges connected to the vertex, yes.

    Dissolve Edge would fuse the two faces that are incident upon that edge. I’m not sure what you mean by ‘oprhaned’ vertices since it operates exclusively by fusing faces. Could you give an example of what you mean (pictures always help 🙂

    Dissolve Face with one face selected should do nothing I think. Having this be a proxy for delete gives rise to the ‘confusing/subtle’ behaviors that are opaque to the end user that I mentioned before. I feel the same thing about invoking delete in other situations as well.

    So in general I think a ‘Do what I mean not what I say’ system is probably only going to satisfy some specific segment of users while confusing/annoying the others. I think its more important to be clear and consistent than overly clever with special cases. I could be wrong though…

    As for multi-select, I’m going to do a 180 on my previous stance that it was important enough to be preserved. It really is a niche feature that has some really annoying issues attached to it. Holding up important cleanup/clarification of mesh tools because it might not fit with such an esoteric feature is probably not useful. So personally I think that going forward no special effort should be made to make B-Mesh tools work well in multi-select mode and its inclusion in Blender can be evaluated at a later date. If at that time its deemed it’s still a good fit/workable it can be decided what changes need to be made to tools to accommodate it. Of course others might object to this approach, but trying to please everyone is actually one of the reasons that B-Mesh has taken so long to emerge…


  • 43. michaelw  |  June 17, 2009 at 5:38 pm

    [quote]Dissolve Edge would fuse the two faces that are incident upon that edge. I’m not sure what you mean by ‘oprhaned’ vertices since it operates exclusively by fusing faces. Could you give an example of what you mean (pictures always help 🙂 [/quote]

    I was confusing myself!

    I was thinking of the case where you have edges on a border (only one face attached) or edges with no faces attached… By your description here, “dissolve edge” would do nothing…. I was still thinking “delete”

    …..a symptom of the “do what I mean not what I say” mindset I was writing from!

    It must be a nightmare with so many opinions!

    Multi select is one of those features I’ve always thought was “cool” and “nice”, but actually I can’t think of a single time I’ve used it for “active work” rather than just playing around!

  • 44. michaelw  |  June 18, 2009 at 9:11 am

    … just seen the commit, great to see this progressing!
    It makes me wonder about when “dissolve” should mean delete… interesting for ergonomics:

    Removed the old “Delete Edge Loop”, since dissolve
    edges pretty much replaces that [/QUOTE]

    Slightly premature?….Delete edge loop removes the vertices as well as the edges… so you get one loop of quads, which is what you want in this case…

    ….dissolve edges leaves the verts behind which gives you a loop of ngons and the verts are hard to select and clean up!

    But if you haven’t selected a complete loop you probably want the verts to stay behind!

    • 45. joeedh  |  June 18, 2009 at 10:58 am

      @michaelw: yeah, edge dissolve and edge loop delete will become two different tools, since dissolve should leave in the verts while loop delete should not.

  • 46. michaelw  |  June 18, 2009 at 11:50 am

    I’ll try and stop spamming here, but with the new move of “w” to spacebar and with the “multi select” mode gone we can explicitly use the selection mode for even more context…

    ie on the space bar menu … combine the current W menu and the ctrl V menu in vertex mode

    in edge mode it could be w and ctrl e menus for example

    and the same for face mode (ctrlF menu)

    The U menu as a submenu offto the side would be great..
    and some selection options …

    Apologies if this is all obvious but I’m liking where this is going a lot!

    • 47. Axon D  |  June 22, 2009 at 2:45 am

      I think this would slow down the workflow for we’ll have a bigger menu to read and find what we need. keeping them separated seems to me more explicit.

  • 48. n-pigeon  |  June 18, 2009 at 2:56 pm

    Tool for flattening the selection. For example I have 3 verts, I’m activating this operator and all 3 verts are flattened on their normal. For now I’m making it by using scaling handles with selected “normal”, but it’s not very comfortable and it’s hard to tweak to perfect flatness.

    It’s useful for keeping edge loops nice and clean. I thing silo and wings have this tool but I’m not very familiar with those apps.

    • 49. Axon D  |  June 22, 2009 at 2:53 am

      We can already do that by scaling to 0 in z normal orientation.

  • 50. Ed  |  June 18, 2009 at 5:16 pm

    I love most of Blender’s modeling workflow, but *please* fix the extrude. For instance, grab a face ring around a cylinder, and press extrude. All the faces will go in one direction… Most modeling tools have a far superior extrude, where each face will follow the face normal, but still stay connected to each other. The only current option is to use alt+S after an extrude, but this usually doesn’t work as expected as it seems to use vertex normals, and it just stinks anyway if you using automerge editing.

    Also it would be really nice to have an averaged Make Planar tool (IE, select some faces, press Make Planar, and they will become a flat plane that’s rotated flat to the average vertex positions). 3DS Max has one of these as an example and it’s absolutely invaluable sometimes.

    Finally, is there any chance with bmesh that we will get quick component highlighting? As I understand, we don’t currently have component highlighting because it was a really slow operation. It’s something I would kill to have.

  • 51. Justin  |  June 18, 2009 at 7:07 pm

    A LOT of comment heh!

    one more request, sorry if it is the wrong time or place….

    non destructive UV’s…..moving a vert recirocates movement in UV space in effect causing no UV distortion….This is possibly a Brecht topic though…

  • 52. Billrey  |  June 18, 2009 at 8:59 pm

    Goes to show this project is really cool. Joe, I hope you can make in for 2.5. Would really be awesome.

  • 53. RH2  |  June 19, 2009 at 1:23 am

    looking forward to your improvements.

  • 54. Axon D  |  June 22, 2009 at 5:50 am

    I saw the actual keymap for bmesh with a release on graphicall. The qwe used to switch the selection mode doesn’t seems optimal to me. I know it is not at a final state, but i would like to share some ideas on the interface. My suggestions go beyond this project i know but it’s here first, i think, that it could solves some problems.

    Obviously, with the bmesh integrated; there will be more operations possible. So, this means, more shortcuts needed. But for now, we’re using 3 very accessible keys for something that was already there. At a moment, we will miss something. It is true, and certainly desirable, that these shortcuts would be very fast and effective. In addition, its is less modal. But at the cost of what new possibilities? I think it is too many fast access buttons for only one purpose.

    The problem, right now, is that we have to make a decision in a menu and we have to read it and aim at our decision. This breaks the workflow so much that i prefer to use the shortcut 1,2,3 rather than reading and aiming. And it is a very complex and long movement to do CTRL+TAB then 1,2 or 3 but at least i can memorise it in my body for it gives me kinesthetic feedback. I now do it automaticaly.

    The problem is not the visual feedback of the menu. But its the fact that we have to aim in it, and this means reading it, and this stop our thinking. And this is not only the case in edit mode…

    -My suggestion: A button, like Qkey, could act as a modifier and wait (while pressed) for an argument. While in this Quasimode the mouse cursor would be deactivated for we would not have to aim in a menu. The argument expected would be a Left click, Mid click or Right click anywhere. It would bring a menu-like window which would only explains the choices for the new comers.

    -An example: To switch to VERTEX mode selection i would hold Qkey+LEFT click anywhere. To switch to FACE mode selection i would hold Qkey+RIGHT click anywhere. (A 3 button mouse is anyway essential to work with blender…)
    Try it, you’ll see, it’s maybe as fast as QWE. It has a syntactic approach, question left hand, answer right hand so it is fast.

    -Now, can’t this be used to other things? Some people talked about the messed up menu for delete with dissolve. What if holding Xkey+LEFT click would delete the selected VERTICES? And if holding Backspace+RIGHT click would dissoves the FACES? This brings FAST workflow in multiple choices situations and raise the level of consistency of the software (you understood that mid click means edge, right?).

    I know, you’ll say in the delete menu there is more than 3 options. But while holding the Xkey, all other keys loose their normal behavior for we are in the delete Quasimode. So, for example holding Xkey+Fkey would delete Only faces…

    -There is other situation where this new behavior could be used. For example, the selection of the rotation and scaling pivot. I never remembered any of the shortcuts for they are too complicated. Did you?
    Holding Period+Left click (Right click if mouse is reversed) would pivot around the cursor, this is logical for it is THE button we use to place the cursor. Holding Period+Right click (Left click if reversed) would pivot around the active selection for it is THE button we used to make our selection. Holding Period+Mid click would pivot around median point and so on…
    Wouldn’t it be great?

    -Let recapitulates. It is fast, kinesthetic, it brings consistency, it is syntactic, it saves shortcuts, it is a quasimode menu and keeps the “do what i say” paradigm. (I dont want blender to think for my self, i want to converse with it, and i know what i want. And Blender is the software i know that gives me the most this impression)

    I know it goes beyond the scope of this project but if some developers are aware and interested in this powerful behavior they can talk to the others and make it a new way of choosing some modes in blender 2.5. Maybe it is possible to do that in python with the new customizable interface.

    Give feedback if you think it is a good idea or a bad one. One way or another we will have the best 3d software of the solar system. 😀

  • 55. joeedh  |  June 22, 2009 at 6:40 am

    @Axon D: I’ve reverted the hotkey changes I made, after discussing with the other devs we decided such changes were outside the scope of the project.

    I really love your idea, though. It doesn’t sound like something that would be used by default to me, but we have the new customizable keymap stuff coming, and I for one would certainly like to play around with the concept. 🙂


  • 56. michaelw  |  June 22, 2009 at 9:02 am

    Interesting stuff… but blender doesn’t require a 3 button mouse now…

    which is essential for us “tablet only” users…(more precise and less wrist strain than using a mouse, but left and middle clicks are more fiddly)

    I can’t wait for mouse action to be configurable so I can use left mouse and keys for pretty much eveything…

  • 57. Max Puliero  |  June 22, 2009 at 9:09 am

    please dont change the default shortcut 🙂

  • 58. Dead Eye  |  June 25, 2009 at 4:53 am

    I spent some time making a mock up of the new edit menu:

    The docs can be found here under the category Editing Panel UI:

    • 59. joeedh  |  June 25, 2009 at 5:19 am

      @Dead Eye: Those look really good. I don’t know if I’ll be doing that stuff myself or not though. I like the operator history thing. One thing I’d like to do, after that wonderful day when I’ve successfully gotten everything working as well as it does in trunk, is play with having a true history stack. That’d be awesome. *sigh* Still do much yet to do first, lol.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed



%d bloggers like this: