Rhino 9 Feature: Boolean Improvements

Hi all,

In the Rhino 9 WIP I’ve worked to add some quality of life improvements to the boolean commands (union, intersection, and difference).

These improvements include:

  1. Booleans will continue through failures
    This means if one part of multiple in a set has a problem, the boolean will continue processing as many objects as possible instead of failing entirely.

  2. The intersection process has been made to run in parallel
    Booleans between objects with many intersecting faces should feel snappier.

  3. Booleans have been updated to avoid non-manifold geometry
    When a boolean creates non-manifold geometry the regions will be separated into distinct pieces. NonManifoldSeparation.3dm (121.6 KB)

At the same time I’ve been trying to squash as many boolean bugs as possible. The primary problem I see is some kind of intersection issue. As our intersectors improve the robustness of booleans should as well.

Let us know what you think!

30 Likes

@Joshua_Kennedy

WOW - that looks like some great improvements - are these also included in the GH components/Rhinocommon API?

Cheers

DK

1 Like

The old SDK functions should continue working as they currently do. My plan is to provide new SDK functions which allow you to enable the multithreading and the failure processing. As for the nonmanifold results I think that’s just the correct answer and there won’t be any option for it.

2 Likes

@Joshua_Kennedy

I’m not sure if this is might be of interest to this topic when it comes to GH components, BUT:

I rolled my own Multi Thread Boolean Difference component back in 2019 for a project.

In particular I had a requirement to keep the data trees retained thru the component.

With a LARGE number of Booleans required, a single run of the final version of this project took about 45min on a 3GHz quad core i7.

Cheers

DK

Hi @Joshua_Kennedy

Nice I appreciate your hard work on this. I wanted to make a post about Boolean improvements in Rhino and before I could post I saw your post.

For V9…
McNeel must get real time Booleans working in the viewport.
Cutters should display as simple wireframe outlines and the user should see the effect once he turns on a boolean process. Like in other programs. He should be able to move the models around and see the effects in real time.

For designers this is a must for when things get changed or for designing free style mock ups. This old code for Booleans is primitive and stifles a designers creativity. How can McNeel developers keep heaping newer code on a debased way of working? The first thing you need to do is make boolean and hole cutting realtime interactive and enabled with good history that allows the user to make changes to the models at anytime. Other programs have great boolean modeling in real time, Rhino is primitive by comparison and apparently not improving user experience but making the code more robust, but that still means Rhino’s boolean modeling is not up to standards.
RM

5 Likes

A little aside, BUT, this is the one KILLER APP of Grasshopper for product designers.

Apart from the larger plugin development I do in GH, 90% of my GH scripts are some sort of automated boolean operation preview tool chain.

I’ve done an video in the past detailing this workflow:

Of course it would be nice to have some of this built into the Rhino workflow, but there are huge advantages to adding some GH scripts to an otherwise traditional modeling workflow.

Cheers

DK

2 Likes

Hi @kiteboardshaper

I’m already aware of Gh and use it for these purposes I have many GH scripts for placing rivets, screws and cutters before that I had created vbscripts to add holes and cutouts in Rhino V2. The gh approach is a cheesy work around as it doesn’t have materials and needs to be baked for the most part at least for people still using V7 rhino. This approach doesn’t compare to real time booleans nor have the ease of use, nor provide the feedback a designer needs for fast design iteration. By the time you open a GH file and fiddle about you could already have a design iteration done in another program.

Having this native and work in realtime would be better overall for user experience,
RM

2 Likes

Can it support subd?

Do you mean allow booleans between SubD objects? Currently, the booleans convert the SubD to NURBS then the boolean is run on the NURBS geometry.

And it’s kind of buggish because it uses the single .faces and not the packed one :man_shrugging:t2:

Should we show the ToNURBS options on the boolean commands if a SubD is selected?

1 Like

It’s important having the chance to choose packed, yes.

2 Likes

I opened RH-88221 to get this fixed

2 Likes

Great stuff @Joshua_Kennedy!

I remember old Matrix 7.5 and 9 having a Boolean Builder Tool, with a few tricks to overcome some of the dificulties Rhino has with Booleans, especailly in the jewelry area, where sometimes you could have hundreds of cutters on several intersecting polysurfaces.

More experienced modelers got around boolean limitations beign mindful when building up the model, but even then, jewelry can get messy and the objects can get heavy (flow on surface, mesh objects mixed with polysrfs, cage manipulation, scultural features, etc…).

In old Matrix, when the option “One by One” was on, you could see it go trough each difference operation, cutter by cutter, and to avoid memory limit crashes that were common in 32bit, the tool would do aClearUndo for each cut, and it would highlight the problematic cutters if some of them failed to do the cut.

I couldn’t find a video, but that whole process made it very easy to troubleshoot when needed.

There have been a lot of papers in the past few years in the area of mesh booleans (see Shaped Code). Hopefully the team has been looking at these efforts as some of them are very impressive. I actually was able to try the Shaped Code implementation, and it was extremely fast and robust.

1 Like