Page MenuHome

Boolean Modifier with negative space (flipped normals) broken with BMesh boolean in 2.78
Closed, ArchivedPublic

Description

System Information
W7 nv980

Blender Version
Broken: 2.78rc2
Worked: 2.77 (bmesh boolean not implemented yet)

Short description of error
Boolean Modifier with Bmesh mode does not respect the direction of normals. This breaks the "intersection" operation when using negative space (ie making the intersection with an object whose normals are pointing inward).
The behavior is ok when using Carve mode, but Bmesh is the default mode with 2.78RC2.

Exact steps for others to reproduce the error
1.Use the default scene with the cube.
2.Add another object (eg. a sphere) and move it a bit, still intersecting with the cube.
3.Flip all normals of the sphere (Edit mode/Mesh/Faces/Flip normals/Object mode)
4.Add the boolean modifier on the sphere.
5.Select cube as the other object
6.Set mode to Intersect
6.Observe as the intersection changes when the solver is changed between Bmesh and Carve (Carve was the default in 2.77).

Event Timeline

Bastien Montagne (mont29) lowered the priority of this task from 90 to 30.Sep 30 2016, 10:51 AM

Please always attach a small and simple .blend file to help reproducing the issue.

Here is a sample file:


You can change the solver on the boolean modifier attached to the sphere to see the difference between Carve and BMesh with a negative space geometry.

Bastien Montagne (mont29) raised the priority of this task from 30 to Normal.Sep 30 2016, 12:22 PM

Thanks, I can confirm the difference in behavior… but is BMesh behavior worse than Carve one?

Thing is, having normals pointing inward that way means “inside” of the sphere is outside of it, and hence totally non-closed volume, in which case Boolean operations definition always ends up somewhat fuzzy… So I’m not convinced there is a “good” solution here?

I don't known whether Bmesh or Carve produce the 'best' result. The issue at stake is they produce different results with the same input, and the default behavior is now different in 2.78.

At the very least, this should appear as a breaking change in a bullet point of the release note. Although very few people should be impacted, it bit me hard in one of my script so I guess some other people might be impacted too.

In my very humble opinion, negative space support should be kept as an added bonus with Carve. Maybe don't "fix" Bmesh Boolean, but highlight that negative space is not supported with it.

On a side note, Bmesh Boolean is not emphasized in the Release note (or I missed it), so I guess some addition on the differences between BMesh bool and Carve should be added too (performance related maybe?)

Bastien Montagne (mont29) changed the task status from Unknown Status to Unknown Status.Sep 30 2016, 3:17 PM
Bastien Montagne (mont29) claimed this task.

It’s not 'not supported' by bmesh, just handled differently…

As for release notes… well, guy who worked on BMesh booleans is not really active in Blender currently, so this is kind of orphaned area right now :/ Will add a note about this difference in behavior with 'inverted' geometry though.