Page MenuHome

Boolean is not working properly with exact faces as 2.92
Closed, ResolvedPublic

Description

System Information
Operating system: Windows-10-10.0.19041-SP0 64 Bits
Graphics card: NVIDIA GeForce RTX 3090/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 466.27

Blender Version
Broken: version: 2.93.1, branch: master, commit date: 2021-06-22 05:57, hash: rB1b8d33b18c2f
Worked: 2.92

Short description of error
I had a file that has a wall with multiple Booleans and it was working very well in the previous version , now it is almost not working , I guess it is a bug related to hole tolerant feature as this wasn't available before

Exact steps for others to reproduce the error
Just opening an file created with 2.92 , Boolean operation doesn't work as intended


Event Timeline

Richard Antalik (ISS) changed the task status from Needs Triage to Confirmed.Jun 24 2021, 3:46 PM
Richard Antalik (ISS) updated the task description. (Show Details)

It was not fixed by the fix for T89330. I will look into this one now.

Howard Trickey (howardt) closed this task as Resolved.Jun 27 2021, 5:19 PM

The problem is that the object G_562044 in this file has negative scale factors (on all three axes).
It happens that the object Cube.007 also has all negative scale factors, and therefore the boolean with that object works as the user expects.

However, the object Cube.093 does not have negative scale factors. So when everything is transformed into the local space of G_562044, the boolean with Cube.093 ends up with the normals reversed from what the user intends.

Boolean pays attention to what direction the normals are in to determine "inside" vs "outside" of objects. I think 2.92 may have worked because a different triangulation method was used and it may have not respected the negative scale to reverse normals. It should not have worked, in my opinion.

So I am calling the code working as intended here.

In the sample file, if you apply all transforms to all objects, and then flip the normals of the objects that reversed after doing that (G_56044 and Cube.007) then you get the expected result, I believe.

@Howard Trickey (howardt)
I disagree. The old behavior was both consistent and useful:

  • When an object is scaled to a negative scale, the outside is kept as the outside (i.e. the normals are automatically flipped). This applies both to viewport display (as seen if the Face Orientation Overlay is activated) and rendering.
  • It is useful for mirroring linked duplicates (by scaling them with a negative scale. I do this all the time in my workflow.). If the new behavior is kept, there is no longer an easy way to use those.
Philip Holzmann (Foaly) reopened this task as Confirmed.Jun 28 2021, 3:32 PM
Philip Holzmann (Foaly) triaged this task as High priority.

Looking through the code, handling negative scale is intended to work.
See for example the checks for is_negative_m4(object->obmat) in MOD_boolean.cc.

Raising to high, since this is a recent regression.

I will note that while I say this is fixed now, it only works if you check the "hole tolerant" option on Exact.

I will note that while I say this is fixed now, it only works if you check the "hole tolerant" option on Exact.

Thank you for your effort , but I have a questions maybe sounds a bit dumb , why the checkmark is red ๐Ÿค”?

Just a fault sorry ๐Ÿ˜ž
Re-assigned