I’ve been working on a little operator script for Blender that “bakes” accurate bevels based on edges bevel weights, called FinalBevel.
The built-in bevel modifier always had problems with edges of varying bevel weights intersecting, giving pinched results.
FinalBevel tries to circumvent these issues by beveling all edges sequentially, starting with the edges with the highest bevel weights and working it’s way down from there.
Newly created edges will receive appropriate bevel weights if necessary to make sure the results are true to expectations and as clean as possible.
Ideally, this script is considered a proof of concept and, if at all feasible, could be picked up by a Blender dev who incorporates the same behaviour into the built-in modifier.
I don’t know if this is at all possible, but this is only half as useful as it should be as long as it’s an operator and not a modifier.
Anyway, for the time being, consider this a massive work in progress and a bare-bones first iteration.
It’s appallingly slow, even on relatively lowpoly objects, there’s no UI and only few options in the F9 panel.
I’ll focus on performance for now, to make sure the operator can be used on reasonably expensive objects.
Apart from this, there are a bunch of things I’d like to add in the future:
- A proper UI
- More settings to give users more control
- An option to read values from an existing bevel modifier and replace it with “baked” bevels
- An option to save and retrieve the original mesh after the bevels have been made
- Support to use the operator on multiple objects at once
Both Python and the Blender API are, to me, counter-intuitive at best, so I’m sure there’s plenty of bad practices and down-right blunders in the code, so I’m grateful for any feedback on how to improve the code.
For the time being, I’ll continue to learn as I go.
Here are some comparison shots between the bevel modifier (left) and the result from FinalBevel(right):
And a link to the addon: