I want to create a simple box shape with rounded corners. This is, of course, easy enough to do with a simple bevel of the relevant edges:
However, this approach has a minor problem. With certain materials, the sudden curvature change from corner to flat face produces a faint but noticeable point of transition and an unsightly optical illusion similar to that produced by Mach bands:
These issues appear regardless of whether the Auto Smooth or Harden Normals options are used.
Strictly speaking, these are not shading artifacts: a physical object with the same shape would produce the same results. Product designers know this, which is why many Apple products, for example, are not actually rounded rectangles, but superellipses. Naturally, it seems wise to take a page from their book and model a superellipse myself.
Fortunately, Blender’s bevel operation makes it easy enough to create a superellipse by using options like the following:
This yields a superellipse shape that, as desired, completely eliminates the problem:
However, this solution has a different issue: lots of unnecessary geometry! In order to get corners with a similar smoothness to the original bevel, I had to crank up the bevel segments to 35, since all the segments are evenly sized:
This is less than ideal, as the whole point of creating a superellipse is to take advantage of the fact that the curvature smoothly varies over each side. What I actually want is for the edges to be unevenly distributed—denser at the corners and sparser towards the middle of the sides—so that the angle between each face is the same, not that the faces have equal widths. That would allow me to get the most bang for my polycount buck, so to speak.
However, I’m not sure how to do this. Thus, my question: is there any way to bevel faces into a superellipse shape while preserving the angle between the faces, not face width? I am fine with destructive modeling solutions (though of course nondestructive ones are always nicer), but I specifically want to be able to do this to an arbitrary existing edge the way I can with a bevel—so an “Add Superellipse” primitive isn’t good enough.