Page MenuHome

Boolean problem with vertex group
Closed, ResolvedPublic

Description

System Information
Win7 64bit

Blender Version
Broken: 2.79
Worked: 2.77a

Short description of error
Carve solver clears vgroup. Bmesh is trying to preserve it, but doesn't interpolate.
2.77a


2.79 Carve

2.79 Bmesh This one displaces only part of mesh, but I guess vgroup should be interpolated after the cut, should it?

Exact steps for others to reproduce the error

Event Timeline

In fact, bmesh is behaving correct here. The unfortunate thing is that we can not interpolate such attributes: what if one vertex of edge was in groups A,B,C,D and second vertex of edge was in groups A,D what groups midpoint of edge should belong to? Or should those groups be copied from vertices of second object? Not only it's not trivial to do currently, but it's still ambiguous because new vertex might be created by a midpoint of edge from second operand. So at the end of a day there is no solution to this problem, so we just don't put new vertices to any of groups.

Blender 2.77 only appeared to work with Carve, while in fact it was removing all groups all together, which made deform modifier to ignore group and apply deformation to the whole mesh.

Will commit fix for carve which handles groups in the same way as bmesh.

P.S. By groups i meant vertex groups in this comment.

Carver solver does not clear vertex group.
Assign Cube vertices to a vertex group. Carver Solver will use it and displace the Cube.

Bmesh solution is preserving Vertex Groups of mesh that use the boolean modifier. Carve Solution is preserving Vertex Groups of mesh that is the target of the boolean modifier.

None of this solution is satisfying.
Ideally, vertex groups sharing same name on each mesh should be merged inside the result.
And additionnal vertices weights at intersections should be interpolated.

That way, following modifiers, like a vertex group weight modifier, could modulate the whole mesh instead of just one part.

what if one vertex of edge was in groups A,B,C,D and second vertex of edge was in groups A,D what groups midpoint of edge should belong to?

It is easy to answer it should belongs to A,D.
Because a user always have ability fix this by assigning second vertex to B,C groups with a weight equal to zero.

IMO, it is better to cover the whole reulting mesh by editing two operands instead of covering only one part of the resulting mesh.

Carver solver does not clear vertex group.
Assign Cube vertices to a vertex group. Carver Solver will use it and displace the Cube.

But what if Cube will be dynamically changed via Remesh modifier, which will terminate all vgroups?

Remesh modifier is another problem.

Ideally, remesh modifier should kept ability to assign weights through vertex weight modifiers.
So, at least, a vertex group exists before Remesh -> all vertices after Remesh belongs to the vgroup with a weight equal to 1 or 0.

Ideally, vertices from remesh have an assigned weight relative to weight of closest vertex before remesh.

Carver solver does not clear vertex group.

That is ambiguous statement.

In Blender 2.77 Carve will clear all vertex groups. Try removing some vertices from a group in the file and see that the whole object is deformed. This is because result of boolean has no vertex groups, which forces deform modifier to apply deformation to the whole object.

In Blender 2.79 Carve will preserve vertex groups for existing vertices, but will reset vertex groups of the new ones. Bug was that if mesh consisted of multiple manifolds, vertex groups would have been completely lost.

After fix from today Carve preserves vertex groups for all original vertices.

Bmesh solution is preserving Vertex Groups of mesh that use the boolean modifier. Carve Solution is preserving Vertex Groups of mesh that is the target of the boolean modifier.

This is wrong, Carve and BMesh are dealing with vertex groups same way now.

Ideally, vertex groups sharing same name on each mesh should be merged inside the result.

Think so, but currently it is not supported.

And additionnal vertices weights at intersections should be interpolated.

That's not what you always want. There are far too many corner cases which might (and will) work unexpectedly. There is simply no solution here which will always work.

But what if Cube will be dynamically changed via Remesh modifier, which will terminate all vgroups?

Afraid, you'll be doomed then :(

And additionnal vertices weights at intersections should be interpolated.

That's not what you always want. There are far too many corner cases which might (and will) work unexpectedly. There is simply no solution here which will always work.

I don't see where are the corner cases.
At least, if it results as a vertex with a weight, unexpectedly result can become fixable by the user by adding a vertex weight modifier or tweaking operands rejected vertices weight.