INTRODUCTION
The goal of this lesson is to familiarize you with the basic usage of booleans and get rid of their bad reputation. Online you will read a lod of outdated and wrong information on booleans and how to use them, in essence booleans are just like any other tool and should be used (correctly) to speed up your workflow.
I will mainly cover the usage of booleans for clean “sub-d” ready topology but later on I will show some examples of a remesh / dynamesh use where the actual topology isn’t as important.
LESSON OVERVIEW
What are Booleans?
As mentioned above Booleans are a fundamental tool in any 3D modeling software and they play an important role in quickly creating complex shapes. In essence Boolean operations involve combining objects in a way that either add, subtract or intersect their geometries. In the following examples I will show a simple example of each operation.
Note I will be using Blender for most of the shown content here but the base workflow will stay the same regardless of DCC used.
Types of Booleans
1. Union (Add):
The union operation combines two or more objects into a single object, merging their volumes.
2. Difference (Subtract):
The Difference operation subtracts the volume of one object from another, effectively "cutting out" the shape of the first object from the second.
3. Intersection:
The Intersection operation creates a new object from the overlapping volume of two or more objects.
How to use Booleans
To avoid excessive cleanup and shading problems when using booleans it is imperative to match segments and prepare your mesh as best as possible to help out the boolean operation to work without issues.
Example 1.
For this example I’m going to start super simple just to demonstrate what I mean by preparing the mesh for the boolean operation and limiting / fencing where the boolean operation takes place
We are going to start out with our two main base shapes: A simple scaled cube and a cylinder. After that we will create 2 loopcuts that perfectly line up with the center of the cylinder we want to add. Now we have to limit the area in which the boolean operation will take place, we can do that with a simple inset. After that we just have to execute the Boolean Add function and do some super simple cleanup which will mainly consist of removing double vertices which can be done by a merge by distance (or your DCCs equvilant of that) and adding the 4 missing edges to our mesh. Now the only thing thats left is to add our support loops to our edges and we are done.
Now obviously this example is super basic and could probably be done with other methods as well but shows the neccessary steps to get a clean boolean result very well.
Example 2.
The classic pipe intersection:
Now this one might seem complicated at first but if we just take the same steps as in the example above its going to be really easy as well. The only difference that we need to keep in mind for this example is to match our segment count properly.
We start out with our 2 cylinders and rotate one of them by 90° now to segment match we try and make sure that the edges match up as close as possible it doesn’t have to be perfect just close enough as we later can just merge them together just keep in mind the better we match the segments here the less distortion we will have in the final sub-d result. In this example here I have 24 segments for the large cylinder and 16 for the smaller one. After matching we will add the limiting loopcuts to make sure the boolean operation will only take place and distort a small area of the two cylinders. With our meshes prepared we can use the boolean function to merge our two cylinders together and afterwards we will run a merge by distance with a bit of a higher margin to weld the loose vertices together. I’ve also added two more loopcuts in this example to support the geometry a bit better. Now all I have to do is bevel the edge from our boolean operation and add a subdivision modifier.
Common Boolean problems
I will try and show some common errors that could pop up while using booleans and while I can’t provide a solution for every single problem I will try and show some steps to hopefully resolve most problems.
<aside><img src="/icons/arrow-right_gray.svg" alt="/icons/arrow-right_gray.svg" width="40px" /> I will mostly talk about fixing the errors in Blender but the general approach to solving those problems can be done in any software.
</aside>
One addon that is very helpful for checking the integrity of your mesh is the “3D Print Toolbox” it has some nice cleanup tools that do a bunch of operations at once you can find it under “Preferences → Get Extensions (Or Addons) → 3D Print Toolbox”
Problem 1:
When doing a boolean operation always make sure that the boolean body is slightly bigger then the body that you want to Cut / Intersect. So just like when modeling normally you should avoid having coplanar faces.
Problem 2:
Using booleans on non watertight / closed meshes can often time lead to problems. That applies to both the boolean object and the mesh that you want to boolean.
Problem 3:
If your initial body has mesh integrity problems the boolean operation will most likely fail. Use the addon mentioned above or do a manual check of all your bodies that are used in the boolean operation. Activating the Face Orientation Overlay (showing the normal direction) will point out the most obvious errors while doing a merge by distance also often times can fix some more sneaky errors (overlapping faces, ripped edges etc.)
General Problem Solving Solutions
As we saw with the Problems above a lot of the problems of having faulty booleans is to make sure that our meshes are in perfect order and manifold meshes. I’ve already mentioned some steps to resolve problems in the examples above but I will reiterate them here for clarity.
- Freeze Transforms / Apply Scale on your objects
- Check normal orientation
- Get rid of any overlapping verts / faces
- Check for interiour faces
- Make sure your boolean bodies aren’t coplanar
- Use the boolean operators in the right order (Mirror first THEN Boolean)
- Limit the area that the boolean operation will take place
If you follow these steps it will get rid of most problems of booleans not behaving like they should. Keep in mind that you still have to “clean up” the mesh after the boolean operation and the trouble shooting steps above are only meant for instances where the boolean operation completely fails.
Proboolean / Remesh Workflow
The other popular method of creating interesting hard surface models very quickly is with the Proboolean Dynamesh / Remesh Workflow. It will give you very quick highpoly results at the cost of not having “clean” geometry to create a lowpoly from, but we can take steps to alleviate that problem by being smart while creating our boolean objects and our shapes in general. To create such an object that can be used for both high and lowpoly purposes we need to utilize the non destructive features in our modeling program. So while it is still possible to use the same workflow in programs like Maya the cleanup to get the lowpoly will be harder and more work thats why I will cover the workflow in Blender first (it can easily be transfered to 3dsMax as well you can check the resources for the original Polycount Thread).
The main purpose of this workflow is to get rid of our sharp looking edges that get created when we are using a boolean operation so our edges get a nice highlight that helps make the object look more real and less “cg”, while at the same time also enables us to bake some normal information to our lowpoly (if necessary).
To better explain the workflow we will be creating this simple example object:
Now in General the approach to get the base object is pretty similar to what we did above the only difference is that for the highpoly itself we don’t need to be as careful with our geometry and segment matching that gives us the freedom of making rapid changes to our design.
First I will create the base shape of our object which is just a scaled cube. I will also give the marked edges a bevel weight so I can utilize the non destructive bevel modifier
Now as you can see I’m keeping my bevel segment amount really high we need to do this to not get faceting later on once we remesh / dynamesh our object.
We are utilizing the same approach for the rest of the Boolean Bodys always making sure we keep the bevels / round surfaces nondestructive. For the Cylinder I’ve used the screw modifier for example to easily change the amount of segments.
<aside><img src="/icons/arrow-right_gray.svg" alt="/icons/arrow-right_gray.svg" width="40px" /> Just to be clear you do not have to use the bevel modifier, a subdivision modifier / subdivided body would also work fine as long as your round surfaces have enough subdivisions.
</aside>
How program agnostic are we going to go? @Timothy Dries
Once we created all of our boolean bodies we can apply our boolean modifier. Now the beauty of this method is if we need to make changes to our shapes we can easily and quickly do those while getting a mesh that live updates without any additional work needing to be done.
So far the the workflow will be the same regardless what software you work in but the next few steps will differ wether you will export the mesh into Zbrush or keep working in Blender.
Blender Remesh Workflow
For the Blender remesh workflow it would be a good idea to save your scene now as the remesh modifier is a bit finnicky and unstable if you use values that are to small for blender to calculate.
Depending on the size of your object the first time you add the remesh modifier your mesh will likely either dissapear or it will look really blocky, don’t worry about that we need to adjust some settings to be able to work with it. Firstly we are going to use the Voxel setting in the modifier, while at the same time we are going to activate the smooth shading tickbox. Now for the Voxel Size I can’t give hard values as I mentioned above the Voxel Size is dependend on your object size but a good starting point is probably to set it to 1cm and go down from there.
In my Example we see that the 1cm Remesh leaves us still looking kinda blocky so I’ve lowered the value down to 0,2cm which leaves me with some nice round surfaces. But we can also see that our edges are rather tight while at the same time looking a bit strange as if we had some artefacting going on. To alleviate this we will use another modifer that will “polish” our edges and make them nice and even.
The modifier in question is called “Corrective Smooth”. For the settings I mostly keep my Factor and Scale untouched while I only adjust the Repeat amount and the Only Smooth Tickbox activated. For the Repeat amount try to keep it somewhere between 40~100 while lower values keep your edges tighter and higher amounts will give you softer results. Its also worth mentioning the lower the value in your remesh modifier is the softer the edges will be after the Corrective Smooth so it is a bit of a balancing act between the two modifiers to get the correct look that you want. The endgoal is to keep the remesh and repeat value as low as possible to get faster results while at the same time not compromising on the quality of your edges.
This next step isn’t neccessary but it can help you keep your scene triangle count low, by adding a Decimate modifier set to Collapse and a ratio of about 0.1-0.3 we reduce the triangle count a lot while still maintaining our nice edges.
^ This probably needs some editing
<aside><img src="/icons/arrow-right_gray.svg" alt="/icons/arrow-right_gray.svg" width="40px" /> Somewhere at the end do a callback to lowpoly optimisation
</aside>
Zbrush Dynamesh Workflow
For the Zbrush Workflow the steps for your initial mesh creation stay the exact same like mentioned above.
Import your file into Zbrush and switch over to the Geometry tab and look for the DynaMesh dropdown.
Set your Blur to 0 and your Dynamesh resolution to somewhere between 1000-2400~ (dependend on your mesh size)
After the Dynamesh move over to the Deformation tab and look for the polish slider, close the option (filled circle) and polish with a value of 10-20~ higher values gives you softer edges while lower values produce sharper edges.
As an optional step we can now decimate the mesh so its not as heavy in our 3D program.
To do that head over to the ZPlugin tab and look for the Decimation Master tab, Click on Pre-Process Current, wait for the mesh to be analyzed. After the process is done you can either specify the amount of polys or just set a percentage value.
Now you can just reimport your model to either your modeling program or your baking program to bake the details down.