Is it possible to get automatic smooth edges with flat faces without adding geometry? I'm new with Blender and this seems like a simple thing but I haven't been able to find the answer.

The only way I've been able to find to get smooth edges while retaining flat faces is to add extra edge loops as in the first answer to the question posted here: How to keep flat faces flat when using smooth shading

However, manually adding extra edge loops all over the place just to get smooth edges is not an option for my workflows. I need an entirely automatic way to get smooth edges of a certain thickness, similar to how it's possible to get beveled edges of a certain thickness automatically with the bevels modifier.

Here is a shape with automatic bevels. I need something similar, but with the edges being smooth.


Here it's changed to use smooth shading. This doesn't work since the faces are no longer flat.


Note:


The "Auto Smooth" setting in the Normals section of the Data pane for the object won't help here. It too will either smooth both edges and faces, or neither, depending on which angle is used.
Subdivision surface modifier doesn't work. It requires adding edge loops to control the width/size of the smooth edges so is not automatic.
The Smooth modifier doesn't work. This modifies the vertex positions rather than splitting the edges similar to bevels.
This is for use in a game, so any solution that produces results with lots of triangles won't work (like just using bevels with a high segment count). I basically need the same geometry as Bevels produce, just with normals that make the bevels smooth while retaining the faces flat.


Is this possible in Blender?

What should this look like:
From what I have gathered researching, no, it is not currently possible in an automated way inside Blender.

For what it's worth, it would not be hard to implement a solution for this in Blender. I ended up implementing a solution in a Unity AssetPostprocessor instead since that's what I'm familiar with.

The approach I took was to calculate smoothing (smooth vertex normals) using a different weighing method than Blender does. When averaging face normals together in order to calculate smooth vertex normals, it's possible to weight the normals according to the areas of the faces contributing to the vertex normal. This way larger faces contribute more to the normal than smaller faces. This fairly standard weighing approach already produced much improved results.

I ended up going a bit further and kept track of the largest area of the contributing faces. Then when calculating the average, I only included face normals in the average from faces with areas of at least a certain percentage of the largest contributing face. This mostly keeps the bevel faces from influencing the normals at all.

These techniques only work well when the bevel width is small compared to other details of an object. But it worked very well for me in any case.