# Boolean modifier is not applied to the array objects

I have a cylinder and I want to create concave parts around it. Here what I did:

1. add a sphere and position it on the cylinder surface, so only one half of the sphere is visible
2. set the 3D cursor to the sphere
3. set the 3D cursor XZ axis to 0 (so Y is the projection of the sphere)
4. set the origin of the sphere to the 3D cursor
5. add an empty (arrow) in this position
6. select the sphere and add a modifier (array) using the empty as object offset (x6)
7. rotate the empty to 60° to evenly space the 6 spheres
8. apply the modifier and remove the empty

now I have all the 6 sphere around the cylinder's surface, and only one half of them is outside. Time to subtract them!

1. select the ciylinder
2. add a boolean modifier (difference)
3. select the sphere as object
4. apply
5. remove the sphere

Well, it partially works: only the original sphere is actually subtracted from the cylinder. The other 5 spheres (created with the array modifier) are not subtracted.

Why?

As long as the spheres don't intersect, it works for me:

However, once the spheres intersect each other, then the boolean modifier no longer knows what is inside or outside of the spheres, and so it cannot compute the modifier:

What is inside or outside of a mesh is determined by its normals. The difference between a rock and a cave is whether the normals point out (rock) or in (cave). But once the spheres start intersecting, the non-intersecting area is not clearly inside or outside of the sphere mesh object. One one side, it's bounded by normals pointing away from that space, so it's inside. But on the other side, it's bounded by normals pointing toward that space from the adjacent sphere, so it's outside. It cannot be clearly defined as being inside the mesh or outside the mesh-- it is not clearly a rock or a cave.

If you want this to more clearly match with your intuition of what is inside or outside, and you want to use booleans to do it, don't make arrays of thin meshes. Instead, boolean union 6 spheres, and then use that union to find the difference with your cylinder. Could you make these 6 spheres with an array modifier? Sure, if you apply the array modifier and then separate by parts in order to create 6 different objects. (And there are other, ridiculously complicated ways to do it non-destructively, but you don't want that.)

According to some other answers, this is due to non-manifold geometry. Those spheres are not connected to form one closed, watertight object that can be subtracted from the cylinder.

I have a similar issue with a simple array of nine (3x3) spheres subtracted from a plane with a solidify modifier.

This is a rather important and annoying shortcoming of the Boolean modifier, IMO.