Regression: Boolean Difference modifier - material of hole created by hidden object different for fast and exact #99592

Closed
opened 2022-07-10 19:08:47 +02:00 by Don Manson · 59 comments

System Information
Operating system: Windows-10-10.0.19043-SP0 64 Bits
Graphics card: NVIDIA GeForce GTX 1050/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 511.23

Blender Version
Broken: version: 3.2.1, branch: master, commit date: 2022-07-05 15:44, hash: a2d59b2dac
Worked: 3.1

Caused by a2d59b2dac

Short description of error
When using Boolean difference modifier with hidden objects, the material depends on whether the fast or exact solver has been used. With "Exact" the material is that of the hidden object. With "Fast" the material is that of the original object.

Exact steps for others to reproduce the error
Create object, say cube A. Material colour Blue.
Create second object, say cylinder B, partially inside cube. Material colour Red.
Create third object, say sphere C, partially inside cube A. Material colour Green.
Created boolean difference modifier acting on A with B as object using Fast solver.
Created boolean difference modifier acting on A with C as object using Exact solver.
Hide objects B and C from viewport and Render.

The hole created from Object B inherits colour from object A.
The hole created from Object C inherits its colour from object C.

The same issue is present in EEVEE and cycles.

This behaviour is inconsistent and different from Blender 3.1.

Previously the hole always inherited the colour from the original object A.

Boolean hidden object colour.blend

