Carve was the only boolean mode that worked for sculpting and it got removed in 2.8. WTF?

Removing features is now the goal for 2.8? Why was it removed? How am I supposed to merge objects with horrible dyntopo geometry now? BMesh never works for that, Carve worked always.

1 Like

It was removed because it was an external library that had ceased development. As such, bugs in Carve could not feasibly be fixed. It is known that the built-in Bmesh boolean method has some issues, but at least those can be more easily addressed. I think @Howard_Trickey is looking into this.

It might help if you provide some very specific examples (with .blends!) of scenarios where the Bmesh booleans fail.

I have a half-done big improvement to Bmesh Boolean. I think I am just about finished with Bevel enhancements and bug fixes for now, so can get back to working on this. My goal is to make everyone who is craving to have Carve back happy. Also, to work when geometry is just touching other geometry rather than necessary passing through it. I’d be interested in an example .blend of the horrible dyntopo objects you want to merge, as an example of something I have to make work before declaring success.

21 Likes

I don’t see a way to upload files here and I don’t know where to upload a 100MB .blend, because that’s how much files with 1mln vertices usually weigh. But this is very easy to replicate: just make a cube, go to sculpt mode, set dyntopo on Subdivide Collapse/Relative Detail, clay brush and just randomly stroke it on various zoom levels till it’s like 500k. Copy it and try to union boolean those two together. Bmesh flops like 99% of time (in various ways - sometimes objects disappear, sometimes there are non-manifold leftovers inside), Carve succeeds 100% of time.

Also there is a very powerful Carve boolean technique for merging any number of objects in one stroke: join all the objects with ctrl+J, then make a cube larger than them and position it so the previous object is inside it and then add a boolean - carve - intersect. It works fast and never ever fails. With bmesh it’s impossible, I’d have to join all the objects one by one…

2 Likes

Hi all, i’m pretty new here in the blender community, i’ve been using blender from a couple of years mostly for sculpting and modeling for 3d prints.
I’m really super hyped for the 2.8 release and i find it really a great update but there is one thing that bothers me too: the booleans.

I usually do complex booelans with sculpts and/or subdivided meshes, to be honest i don’t know if i’m doing things wrong since i’m mostly a self-taught 3d “”“artist”"" but, as far as i know, Carve was so slow but worked 99% of the times while BMesh fails 99% of the times (Or produces not manifold meshes)
Sometimes it fails also with simple low polygon meshes, and i’m pretty sure here are no overlapping faces

I’m also a software developer so i just made an addon to implement PyMesh booleans (Which includes a couple of different libraries like carve, cork, IGL, GGAL and so on), so i made my workaround and i’m ok with that (If someone needs it just tell me, i’ll upload it on my github, but you will still need to install PyMesh by yourself)

I’m wondering what are the future plans for booleans but also for 3d printing/sculpting utilities like a better remeshing (I’m just asking for manifold meshes, not super perfect topology of course)

Of course, as long as i can, i will be happy to help!

3 Likes

Thanks for your work. I often have issues with very simple cases, due to overlapping vertices. I’m wondering if there is a way to fix those. A very simple example can be easily replicate:

  1. create a cilynder in the origin (default settings)
  2. create a torus in the origin (default settings)
  3. try to bool them… :weary:

I tried changing the Overlap Threshold, but it didn’t worked, I think that this settings works for overlapping faces.
Of course you can pass around just adding a small rotation to one of the objects, but sometimes you need the geometries axactely where they are. Do you think that is something that can be fixed?
Bmesh is super fast compared to Carve, and it would be great to have them stable as well.

The main thing I am trying to fix are cases like you mention: coincident and overlapping faces and edges (within some epsilon fuzz factor) will be handled properly. I’ve already made good progress, but as you can imagine, it gets a lot more complicated when one wants to handle such cases.

4 Likes

Thanks @Howard_Trickey for the reply. I’m pretty confident that you will solve that! :smiley:

