Why does bevelling by offset produce uneven results on identical edges?

(Rekov) #1

This problem only seems to occur when the width method for bevel is ‘Offset’. Using ‘Width’ gets you even bevels as a work around, but is inconvenient if you’re trying to bevel by a specific offset. Is this a bug?

I have a symmetrical object, the base of a column, and when I attempt to bevel the four corners of this object, each corner bevels by a different amount.

The blend file is attached.


beveldemo.blend (568 KB)

(pappy) #2

Ctrl b - then M to change to width mode then type in your value. Done

(Rekov) #3

Except that I want to bevel by a specific offset, not a specific width…

(finalbarrage) #4

well as this guy said… set it to With.

(Rekov) #5

Come on guys. I said in the first post that width doesn’t produce uneven results, but that still doesn’t explain why bevel by offset isn’t working like it should in the description:

The distance of a new edge from the original.

I need to bevel by a specific offset. Why can’t I hit CTRL B, type in the offset that I need, and have that work?

(pappy) #6

In your first post you said that width produced even results, but you then said that you couldn’t use that as you wanted to use numerical values, all I did was point out that you can use numerical values. Sorry, didn’t realize your goal was to prove a point. Have fun with that.

(Rekov) #7

My goal is to use numerical values to measure a specific thing. It’s like I’m saying “I need to measure the height of this shelf but it’s not working,” and you responding “Just measure its width instead, that works!” I understand that width works, but it’s measuring an entirely different thing.

(Cyaoeu) #8

This kind of “sweeping bugs under the rug” mentality only hurts Blender in the long run. If it’s not working it should be fixed, you shouldn’t have to use the non broken alternative method of doing it.

It’s a bit strange because I get the same result with your file, but if I delete the bottom left, top left and top right sides, then add a mirror modifier (using x and y) then apply it I get symmetrical results from the offset bevel.

I checked the vertex locations and they seem completely symmetrical, the only thing that’s different in the two meshes are the vertex/edge indices. (in Mesh Display after running bpy.app.debug = True in the console). Anyway this shouldn’t affect the bevel.

This does kind of look like a bug but I have no idea what’s causing it.

(Daedalus_MDW) #9


the bevel changed drastically starting 2.75. try this in 2.74, it just might help.

sadly, blenders concern for accuracy is basically non-existent.

(Rekov) #10

@Cyaoeu - I noticed something similar myself. I deleted all but one edge and recreated the model by extruding and rotating about the origin by 90° a few times, and the discrepancy in bevel dimensions was much reduced, though still somewhat present.

(ajcdfin) #11

Hey, Using your file I rebuilt your object starting with a new default ‘cube’ to match it. When I beveled the new ‘cube’ the way you shown, the behavior is as you were trying to achieve. All sides equal no matter the ‘mode’. My guess is somehow your mesh is corrupt but I looked it over using all the tools Blender provides and it seemed sound. It is just a simple mesh so re-doing it should not be a problem - true ?

My disclosure: Blender 2.75/2.74 on Windows XP

(Lane) #12

Something is definitely strange, one little advice, use mirror in x and Y, anyway, for this type of thing, you really dont need to work on 4 identical corners.

(pappy) #13

So is anyone going to post this as a bug, or is it just complaint time?

(ajm) #14

Created my own similar object and I’m not getting the same behavior. There is something wrong with your mesh and I haven’t found a solution. Just by chance I ran a mesh analysis and it found some sharp and thickness errors in your mesh. This is the sharp test…

And the thickness error…

Not sure what happened during creation of this object. Mine does bevel as expected.

(colkai) #15

Daft question, did you scale the object in object mode? (i.e. is your objects scale NOT 1,1,1). If so, if your scale is out, in edit mode, so will any action. In object mode CTRL+A and apply scale, then try again.

(JA12) #16

I’m getting the same results as others.

  • bevel with offset creates non-uniform result with the test object
  • creating my own bevels correctly
  • sort mesh elements -> cursor distance for vertices fixes the bevel for the test object

(Cyaoeu) #17

How did you create the original object and can you recreate the bug in a new file?

(Rekov) #18

After sorting mesh elements by distance from cursor, I still get something of an inconsistency, though not as great. Same with rebuilding the mesh.

I build the mesh starting with the basic cube. I scaled the cube (in edit mode) to the side of the square base part, added loop cuts to create the inset, extruded, and scaled in along normals.

To create the top part I vertex snapped 1/4 of a circle to the top of the base, extruded it along the edge, duplicated, rotated 90 degrees about the cursor, and used more vertex snapping to make the corners line up.

Finally I extruded the top of the mesh another little bit.

(ajm) #19

Try generating your next object just from a base cube, the top part can be made by scaling the very top poly down to the size you need, make a cut under that, scale it in and then use the bevel tool on that to make the curved portion. I think using the circle to to that messed up the point order and the mesh.

Like this. Sorry, I was tired when making it.

(howardt) #20

I am the developer who works on bevel. Unfortunately, this is working as intended right now, though I will try to see if there’s anything I can do to improve it. My best advice here is to use the “Width” method in this situation (though I understand that the original poster doesn’t like that solution).

More than probably most of you want to know:

The problem here is that there are too many constraints that bevel has to satisfy simultaneously in this situation, and it is impossible to satisfy them all, so some compromises are made. Among the constraints are:

  • we would like the newly created vertices to slide along the existing non-beveled edges (users kind of expect this)
  • the slide distance should depends on the (sine of the) angle between the beveled edge and the slide-along edge – because we want the perpendicular distance to the offset edge to satisfy the offset=amount spec of the user
  • there are two angles involved, and their sines may not be equal
  • all of these constraints hold at the other end of a beveled edge too, and again, the sines of the angles may be different; yet we would like the width of the offset strips to stay constant along their lengths to the extent possible

Because it is impossible to satisfy all these constraints simultaneously, there are compromise values chosen for how far to slide each vertex along their edges. Then there is an “adjustment” pass that tries to propagate slide the compromises to adjacent edges. That process unfortunately is non-deterministic - it depends on the original ordering of vertices to some extent, though there is an effort to try to chain the propagation together after initial choices are made among connected components of edges. Unfortunately in the model here, different choices of propagation order are chosen for two of the edge chains vs the other two, resulting in different end results.