**System Information** Operating system: Windows-10-10.0.19043-SP0 64 Bits Graphics card: NVIDIA GeForce GTX 1050/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 511.23 **Blender Version** Broken: version: 3.2.1, branch: master, commit date: 2022-07-05 15:44, hash: `a2d59b2dac` Worked: 3.1 Caused by a2d59b2dac **Short description of error** When using Boolean difference modifier with hidden objects, the material depends on whether the fast or exact solver has been used. With "Exact" the material is that of the hidden object. With "Fast" the material is that of the original object. **Exact steps for others to reproduce the error** Create object, say cube A. Material colour Blue. Create second object, say cylinder B, partially inside cube. Material colour Red. Create third object, say sphere C, partially inside cube A. Material colour Green. Created boolean difference modifier acting on A with B as object using Fast solver. Created boolean difference modifier acting on A with C as object using Exact solver. Hide objects B and C from viewport and Render. The hole created from Object B inherits colour from object A. The hole created from Object C inherits its colour from object C. The same issue is present in EEVEE and cycles. This behaviour is inconsistent and different from Blender 3.1. Previously the hole always inherited the colour from the original object A. [Boolean hidden object colour.blend](https://archive.blender.org/developer/F13283634/Boolean_hidden_object_colour.blend)
Author

Added subscriber: @Don_Manson

Added subscriber: @Don_Manson

#101054 was marked as duplicate of this issue

#101054 was marked as duplicate of this issue

#100230 was marked as duplicate of this issue

#100230 was marked as duplicate of this issue
Member

Added subscriber: @PratikPB2123

Added subscriber: @PratikPB2123
Member

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Member

Thanks for the report. I'm able to reproduce this. I suspect a2d59b2dac introduced the issue (will bisect just to be sure)

Thanks for the report. I'm able to reproduce this. I suspect a2d59b2dac introduced the issue (will bisect just to be sure)
Member

Changed status from 'Confirmed' to: 'Needs Developer To Reproduce'

Changed status from 'Confirmed' to: 'Needs Developer To Reproduce'
Member

Added subscriber: @HooglyBoogly

Added subscriber: @HooglyBoogly
Member

yes, changed in 5723bf926d
Unsure if this is expected behavior or not (I didn't understand the exact change made by that commit), @HooglyBoogly can you help?

yes, changed in 5723bf926dcb387224dd0de2a4c562bc316e8edc Unsure if this is expected behavior or not (I didn't understand the exact change made by that commit), @HooglyBoogly can you help?
Member

Added subscriber: @Alaska

Added subscriber: @Alaska
Member

Added subscriber: @ChristopherGuest

Added subscriber: @ChristopherGuest

Added subscriber: @acvarium

Added subscriber: @acvarium

Tested version: 3.2.2, branch: master, commit date: 2022-08-02 18:15, hash: bcfdb14560. The same problem is present
scr2022-08-10_000.jpg

Tested version: 3.2.2, branch: master, commit date: 2022-08-02 18:15, hash: `bcfdb14560`. The same problem is present ![scr2022-08-10_000.jpg](https://archive.blender.org/developer/F13357151/scr2022-08-10_000.jpg)
Member

Added subscriber: @chippwalters

Added subscriber: @chippwalters
Philipp Oeser changed title from Boolean Difference modifier - material of hole created by hidden object different for fast and exact to Regression: Boolean Difference modifier - material of hole created by hidden object different for fast and exact 2022-09-14 09:51:52 +02:00

It would be nice if someone could be assigned to fix this. It has been over two months now since it was first identified and it affects lots of people's workflows. We've been through a complete version update with it still broke.

It would be nice if someone could be assigned to fix this. It has been over two months now since it was first identified and it affects lots of people's workflows. We've been through a complete version update with it still broke.

Added subscriber: @JanErik

Added subscriber: @JanErik

This comment was removed by @JanErik

*This comment was removed by @JanErik*

Added subscriber: @SteffenD

Added subscriber: @SteffenD

To those who said it's not a bug, but feature. Just add this as a option to the modifier, if so. But it has to be disabled by default

To those who said it's not a bug, but feature. Just add this as a option to the modifier, if so. But it has to be disabled by default

Created a free addon to fix: https://youtu.be/L_jXRoGQD5g

Created a free addon to fix: https://youtu.be/L_jXRoGQD5g
Member

Added subscriber: @lichtwerk

Added subscriber: @lichtwerk
Member

Changed status from 'Needs Developer To Reproduce' to: 'Confirmed'

Changed status from 'Needs Developer To Reproduce' to: 'Confirmed'
Member

Will raise prio to get feedback from @HooglyBoogly

Will raise prio to get feedback from @HooglyBoogly
Member

Sorry for the delay replying here, I missed the notification above.
I'd say the behavior in exact mode is "correct" and certainly expected from the current code.
The previous material mapping was implemented that way because we couldn't change a mesh's materials during evaluation; the best compromise was to rely on manually assigning them on original data. Now that isn't necessary.

However, I recognize the change in behavior, when not noted in the release notes, is quite bad. Sorry about that.

Now that we're in this situation though, it's not clear to me that we should go back to the old behavior (which was also changed to fix a different bug #99191 and #93272).
Maybe it would be best to just make the fast mode consistent with the new behavior. Do you have an example of when the old behavior is better?


It's identified as a bug in the bug database

I wanted to clarify this (quote from the youtube), because it's not quite right. Reports are only bugs when they are classified that way, this report currently isn't classified.

Sorry for the delay replying here, I missed the notification above. I'd say the behavior in exact mode is "correct" and certainly expected from the current code. The previous material mapping was implemented that way because we couldn't change a mesh's materials during evaluation; the best compromise was to rely on manually assigning them on original data. Now that isn't necessary. However, I recognize the change in behavior, when not noted in the release notes, is quite bad. Sorry about that. Now that we're in this situation though, it's not clear to me that we should go back to the old behavior (which was also changed to fix a different bug #99191 and #93272). Maybe it would be best to just make the fast mode consistent with the new behavior. Do you have an example of when the old behavior is better? --- > It's identified as a bug in the bug database I wanted to clarify this (quote from the youtube), because it's not quite right. Reports are only *bugs* when they are classified that way, this report currently isn't classified.

First off, let me say the Boolean modifier operations in Blender are among the absolute best in the industry for surface modelers. I find none that are better. I even created a video about how great they are: https://youtu.be/g8x3UutEUGQ

There are a number of reasons I would hope you do not change the material swapping behavior-- and keep it like it was.

  1. It's been that way for years and is expected behavior
  2. Boolean modeling is about shaping a single object using cutters and unions. Why would you want every cut and union to by default be a possible different material?
  3. There are lots of different libraries people use as Boolean "shapes" for Boolean modeling and having each of them carve out using a possibly different material creates confusion.
  4. There is an easy existing and documented way to absolutely control the materials assigned to a target when modified by a Boolean.
  5. No other program I'm aware of does it this way. Perhaps someone can provide a reference of a program that does by default transfer the boolean cutter material to the target object?

If you decide to change the behavior, perhaps you would consider adding a preference switch somewhere or a modifier property that allows for those of us who have existing pipelines and workflows to be able to continue as we are used to.

Some example of how bool modifiers are used to model:
https://youtu.be/KaTJssAwDno

And my thoughts on this:
https://youtu.be/SlXk51v6N8Y

First off, let me say the Boolean modifier operations in Blender are among the absolute best in the industry for surface modelers. I find none that are better. I even created a video about how great they are: https://youtu.be/g8x3UutEUGQ There are a number of reasons I would hope you do not change the material swapping behavior-- and keep it like it was. 1. It's been that way for years and is *expected* behavior 2. Boolean modeling is about shaping a single object using cutters and unions. Why would you want every cut and union to by default be a possible different material? 3. There are lots of different libraries people use as Boolean "shapes" for Boolean modeling and having each of them carve out using a possibly different material creates confusion. 4. There is an easy existing and documented way to absolutely control the materials assigned to a target when modified by a Boolean. 5. No other program I'm aware of does it this way. Perhaps someone can provide a reference of a program that does *by default* transfer the boolean cutter material to the target object? If you decide to change the behavior, perhaps you would consider adding a preference switch somewhere or a modifier property that allows for those of us who have existing pipelines and workflows to be able to continue as we are used to. Some example of how bool modifiers are used to model: https://youtu.be/KaTJssAwDno And my thoughts on this: https://youtu.be/SlXk51v6N8Y

Added subscriber: @Anthong

Added subscriber: @Anthong

adding the material when doing a boolean should NOT be the default behavior.

usually booleans are for creating a shape. In which case a uniform material is expected.

In the cases where the material transfer is desired, it's a long standing and well known way to do it.

I don't see a reason to allow this to be changed in a way that would cause people more time in removing the material for the default use case.

Maybe if you made a checkbox to select the behavior in the modal? That might be cool for the cases where people want it.

If it's one or the other the old behavior was better

adding the material when doing a boolean should NOT be the default behavior. usually booleans are for creating a shape. In which case a uniform material is expected. In the cases where the material transfer is desired, it's a long standing and well known way to do it. I don't see a reason to allow this to be changed in a way that would cause people more time in removing the material for the default use case. Maybe if you made a checkbox to select the behavior in the modal? That might be cool for the cases where people want it. If it's one or the other the old behavior was better
Hans Goudey self-assigned this 2022-09-16 23:50:23 +02:00
Member

Thanks for the feedback, you make good points. I will look into adding an option.

Thanks for the feedback, you make good points. I will look into adding an option.
Member

Also, I wonder if you'd suggest adding this option to the boolean geometry node too.
In a more node-based procedural context we've found it very troublesome to rely on material slot indices, which is what inspired the newer mapping behavior in the first place.
Ideally there would be some way to achieve the old goal (booleans just affect the shape) without requiring the material slot indices to match when material transfer is wanted.

Also, I wonder if you'd suggest adding this option to the boolean geometry node too. In a more node-based procedural context we've found it very troublesome to rely on material slot indices, which is what inspired the newer mapping behavior in the first place. Ideally there would be some way to achieve the old goal (booleans just affect the shape) without requiring the material slot indices to match when material transfer is wanted.

Yes, I agree it makes good sense to add this option to a the Boolean geometry node. Thanks.

Yes, I agree it makes good sense to add this option to a the Boolean geometry node. Thanks.

In #99592#1418498, @HooglyBoogly wrote:
Also, I wonder if you'd suggest adding this option to the boolean geometry node too.
In a more node-based procedural context we've found it very troublesome to rely on material slot indices, which is what inspired the newer mapping behavior in the first place.
Ideally there would be some way to achieve the old goal (booleans just affect the shape) without requiring the material slot indices to match when material transfer is wanted.

yes, plus that would provide some consistency between the two... option in both places with expected behavior

> In #99592#1418498, @HooglyBoogly wrote: > Also, I wonder if you'd suggest adding this option to the boolean geometry node too. > In a more node-based procedural context we've found it very troublesome to rely on material slot indices, which is what inspired the newer mapping behavior in the first place. > Ideally there would be some way to achieve the old goal (booleans just affect the shape) without requiring the material slot indices to match when material transfer is wanted. yes, plus that would provide some consistency between the two... option in both places with expected behavior
  1. No other program I'm aware of does it this way.

Houdini does it in exactly this way by default

maybe an easy way could be to do not transfer the the material when the boolean has none assigned, but if it has, it will be directly transfered.
Then the ones who just use booleans as cutters can do their thing but also the ones that need the material transfer can get it quicker working than before

> 5. No other program I'm aware of does it this way. Houdini does it in exactly this way by default maybe an easy way could be to do not transfer the the material when the boolean has none assigned, but if it has, it will be directly transfered. Then the ones who just use booleans as cutters can do their thing but also the ones that need the material transfer can get it quicker working than before
Member

maybe an easy way could be to do not transfer the the material when the boolean has none assigned, but if it has, it will be directly transfered.
Then the ones who just use booleans as cutters can do their thing but also the ones that need the material transfer can get it quicker working than before

Looking into this again, it seems like this might be a good option. The simple behavior is kept for both cases: materials and attributes transfer from the cutter object, but if they don't exist, they aren't transferred.
I'd imagine that meshes just used for cutting wouldn't have materials assigned anyway, they're usually set to wire display anyway.

>maybe an easy way could be to do not transfer the the material when the boolean has none assigned, but if it has, it will be directly transfered. > Then the ones who just use booleans as cutters can do their thing but also the ones that need the material transfer can get it quicker working than before Looking into this again, it seems like this might be a good option. The simple behavior is kept for both cases: materials and attributes transfer from the cutter object, but if they don't exist, they aren't transferred. I'd imagine that meshes *just* used for cutting wouldn't have materials assigned anyway, they're usually set to wire display anyway.

Yeah, but I have whole libraries of meshes which I use as cutters which already have a material assigned to it. Ugh. Why change behavior at all?

Not to mention I have over 50K KIT OPS users that use cutters to model with. Do I need to have them all download new cutters (or edit their existing ones) now?

The BEST solution is to have it as a preference or switch, as we've talked about before.

Yeah, but I have whole libraries of meshes which I use as cutters which already have a material assigned to it. Ugh. Why change behavior at all? Not to mention I have over 50K KIT OPS users that use cutters to model with. Do I need to have them all download new cutters (or edit their existing ones) now? The BEST solution is to have it as a preference or switch, as we've talked about before.

Why change behavior at all?

bcause the new behaviour is more intuitive and faster

your agumetation is based on your business case? Just cause you need to write a few new lines of code for your product, Blender should instead keep the slower and less intuitive current system in place?

> Why change behavior at all? bcause the new behaviour is more intuitive and faster your agumetation is based on your business case? Just cause you need to write a few new lines of code for your product, Blender should instead keep the slower and less intuitive current system in place?

Please stop attacking me. No, it's not about writing a few more lines of code for my product, that would be easy. It's about inconveniencing thousands and thousands of users. That's what I care about,

Please stop attacking me. No, it's not about writing a few more lines of code for my product, that would be easy. It's about inconveniencing thousands and thousands of users. That's what I care about,

Making it an option would make it work well for everyone.

Keep the old behavior for people used to that.

Keep the new behavior if you like that better.

User choice, everyone wins :)

Making it an option would make it work well for everyone. Keep the old behavior for people used to that. Keep the new behavior if you like that better. User choice, everyone wins :)

in almost every release, things change that were previously handled differently for years. But if a new workflow takes less time or is more intuitive, what's the point of keeping the old, more cumbersome way just because some people have gotten used to it?

in almost every release, things change that were previously handled differently for years. But if a new workflow takes less time or is more intuitive, what's the point of keeping the old, more cumbersome way just because some people have gotten used to it?

can we speak in specific and useful terms?

{F13607506

see attached screenshot. This is a common and everyday task. I was modeling out an object, I needed to cut some holes through it. So I did some boolean diffs and I get this. I would not expect to have a different material or removal of material in the areas I cutout without choosing to make it that way. I know I can correct this by specifically updating the materials.

how is this more intuitive? faster? more efficient? less "cumbersome" ?

I am genuinely interested to know... in my common, everyday usecase of cutting a shape out from another object, how is this new method an improvement across the board to the degree that you think everyone should simply adapt to the new way without any options?

can we speak in specific and useful terms? {[F13607506](https://archive.blender.org/developer/F13607506/Screen_Shot_2022-09-29_at_12.10.00_PM.png) see attached screenshot. This is a common and everyday task. I was modeling out an object, I needed to cut some holes through it. So I did some boolean diffs and I get this. I would not expect to have a different material or removal of material in the areas I cutout without choosing to make it that way. I know I can correct this by specifically updating the materials. how is this more intuitive? faster? more efficient? less "cumbersome" ? I am genuinely interested to know... in my common, everyday usecase of cutting a shape out from another object, how is this new method an improvement across the board to the degree that you think everyone should simply adapt to the new way without any options?

People have been doing Boolean modeling for quite some time now. Esp for games and concept modeling. Please review this video and you will see how much of a hassle it is to change thousands and thousands of users workflow. It just doesn't make sense. If you have thousands of users workflow use cases, you should consider showing them.

youtube video showing cutters issue

People have been doing Boolean modeling for quite some time now. Esp for games and concept modeling. Please review this video and you will see how much of a hassle it is to change thousands and thousands of users workflow. It just doesn't make sense. If you have thousands of users workflow use cases, you should consider showing them. [youtube video showing cutters issue ](https://youtu.be/SzP8-OzDpac)

Another Boolean bug different from the current one: If you create any object in Geo Nodes and use a "set material" node to apply a material, then add a difference modifier to the object, there is no way I know of to actually set the material of the difference cutout from the GN modifier. See example. https://www.youtube.com/watch?v=RFm7wTqJsdY

Another Boolean bug different from the current one: If you create any object in Geo Nodes and use a "set material" node to apply a material, then add a difference modifier to the object, there is no way I know of to actually set the material of the difference cutout from the GN modifier. See example. https://www.youtube.com/watch?v=RFm7wTqJsdY

Here's an even more serious use case. Often you want to use the same "cutters" (bool diffs) to create two different objects, each with different materials. If you a worked with the "leave the cutter material slot empty" solution, it would never work. So, PLEASE do not consider that option as there are NO workarounds for it other than to duplicate all sorts of objects. Not to mention there are currently NO workarounds for the current 3.3 situation either. Way, way harder. Here's a video that describes this properly.

https://youtu.be/6_hOV5aLoX8

Here's an even more serious use case. Often you want to use the same "cutters" (bool diffs) to create two different objects, each with different materials. If you a worked with the "leave the cutter material slot empty" solution, it would never work. So, PLEASE do not consider that option as there are NO workarounds for it other than to duplicate all sorts of objects. Not to mention there are currently NO workarounds for the current 3.3 situation either. Way, way harder. Here's a video that describes this properly. https://youtu.be/6_hOV5aLoX8

Added subscriber: @Jeremy-J

Added subscriber: @Jeremy-J

I noticed some additional strange behavior with the way booleans are transferring materials in exact and fast modes. It is possible to create a situation where the boolean material overrides the entire material section of the target geometry.

How to replicate:

  • Create a cube and assign it a blue material
  • Create a sphere and assign it an orange material
  • add a difference modifier to the cube cutting it with the sphere
  • In exact mode you should now have a blue cube with an orange cutout
  • add a second material slot to the cube also set to the blue material
  • move that second material slot up in the stack to the first slot

the cube should now be entirely orange. despite only having 2 blue materials in its materials section

switching back and forth between fast/exact will change the color of the entire object
https://www.youtube.com/watch?v=CQw3NOiPh88

I think this is a bug, but I could also just be completely misunderstanding how materials slots work. Regardless, if it is intended behavior it's really counterintuitive.

I noticed some additional strange behavior with the way booleans are transferring materials in exact and fast modes. It is possible to create a situation where the boolean material overrides the entire material section of the target geometry. How to replicate: - Create a cube and assign it a blue material - Create a sphere and assign it an orange material - add a difference modifier to the cube cutting it with the sphere - In exact mode you should now have a blue cube with an orange cutout - add a second material slot to the cube also set to the blue material - move that second material slot up in the stack to the first slot # the cube should now be entirely orange. despite only having 2 blue materials in its materials section switching back and forth between fast/exact will change the color of the entire object https://www.youtube.com/watch?v=CQw3NOiPh88 I think this is a bug, but I could also just be completely misunderstanding how materials slots work. Regardless, if it is intended behavior it's really counterintuitive.

how is this more intuitive? faster? more efficient? less "cumbersome" ?

when you create new objects and edit them to use them as Booleans, by default these objects do not have a material and therefore do not transfer it. So the behavior should not usually bother you. But if you want to transfer a material, the new behavior is faster.

Often you want to use the same "cutters" (bool diffs) to create two different objects, each with different materials.

idk what often is, but yeah I agree, this case is a problem and should be considered

> how is this more intuitive? faster? more efficient? less "cumbersome" ? when you create new objects and edit them to use them as Booleans, by default these objects do not have a material and therefore do not transfer it. So the behavior should not usually bother you. But if you want to transfer a material, the new behavior is faster. > Often you want to use the same "cutters" (bool diffs) to create two different objects, each with different materials. idk what often is, but yeah I agree, this case is a problem and should be considered ```
Member

Hi. I finally got some time to work on this. I'd like to start by addressing the issue with empty material slots or no materials on the target object.
In that case it seems very clear that transferring the materials is never desired. People don't choose the default material, it just means there's no material set.
D16187: Fix #99592: Boolean: Avoid transferring empty materials, add index-based option should handle that case. I made a build that should be downloadable soon from here: https://builder.blender.org/download/patch/D16187/

After that, let's come back to the other issue. I think that will make it much clearer whether more options are required and what they should be.

Hi. I finally got some time to work on this. I'd like to start by addressing the issue with empty material slots or no materials on the target object. In that case it seems very clear that transferring the materials is never desired. People don't choose the default material, it just means there's no material set. [D16187: Fix #99592: Boolean: Avoid transferring empty materials, add index-based option](https://archive.blender.org/developer/D16187) should handle that case. I made a build that should be downloadable soon from here: https://builder.blender.org/download/patch/D16187/ After that, let's come back to the other issue. I think that will make it much clearer whether more options are required and what they should be.

Added subscriber: @Hans-6

Added subscriber: @Hans-6

@HooglyBoogly, I tested your solution. Still not perfect, (for instance multiple slots in the cutter make for a tiresome workflow if you want to keep only a couple of materials). IOW, I can't just add a single material slot from the cutter to the target (say an emissive material showing led lights) without having to add ALL the slots.

Not to mention, in the legacy behavior, you only need add a single material slot to the target object and ALL the associated cutter objects which have the same material slot are automatically added. Very simple workflow-- and probably the reason it was designed this way in the first place.

Not sure why you insist on changing this behavior, which has been a staple of Blender for multiple years. I guess that is a nice benefit of being a Blender developer.

@HooglyBoogly, I tested your solution. Still not perfect, (for instance multiple slots in the cutter make for a tiresome workflow if you want to keep only a couple of materials). IOW, I can't just *add* a single material slot from the cutter to the target (say an emissive material showing led lights) without having to add ALL the slots. Not to mention, in the legacy behavior, you only need add a single material slot to the target object and ALL the associated cutter objects which have the same material slot are automatically added. Very simple workflow-- and probably the reason it was designed this way in the first place. Not sure why you insist on changing this behavior, which has been a staple of Blender for multiple years. I guess that is a nice benefit of being a Blender developer.
Member

Removed subscriber: @Hans-6

Removed subscriber: @Hans-6

Added subscriber: @Thomas2

Added subscriber: @Thomas2
Member

Not sure why you insist on changing this behavior, which has been a staple of Blender for multiple years. I guess that is a nice benefit of being a Blender developer.

Unfortunately the behavior already changed. I want to restore it, but the change also made it seem like there are a couple use cases where different options are helpful.
Relying on material slot placement is problematic in geometry nodes and I felt there was an opportunity for more predictable default behavior that can be shared between the modifier and the node.
Making the current logic at least work as expected would be a good way to make the next part more obvious, that's why I worked on this patch first. I hope all that sounds reasonable, I think it does.

IOW, I can't just add a single material slot from the cutter to the target (say an emissive material showing led lights) without having to add ALL the slots.

Good point. Maybe this is the deal-breaker. I had hoped that some case like below, where all faces except for one have an empty material would be able to reuse the material from the base mesh's faces.
That worked by chance in most of my tests, but thinking about it more, I don't think boolean has the information about which base mesh face was removed for every result face.
In that case, the whole "Only transfer non-empty slots" idea isn't as nice as I thought.

{F13708485 size=full}

>Not sure why you insist on changing this behavior, which has been a staple of Blender for multiple years. I guess that is a nice benefit of being a Blender developer. Unfortunately the behavior already changed. I want to restore it, but the change also made it seem like there are a couple use cases where different options are helpful. Relying on material slot placement is problematic in geometry nodes and I felt there was an opportunity for more predictable default behavior that can be shared between the modifier and the node. Making the current logic at least work as expected would be a good way to make the next part more obvious, that's why I worked on this patch first. I hope all that sounds reasonable, I think it does. >IOW, I can't just *add* a single material slot from the cutter to the target (say an emissive material showing led lights) without having to add ALL the slots. Good point. Maybe this is the deal-breaker. I had hoped that some case like below, where all faces except for one have an empty material would be able to reuse the material from the base mesh's faces. That worked by chance in most of my tests, but thinking about it more, I don't think boolean has the information about which base mesh face was removed for every result face. In that case, the whole "Only transfer non-empty slots" idea isn't as nice as I thought. {[F13708485](https://archive.blender.org/developer/F13708485/image.png) size=full}
Member

I updated D16187 with the option I discussed here. I'll hope to get that into 3.4. @chippwalters (or anyone else), would you be able to test that to make sure it does what you expect? Thanks.

I updated [D16187](https://archive.blender.org/developer/D16187) with the option I discussed here. I'll hope to get that into 3.4. @chippwalters (or anyone else), would you be able to test that to make sure it does what you expect? Thanks.

This issue was referenced by 7540842ca7

This issue was referenced by 7540842ca7632dad4c2806989027a3a6b2a15668

This issue was referenced by bbb389589a

This issue was referenced by bbb389589a0555af9c516a2aacd96dc70bf2d522
Member

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'

Added subscriber: @VanessaE

Added subscriber: @VanessaE

Just wanted to drop a note to say THANK YOU for fixing this annoying behavior. 🙂 I use a lot of booleans in my models, and they always have a material assigned which reminds me of their function - opaque red and green for difference and union, and translucent yellow for intersections.

I've been moving more and more toward non-destructive modeling, so having bits of a target object turn red because I had to use exact mode in one of its difference modifiers was incredibly irritating.

Just wanted to drop a note to say THANK YOU for fixing this annoying behavior. 🙂 I use a lot of booleans in my models, and they always have a material assigned which reminds me of their function - opaque red and green for difference and union, and translucent yellow for intersections. I've been moving more and more toward non-destructive modeling, so having bits of a target object turn red because I had to use exact mode in one of its difference modifiers was incredibly irritating.

Added subscriber: @impacman

Added subscriber: @impacman

What i really don't understand in reporting this as a bug is a thing:

  1. If you booleans on pre production step (like using kitops) its mean you already have assigned materials to your objects used as booleans - different materials, emissivs. Why all these should be destroyed and reassigned manually?
  2. If no, and you using booleans on modeling step with simple shapes, why do your booleans need and have own materials? I also remeber reading some topics people asked how to preserve materials after performing booleans (like modo and 3ds max do).
    So i think it's a feature, not a bug.
What i really don't understand in reporting this as a bug is a thing: 1. If you booleans on pre production step (like using kitops) its mean you already have assigned materials to your objects used as booleans - different materials, emissivs. Why all these should be destroyed and reassigned manually? 2. If no, and you using booleans on modeling step with simple shapes, why do your booleans need and have own materials? I also remeber reading some topics people asked how to preserve materials after performing booleans (like modo and 3ds max do). So i think it's a feature, not a bug.
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
16 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#99592
No description provided.