I also noticed that Bmesh is not consistent in handling open meshes. It’s kind of interesting because with just planes intersecting closed meshes it gives a cross section, while with curved surfaces is more probable that the result is a closed mesh (like Carve used to do). I actually like both behaviours, but in different situations. Do you think that it could be possible in future to have an option for that?

Yes, others have remarked that they missed some behavior of Carve when using a plane as one of the objects.
BMesh Boolean was programmed assuming that both objects are closed watertight manifold meshes, without any overlapping coplanar faces. If it does anything useful when that is not the case, it is kind of an accident, not an intention (at least, that’s what I understand – Campbell, not me, did the current BMesh Boolean).

It is unclear what one is supposed to do about inside/outside tests if either object is not closed. But I want to try to play with different options for what to do in those cases. One interesting approach is to use the concept of “piecewise constant winding number” as used in this paper or “generalized winding number”, as used in this one.

2 Likes

I see, seems a really complex topic. In my experience Carved used to distinguish the internal part of an open mesh according to the orientation of the normals. Some tests with Bmesh give different results, seems that currently the approach is indipendent from the normals. In the image the left object is the result of an intersection.


Seems based on the curvature of the surface instead of the direction of the normals. Maybe this is why with flat planes it just trim the plane according to the other object instead of creating a solid object. Is not easier to use the normals?

1 Like

I can already easily imagine the next step,
boolean with options of autoselection of the sharped edges of the intesected section created and easy fast beveling of him
*____ *

1 Like

This is the Holy Grail :slight_smile:
There is an add-on: [WIP]Bevel after Boolean - Released Scripts and Themes - Blender Artists Community
But having it non destructive would be awesome…
This is a very crucial point, expecially for designers!

1 Like

I know this addon, and it is also well done
but in fact suffers from the gap of non-desctuttive-modeling

Has this issue been fixed yet?

Not yet but I am actively working on it.

4 Likes

When can we expect this new redesigned boolean in Blender 2.8? from what i see in blender developer site, the plan is to redesign the boolean.

I work a lot with boolean with zero area faces, overlapping coplanar faces, edges or vertices to get the desired topology before doing the subdivision surface.
Moving the object to make it work is missing the point of what I’m trying to do.

This boolean limitation is the only reason i’m not going to use blender 2.8 for now.

By the way thanks alot Howard and to all developers for your hardwork, I know what you guys do are not easy, so really appreciate your work!

My personal goal is to get it done before the Blender conference this year. I haven’t a great idea of whether I can get it done by then or not. In some ways I’m making good progress now (doing a Constrained Delaunay Triangulation routine was a big step towards being able to handle many of the problems you mention). But in other ways, there are unknowns ahead of me.

I have a full-time job unrelated to Blender or 3d, and so have to do this outside of work hours.

3 Likes

Thanks Howard, appreciate it!

would be really nice to see new Boolean tools that can handle those cases.

I do a lot of very complex hardsurfaces with tons of boolean operations, without a carve boolean-like ability to handle those cases, my workflow is completely useless. It involves subdivision surfaces, so to get a working topology for the subsurf it involves coplanar faces, touching edges, coinciding vertices etc.

So I don’t even mind if its still available in blender 2.8 even though its slow and can don funny stuff sometimes and doing extra cleaning of triangles it leaves after (decimate modifier helps me a bit), but it does the job.
But still, I leave the decision to the developers who knows whats best for Blender future.

Anyway thank you and much love!

I also have the same problem in 2.8 and it caused much headache. You cannot cut a cube along the origin with a plane.

Try it: add a cube. add also a plane, and resize it to bigger than cube. Now try the boolean operation. It will not work.

Now try this: Angle the plane on the Y axis 45 degrees. Now try the boolean operation -> works as expected.

Is there a workaround?

You can use the Bisect tool to cut off a piece by a plane (it is kind of hidden in toolbar on the left – click the dot on the Knife tool to see it). See https://docs.blender.org/manual/en/latest/modeling/meshes/editing/subdividing/bisect.html

The fact that the current BMesh boolean kind of works for some orientations is just an accident. It is not intended to work with meshes that are not tightly closed volumes (for both sides of the boolean).