0
$\begingroup$

I have a series of instances, and every one of them is a single mesh, which has been generated from an SVG shape extruded and then used as an instance object to be rotated around a circular path. I am trying to use it. Mesh boolean, to cut part of these instances which sit under the "Base", a simple cylindrical shape I will use as the base of this work.

enter image description here

I created a simple cube to use as a boolean and cut the part that sits under the base. Unfortunately, for some reason, this doesn't work in the following setups: If I use something like -150m as Z distance in the transform node, the boolean doesn't work. If I don't use Realize instance node, it doesn't work. I thought in Blender 3 + we don't need this anymore.

I have tried using a Cube mesh node inside the GN, with and without subdivide, and it still doesn't work.

I found that Joint Geometry also has some weird behaviour; sometimes it works and sometimes it doesn't.

And this is what I am trying to achieve with this boolean operation:

enter image description here

enter image description here

And when I change the Z position to -150m, you can see that it ignores the boolean: enter image description here

If I add the cube to the output, you can see that the cube's position should be able to operate in that Mesh Boolean with Difference operation and cut the instances, but it completely ignores it!

enter image description here

Any idea what I am doing wrong here?

Thanks for your help.

enter image description here

$\endgroup$
6
  • 1
    $\begingroup$ Have you tried the settings "Self intersection" and "Hole tolerant" in the boolean node settings ? $\endgroup$
    – Gorgious
    Sep 12, 2022 at 6:11
  • $\begingroup$ @Gorgious I'm really surprised that it worked now by ticking the "Self intersection". I remember that these two check boxes were the first thing I tried. Probably went through so many other things and missed checking this again. Thanks for the quick reply. Do you know why the process is so slow? When I try to select "Self intersection", it takes about a few minutes to see the result on a latest M1 Macbook pro. Also, why do I still need to Realize Instances? I think that slows down the whole process. $\endgroup$
    – Mehr
    Sep 12, 2022 at 7:00
  • $\begingroup$ I think it means some of your combined geometry is self-intersecting or non manifold which makes computations go crazy. The boolean is slow because it uses a relatively slow algorithm, not suited for this number of cuts in real time. Realizing instances is the only way for blender to know that it is actual geometry, otherwise it's in an instanced state meaning all instances share the exact same geometry. That's why it is also computationally expensive to realize instances $\endgroup$
    – Gorgious
    Sep 12, 2022 at 8:01
  • $\begingroup$ You might try a regular boolean modifier with another cube object and set the solver to "fast". However if there's self intersection it might result in ugly geometry $\endgroup$
    – Gorgious
    Sep 12, 2022 at 8:02
  • $\begingroup$ Thanks, for explaining this, it was useful. Need to find a better way that live boolean. $\endgroup$
    – Mehr
    Sep 12, 2022 at 8:44

2 Answers 2

0
$\begingroup$

It has already been correctly noted in the comments by @Gorgious: You would need to enable Self Intersection here to create a correct intersection. Also applying the node Realize Instances is indispensable, because you need the geometry as a mesh.

But the problem here is not really the mesh boolean, but the geometry itself!

enter image description here

Since you instantiate the objects circularly with a high density, the geometry overlaps, which is why it is necessary to activate the option Self Intersection in the node in the first place.

This visibly solves the problem, but leads to another one for you: Your objects will still intersect and may be unusable for your application (laser cutting).

If you reduce the number of objects from $80$ to $68$, for example, there will be no more intersections, and the boolean operation will work as expected:

enter image description here

Another option, of course, would be to reduce the extrusion of the individual objects so that they would more easily emanate in a high density next to each other without overlapping.

This solution should probably be the more suitable for you, since you would have to physically adjust the individual elements after laser cutting anyway.

PS: By the way, you can also increase the performance a bit by giving the object to be instantiated a Decimate modifier, setting it to Planar with an Angle Limit of $0.1°$.

This way, when applying Realize Instances, much less edges have to be calculated.

$\endgroup$
0
$\begingroup$

The specific answer is already there (enable Self Intersection), but I also think it is important to note that, when using an external object, the boolean operation will consider its original position. To achieve a more predictable result, one may prefer to apply transformations (Ctrl+A) or to set Relative in Object info node.

Here, for example, the cone was moved up, but the Mesh boolean considers the original position. enter image description here

And here, I set Relative in Object info. Applying the transformations (Ctrl+A) of cone will have a similar effect. enter image description here

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .