An 'extrude along normals' that works like it should

 Problem: When using region extrude on a non-planar selection, the extrude doesn't work in an expected way.

 Example: Create a UV-sphere. Then  make a circumfering faceloop. If you extrude individual polys, things will  turn out as expected...

...however - should you want to extrude region the first example below would be the result. The second image shows the expected behavior, which was accomplished using shrink/flatten after the extrude. Worth noting is that, looking at the second image above, individual extrude seems to be using shrink/flatten, whereas region extrude obviously does not.


 Slikdigit expressed it perfectly, so I'm taking the liberty to quote him from the elysiun forums:

"what you are asking for is that extrude region extrude each face along it's normal, while keeping the faces connectd. what it does is find an average normal and extrudes along that- in the case of a loop the magnitude of this normal becomes zero so the direction is undefined, I don't know how it decides on a direction....."

 Exactly. Now, this can't be intended behaviour(?)

 Workarounds:

 Like we've seen, In the particular case above shrink/flatten will solve the problem. But it has its weaknesses in other situations, not being a true normal extrude. This is examplified in the image below, along with the proper results expected.  First example is  the result (sometimes) of regional extrude of two connected faces. Second example uses shrink/flatten, and here is where it shows its weakness, not resulting in an even extrude. Third example is expected result if you've used any other 3D application.

 

Btw - sometimes the above extrude region example results in this:



I haven't been able to figure out why. Anyone?

-------------------------

Inset scale

Now, this is a very useful tool, and one that is tricky to properly duplicate with blender. Much like extrude, inset should work on both individual, and multiple faces. Most applications settle with only individual inset, though. Inset scale scales a face\faces with all border edges equally inset. The example below (approximated) displays one difference between Blender's scale (which keeps the proportions of the original poly) and inset scale (which insets all edges equally).

 

Workarounds:

A. Do a zero extrude, and scale.

    Works perfectly on individual faces. But when faced with the need to do 50 faces the same way, you're forced to repeat the process 50 times!

B. Select faces, extrude individual and then use smooth. but there are drawbacks to this approach.

    1. It's not very interactive.

    2. You’re stuck with preset increments, which means that it's not very exact. What if you want the faces inset exactly 0.35 units?


There exists two different approaches to 'inset' as a tool.

The first one works similar to extrude, in that you select the face/faces and apply the tool and the new geometry is created instantly and scaled down. The second alternative is referred to as 'inset scale', and works slightly differently. Like the name says, it is more an alternative to regular scaling, and does not create any new geometry.

Other than this, they work exactly the same. I was a bit puzzled about the “inset scale” approach (inset scale) at first - it forces me to do in two steps what I can do in one step with the other method. But there is one important advantage. While 'inset' always creates new geometry, there are instances when that is not needed. 'Inset scale' allows you to go back to your selection and scale later on. That is, faces can still be manipulated after extrude. That is certainly worth the extra step. Ideally, an application would have both implementations side by side, but if I had to chose, ‘Inset scale´ has my preference.

For reference look at Wings 3d. It has an “inset” function, but initially I didn’t think it could do “inset scale”, but apparently “uniform scale” works the same way. For the extra functionality of inset affecting grouped faces, 3ds Max does this. I have approximated in Blender what grouped inset of a rounded surface should look like. This could be a great way to add detail to a rounded surface.


Examples of usage:Can you say instant windowframes?! Select the facade of a house which is subdivided into say 50 equal sized polygons. Select those polygons, extrude zero individually, then inset scale a bit (affecting all polygons). Now, extrude outwards, and repeat the first step again, and finally extrude inwards. Even in organic modeling this function is great for adding detail. Please contribute examples if you want. These were the first implementations I could think off.

 
--------------------------

Cut threshold

 

If you want to make a cut from a point on an edge to a vertex, you're out of luck, and since we lack decent interactive snapping tools in Blender the process to clean up your cuts is a tideous one. Often we get unwanted geometry that we have tidy up afterward. I propose a threshold for the cut-tool, similar to the one for 'remove doubles' that determines when to end the cut to nearest vertex instead of on the edge.

--------------------------

Merge edges

A lot of stuff in Blender is still vertex based, while we now have edge and face mode, which opens for new workflow possibilities. Have a look at the first example below - I have selected two parallell edges for merging. Since merging is vertex based this action will result in the second example. That is, the four vertices comprising our selection will collapse into one. If I on the other hand require those two edges to merge like in example three, I would have to merge 2 vertices at a time.

--------------------------

Widget Icons

And finally, I believe the widget icons could be made more intuitive, so here's a quick mockup that tries to show more what each mode does. Nevermind the colors, my doctor tells me I'm not colorblind, but I might as well be;) 

--------------------------

New Subdivide code problems

I know, it is not finished yet, but there is already something worrying me. The new code is bringing more functionality to subdivide, fine, but it is also producing more tris, which is not good. Example:

Look at the top-right quarter. The old code produced 3 quads, whereas the new code produces 1 quad and 2 tris. If possible I would prefer a 'keep quads' option for cuts to avoid this. Of course, with n-gons we wouldn't have this problem *hint*hint* ;)