Booleans has really risen in popularity since new hard surface add-ons have popped up left and right. Though every time I use a boolean in Blender, I always have this feeling of incoming crashes and meshes that just won’t do what I want it to. So I thought an article outlining some common solutions to boolean modifier problems may be of some help, so I took my experience, did a little research and ended up with this post.
To solve most boolean problems, we can just move the object a little in any direction. Sometimes you may have multiple meshes in the same object cutting into a base mesh. Separating these and making sure that scale is applied and having normals facing outwards is a good troubleshooting start.
Note: I will call the object with the modifier on it the host object or base object. I will also call the object targeted by the boolean modifier; target or boolean object.
What does the settings on the boolean modifier do?
The boolean modifier takes another object as input and does some operation on the volume shared between the meshes. The following are the possible operations.
- Difference is the most commonly used operation. It takes the target object and subtract whatever volume it holds from the base object. Cutting into it.
- Union will join the target object to the base mesh and merge the geometry of the two objects. Any faces that would have remained inside of this newly joined object is deleted leaving a manifold (watertight) mesh.
- Intersect removes all the volume that is not shared between the two objects.
We also have the overlap threshold value slider. This is one of our defences against a misbehaving boolean. We should keep this value at an all-time low. The default value is 0.000001meters, and that is a good value to start with. However, if you have faces that are just barely overlapping this value can be used to either ignore those barely overlapping parts or tweaked to just precisely leave them within range to be included.
Having too high a value can in my experience sometimes cause loose edges being generated that shoots off in different directions. If you need to apply a boolean modifier, check wireframe viewport mode first and see if you can spot any details or loose edges that float off.
According to the Blender manual, there are some limitations to the boolean modifier. Booleans work best on manifold or watertight meshes. The manual doesn’t state that all circumstances except watertight meshes will fail but not making sure that this is true can’t guarantee a trouble-free operation.
The manual continues to list four key troublesome scenarios.
- Overlapping volumes
- Overlapping geometry
How do we troubleshoot boolean modifier problems?
There are a handful of tricks we can try if we run into an uncooperative boolean. I usually have a few steps that I go through whenever this happens. The first steps make sure we have a watertight mesh.
Make sure you have applied scale; we do this using ctrl+a and select scale from the menu. This just tells Blender that the scale of this object as it is right now is the new starting point.
I would then usually try to remove doubles. In 2.80 and later this operation is now in the “merge menu”, hit alt+m and select “by distance” and if two vertices is on top of or close to each other, they will merge. This just makes sure we close any potential gaps in the mesh and it takes care of zero area faces.
Blender will give you info about how many vertices we removed and if it seems like an unreasonable amount, undo the operation or adjust the threshold in the operation settings down in the left corner. In fact, I would suggest that if any of these steps does something unpredictable, try to find out why.
Next, we want to make sure we have consistent normals. We do this by going into edit mode, select everything and hit shift+n. Most of the time, Blender will make a good job recalculating the normals so they all face outwards.
If you still suspect normals not being consistent, you can turn on the normal direction view for faces. In the overlay menu in edit mode, find the normals section and click the face icon. Then increase the size until you see lines drawn from the faces. This will help show the direction of each face normal. Make sure they are consistently outwards facing.
Go through these three steps for both the base object and the target. When done, your objects qualify for a boolean operation.
When both objects qualify and if we still have problems, there are still steps left.
We can move the object just slightly so that the objects intersect in a cleaner way. Avoid very slight intersections. Also, avoid edges moving alongside each other just a short distance apart.
Another thing to keep in mind. Booleans work best when the meshes don’t differ too much in density. If one object has millions of polygons and the other just a handful blender has to calculate the transition between these two extremes, this can cause trouble.
I sometimes see multiple meshes in the same target object. In those cases, separate the target object into multiple objects and use a single boolean modifier for each of them on the base mesh. You can separate a piece by going into object mode, select one element (face, vertex or edge) in the object you want to boolean. Hit CTRL+L to select linked elements. Then hit “P” and separate by selection.
Add a new boolean modifier on the base mesh with this separated piece as the target.
We can now check for loose geometry. You may have stray edges, faces or vertices that are just hanging in the air causing problems. In these cases, you can select the target object, go into edit mode, select one element and use CTRL+L to select linked. Then use CTRL+I to invert the selection. If you have any stray geometry floating around, we will now have it selected. Delete anything that does not belong in your object.
If all else fails, apply the boolean modifier and see what the result looks like. When we do, it may become obvious to us why the modifier is not working properly. We may also find out that some manual cleanup is way faster than trying to solve the actual problem. In those cases, do the cleanup and save yourself some hassle.
Are there any add-on that could help us?
Some workflows are centered on boolean operations and adding all those booleans manually would just be a nightmare. Luckily, there are some add-ons available to help speed up a boolean-based workflows. However, if you are just making an occasional boolean once in a while you probably won’t save that much time.
For the occasional boolean operator, there is the built-in add-on called Booltools. Enable the add-on in user preferences. This add-on adds shortcut keys for quick boolean operations.
The most versatile shortcut this add-on has is ctrl+shift+b. This brings up a menu with all its options. The operations listed under auto boolean will make the operation on the selected object with the active object acting as the base mesh. It will also apply the modifier. The operations listed as brushes will not apply the modifier.
Booltools also has a slice option. This will use the target object as a knife and slice where the faces intersect leaving a small gap in the base mesh.
There are very many add-ons that deal with boolean workflows these days. The most well known is probably Boxcutter. Boxcutter is a paid add-on. With it, you just draw on the screen where you want the cut to happen.
Booleans is a fun tool to work with and adding some extra speed with Booltools is also welcome.
While there seem to be an endless array of troubleshooting steps available for boolean modifier problems they are quick to go through once you know what steps you can take. We can also use a handful of these steps to solve a whole range of other issues. For instance, an object with scaling that is not reset will get weird results when you use certain tools on it.
I hope you learned something. If you did or know someone else, it may be useful for, please consider sharing this with others. It means the world to me. Also, if you want an occasional update on what is happening on the site, just subscribe to the newsletter and I will let you know.
Thanks for your time.