I noticed that the current behavior of the Boolean modifier with respect to materials seems odd. This is true with both the old (fast) and new (exact) one, and seems partly due to the way they work by doing a round-trip through BMesh.
What happens now: Suppose we have an Object A that the modifier is on, and an Object B that is the operand (“cutter”, if this is a difference operation). Then the modifier adds faces to A that are the result of subdividing faces in A or B. Suppose we are adding a face f into A, and the original that it is derived from in B is face g. Suppose g’s material is in slot s of the object/mesh B. Then the material of f will be whatever material is in slot s of object/mesh A. If s is bigger then the number of slots in A, then f gets the material from slot 0 of A.
This seems kind of strange - the user will lose the material assignments from B unless the materials line up the same way in A and B.
But maybe it is by design? I can imagine that strange things might happen if one were to add to the materials in an object during an evaluation of a modifier stack. For instance, what gets displayed in the property panel for the object - would it depend on whether or not the modifier is enabled?
But there is also a part of the current modeling of Objects and Meshes and I don’t really understand but maybe is supposed to help deal with such cases? Material arrays are defined in both Mesh and Object, and there is a bit array in the Object that says, for each slot, which array to pay attention to. I haven’t been able to figure out what this flexibility is for … is it perhaps so that evaluated Meshes could have different materials than their originals?
While the current behavior of the Boolean Modifier with respect to materials seems odd and maybe a bug or a design limitation, I would hesitate to change it because people are probably depending on the current behavior (and because I don’t really understand what to change - the object material array or the mesh array or both). Thoughts?