How to Create Incredibly Complex Textured Shapes for 3D Printing, Using Bump Mapping

This tutorial covers how to use 2D images to create actual 3D depth and physical textures on your CAD parts and then 3D print them. Mainly we use Rhino to do the displacement-mapping, but Photoshop could be used as well. Files were then printed in full color on a Stratasys J750.

  1. Step 1: What is Bump Mapping?

    Printing CAD shapes on 3D printers is pretty simple. For single-color, FDM prints you can just import the native files into GrabCAD Print and print them:

    Readers of my previous tutorial will know, for a simple full-color workflow, you can just add one more step, inserting a program like Photoshop or Rhino which can successfully map textures onto VRML files:

    But in both those workflows, any changes to your 3D shape were done in your CAD program, and by a human. YOU had to manually move faces, planes, features around, adding holes or fillets one by one. That works great for engineering shapes, but there are a lot more textures found in nature:

    Can you imagine trying to model any of those in CAD? Like, actually making a sketch and trying to extrude those shapes in your 3D models? That would take forever, right?

    But sometimes in 3D printing you want models that have those types of textures on outside surfaces, for realism. So we're going to modify our workflow to allow a computer to make all those small, complex, quasi-random texture dips and divots for us:

    (I'm showing Rhino in that workflow, you could probably use Photoshop or Maya or Blender or many other 'artistic' CAD packages as well. Rhino was just the easiest for me.)

    Just to be clear, in normal texture mapping (which we've covered before), we're combining a 3D shape with a 2D image, but our result is still as perfectly smooth as the shape was, coming out of CAD:

    But what we're going to do is combine that 3D shape and 2D image in such a way that the white parts of the image actually project OUT from the sphere, and the dark spots actually remain SMOOTH, so what we'll end up with is a textured model of the moon where you can actually feel the mountains and lava plains:

    And out in the wider world, a lot of people use the terms "texture mapping" and "bump mapping" interchangeably, but for the purposes of this tutorial, I mean:

    Texture Mapping = the 3D part does not have its geometry changed by applying the image

    Bump Mapping = the 3D part DOES have its geometry altered by applying the image (it gets 'bumpy')

    After this tutorial is over, you can call them whatever you want, but those are the terms we'll use here. Here's more info on bump mapping, if you need it.

    Now let's get started.

  2. Step 2: Applying Simple Bump Maps in Rhino

    I'm starting off in Rhino with this smooth, circular shape:

    (Side note: I'm using a sphere I created from scratch in Rhino with the "Solid...Sphere..." command. Theoretically, the steps that follow should work equally well on STLs or VRMLs you import, but I'm having trouble getting the renders to show on imported files. We already know imported VRMLs can be textured in Rhino per my previous rocket tutorial, so it must be a setting I'm missing. If I figure out what it is, I'll update this paragraph here.)

    The bump mapping process will increase the thickness of the sphere where there is white (or lighter colors) in your image, and leave the thickness alone where there is black (or darker colors) in the image.

    So to make that easy, we're going to start off with a simple texture image like this:

    The black and white areas are very well defined, there aren't any other colors involved, and if you stare at it long enough you get dizzy, so that's a plus.

    (If you go through the rest of this tutorial with your own image and have trouble controlling the boundaries between your high and low areas, return here and use my checkerboard image until you've got the hang of it – it's a simple way to start.)

    The next step is to turn on your Textures Panel found under your "Render Tools" tab. Luckily the icon looks just like my vertigo-inducing checkerboard from above:

    That will open another window, and hit the little plus sign to add a texture:

    The texture can be any image you have. I'm starting with one of the stock checkerboard patterns in Rhino and then making it repeat 10 times in the U and V direction:

    You want it to repeat so that there isn't just one big black square next to one big white one on the top half of my globe – it should be a small, continuously repeating pattern.

    Now that my texture is defined, I can do the bump map. Rhino actually calls this command "Apply Displacement" and the orange icon looks like exactly what we're going to do to our sphere:

    In the Apply Displacement panel, choose the texture we defined earlier and always hit the "Preview" button to see what it will do to your shape:

    Now, that sphere is wacky, but at least it's easy to see what the texture is doing, right? This is why we started with a simple image first. I turned down the white height from 1.0 to 0.20, hit OK and now our simple bump map is completed:

    This shape is what your actual 3D model looks like now. It can be textured, exported into other programs, and 3D printed like any other STL or VRML. While preparing for this tutorial I actually used this same texture on a cylinder out of SOLIDWORKS and then applied a texture later in Photoshop to see what would happen, and the results looked great and printed out just fine:

    So now let's make it more complex with our Moon example.

  3. Step 3: Applying COMPLEX Bump Maps in Rhino

    So now we're going to take that same sphere and apply this much more complex image to it:

    (And BIG thanks to GrabCAD Employee Owen Orsini for thinking up this Moon example, finding the image and actually DOING the prints in his spare time – he worked out the bugs for us!)

    So this time, we're going to apply that texture as a zero-thickness texture map first, like you would with any other texture in Rhino:

    This will make the final image not only bump mapped, but texture mapped, so it looks better.

    Then, define that Moon image as a texture like we did before:

    And then apply the displacement (bump map):

    And we finally have our beautiful texture-mapped AND bump-mapped model:

    Pro tip #1: if you HADN'T applied the texture mapping before the bump mapping, your bump mapping might look really ugly and faceted, with sharp little triangular mountains everywhere. But the texture on top hides all those little details and makes it look awesome. Always texture map BEFORE bump mapping!)

    Pro tip #2: Because bump mapping is creating a LOT of extra information in your mesh, expect your bump mapped model to be many times the file size of your normal ones. Just compare this bump mapped moon to just the texture mapped version:

    And you can even see that extra information on your GrabCAD Print tray:

    Now it's time to see the results!

  4. Step 4: Results!

    It's very hard to convey how cool this bump-mapped Moon feels via pictures, but I think this image shows the results pretty well:

    But you really see the difference when you hold both the smooth and bump mapped versions side by side:

    Looking closely, you can even see the shine of my desk lamp on the upper right surface of the texture mapped model, that's how smooth it is. But the bump mapped version doesn't have any smooth surface like that to reflect from!

    So who could use bump mapping with 3D printing? Anyone who's trying to get one of these effects:

    All in all, this is an awesome and powerful way to use a full-color printer. And if you want to learn more about the affordable, FULL-color printers that can sit right next to you in your office and churn out useful models, check out our new J55 printer at this link.

    Happy printing!

    AUTHOR'S EDIT 1/18/19:

    Per all the comments, I guess I should have called this tutorial "How to use DISPLACEMENT Mapping", which is a more accurate term for what's going on than "Bump Mapping". But instead of changing every picture in the tutorial and making the comments seem out of place, I'm leaving it as is. I use the term "Displacement Mapping" in my later SOLIDWORKS tutorial, so thanks to the commenters for helping me grow and learn!