I just found that bug yesterday too! It looks like the profile orientation regularization pass doesn’t properly travel in both directions if it hits an impassable vertex first. This happens within a single edge on a cube too because it doesn’t travel beyond the cube corner (no best choice of which way to go). I’ll look into this soon.
First of all, there’s no obvious way to turn the bevel weight into an absolute orientation, it could only be used as an “invert whichever orientation was chosen by default.” Also, if the bevel weight were used for this it couldn’t be used for the offset width!
That leaves a couple options:
Add a new edge tag used for just this, “Bevel Profile Orientation” or something.
Add a “reverse” button to the profile widget and require the user to do multiple bevels to get different orientations.
Right now I’m leaning toward the second option, especially in the short term.
By default the vertex distribution is equally distributed along the bevel profile (a curve) using a vertex weight paint layer. (Toggled: Off)
Unless the user selects custom distribution. (Toggled: On)
If the user selects a custom distribution, the system enables the user to edit;
The preassigned IDs/colors (cryptomatte) for vertex distribution. The user can reassign IDs/colors (cryptomatte) to a selection of objects, edges, or group of vertices within the object selection, thus linking them. This can be used to create distribution groups/ranges.
(Assigned vertex ID = Red, Assigned bevel profile: Curve: point = Red)
The vertex weight paint layer strength (along the assigned bevel profile) for the vertex distribution. The user can adjust the vertex weight paint strength for each bevel profile ID/color (cryptomatte) and/or distribution group/range.
The this gives the user the following options;
Equal distribution; based on preassigned bevel profile IDs/colors (cryptomatte) and corresponding vertex weight paint strength.
Custom distribution; based on user assigned/edited bevel profile IDs/colors (cryptomatte) and corresponding vertex weight paint strength.
Apply. (Applies the mesh changes to the mesh and removes the modifier.)
Save. (Could create a modifier preset (asset), brush, and/or maps for exporting, etc.)
The algorithm I use to solve this problem is here.
Here’s what it does:
Visit any beveled edge that hasn’t been visited yet.
Travel down the edge in each direction, marking consistent orientations, picking the next edge by which other beveled edge is most parallel.
Stop when there is no next beveled edge to travel down or when there is ambiguity in the next edge (The best angle to the next edge isn’t better than the second best angle by at least 30 degrees).
That’s probably a bit confusing. I can make a diagram if it helps. The idea is that all of the continuous paths will be found because all of the edges will have been visited, and the best paths will be chosen because of the “angle to next edge” metric I mentioned.
Thanks for the thoughts. I have to say though, I’m not really sure what problem you’re trying to solve with the custom distribution of points along the profile? I can’t really think of a situation where that would be helpful. I think people would want to sample points on the curved sections of the profile, but not necessarily on the straight section. That will be my goal for the end of the summer. If people really want points in specific locations it’s not very hard to add them manually.
Just so you know the scope of this project is not even close to redefining the way modifiers are added and applied, but even then, I don’t think what you described is different than the current process.
Correct. The general the process isn’t very different, yet the method and level of control is. The method I described would give the user more control of the bevel profile’s topology or vertex distribution.
Using such a method could improve the workflow in the following ways;
Easy of use.
Time of implementation (quicker prototyping).
Better control of bevel profile detail (topology).
Less destructive (depending on implementation).
Possibly fewer edits (undo/redo).
The user selects an area and adds a bevel modifier. (The user doesn’t apply the bevel.) Later the user decides to add a complex pattern to a curved area within the bevel profile.
Add bevel modifier.
Select bevel profile: Curve. (Custom) (Vertex distribution is automatically equally distributed in the selected area.)
An issue arises if there isn’t enough geometry in the curved area of the bevel profile because of the modifier’s automatic equal distribution.
This can also distribute unwanted detail in other areas of the bevel profile.
The user could remove the modifer. Then, create a new selection and bevel profile (being a part or section of the original bevel profile) for that select. Then, create another selection and bevel profile (being a part or section of the original bevel profile) for that select. And so forth, as a way to control the distribution. … (This can lead to other issues, such as inaccuracies.)
The user could apply the modifier. Then, select the unwanted vertices and try to remove them. Then, try to add detail were needed. … (Can be considered a destructive workflow.)
The user selects custom distribution. Then, reassign the bevel profile IDs/colors (cryptomatte) and/or the selected object IDs/colors (cryptomatte) for better accuracy. Or, the user could adjust the vertex weight paint strength with possibly a little less accuracy. …
As a side note: Doing such with displacement nodes would be very useful.
Dynamic Displacement Topology:
Painted or generated node map > Displacement value (Controls the amount of displacement.)
Painted or generated node map >Vertex distribution IDs (Controls the ID assignment for the vertex distribution.)
Painted or generated node map > Vertex distribution (Controls the vertex distribution.)
Imagine controlling the vertex distribution density of a mesh via a vertex weight paint of a height map and with camera depth. (Dynamic depth of view)
Hmm… Adding a sub division node using this method would be very useful.
Problem of second option is that edges group don’t exist.
When vertex groups are used, inner edges may be taken into account. If user don’t want them, he has to use Edge Bevel Weight but that weight if tagging edges as bevel edges for all modifiers.
A solution could be to make modifier taking both into account.
Edge Bevel Weight for weight and Vertex Groups or Face Maps (new feature, not really used in 2.8) to restrain some bevel edges to some modifiers.
Hi everyone! I wanted to give an update on my thinking about creating the vertex meshes. I made some ideas last week, but over the weekend I wanted to try out some of my ideas manually to see if they actually worked. I used the corner of a cube as a simple situation, but keep in mind that the right method needs to work for all >3-way intersections.
For this method I just filled the hole with F and then used the “beauty” triangulate option and converted triangles to quads. It works pretty well for the left, but not so well for the other two more complicated profiles.
One idea I had is to reuse the profile for each successive “ring” of vertices. You can see the start of the method on the right. It works great for profiles that don’t have any overhang and evenly spaced points, but it didin’t work at all for the left example. I saw this method as the next logical improvement to the smoothed grid fill option, but I think I’m going to have to abandon this idea unless I come up with a way to improve it.
Here I used a grid fill to create the vertex mesh and then smoothed out the vertices afterward. This solution works ok in most situations, but it doesn’t look great, and it doesn’t emulate the real world at all. This solution is very close to what I have right now, although I need to fix some bugs before it starts to look like this. But it’s definitely the quickest to implement.
The unlikely victor for me was using boolean intersections with the corner profiles. It’s predictable, and it mirrors the real world, at least to some extent. It’s very finicky though, as anyone who’s used the boolean modifier knows. These small issues with Blender’s boolean operations might make it difficult to implement and frustrating to use.
Improving the grid fill: Close to finished already, but not close to the real world, and doesn’t work well with overhangs.
Implementing Boolean intersections: Much more of an unknown in terms of development, sometimes problematic, and produces islands with overhanging profiles, probably much slower, but is probably the better looking option.
the boolean version was actually a request in another bevel thread from someone.
So it would be nice to have it as an option!
But what’s the WIP image you posted in your weekly report thread?
Is that the grid version? Because that looked very good and imho (something like that) should be the default.
But for the extreme case you have above as an example the grid looks erroneous.
Hi. I agree that making an option to switch between multiple methods would be the best way to go. Also, the boolean method would be great as one of the options: it would sort of be consistent with how the 2-edge case is handled.
I also want to throw another method out there. If you end up with making an option that chooses from multiple methods, this could be thrown in to it
just played with the build a bit - good progress, curious how you end up treating the orientation and vertex mesh problems.
Just wondering if there would be an option to make the profile symetrical - would that help in creating a cleaner vertex mesh?
another thing I noticed and wanted to ask if that is planned - assume you have a 3x3 plane, and put the center quad into a vertex group. Now if you add a bevel modifier to that with said vertex group - the profile does nothing as the bevel shape is flat. Would’t it make sense to introduce some ‘depth’ or ‘scale’ value to push things in/out? That would allow for some very cheap panel like effects
Yes I also wanted to ask if you could make an option for a symmetrical profile. So the user would only need to draw one side and it would get mirrored. I think that symmetrical bevels are a common use case. But it is hard to place the points so exactly.
I like the right also. I’ve worked for a lot of architects matching their trim selections, and the manufacturers usually draw trim profiles this way. The flat side is almost always on the left or bottom of the illustration.
This is a great idea! I actually think by the end of the summer I’d like to finish both the “grid fill” option and this method. It’s not quite as good as the boolean method but it shouldn’t take nearly as long to code.
There’s still amount of stuff left to add, and I don’t want to spend the rest of the summer implementing another VMesh type and leave more important things unfinished.
I’ve been considering this for a while but I hadn’t reached a point where it would be useful. I guess it would enable yet another vertex mesh method where the lines would continue and meet in the middle. So I’m not sure I’m going to prioritize it but I’ll keep this in mind. Although if I ended up making the boolean method I don’t think this would
You have a good point that I could also just add a symmetrical feature to the profile widget for drawing-- it doesn’t have to come with a vertex mesh method too. That’s much more doable.
The triangulated fill is just a triangulated Ngon. So they’re actually the same, although I didn’t use smooth shading.
There seems to be a fair amount of support for this, so sure! I did it the other way because that’s how the curve widget works, but profiles are different! And I want to build this with common use cases in mind (as much as possible).