How to 3D Print Textured Objects Inside Clear Plastic Blocks
This walkthrough explains how to print fully textured CAD files encased inside transparent blocks, to help support complex parts, show vistas you never thought possible, or just increase the usability of your full-color models!
Step 1: Overview
Since three customers recently asked me how to print colored STLs/VRMLs embedded inside clear blocks, I decided to make a higher-level follow-up to my Clear + Texture tutorial where we used the Advanced Slicer.
(We'll build on that tutorial series here, so it's worth reading that article first if you haven't.)
To print textured bodies inside clear blocks, our general workflow is going to be:
Readers who are experts at Rhino might be able to cut the SOLIDWORKS step and create all their shapes in Rhino, but this workflow matches my skill set.
And just so people are clear, if you're a mostly SOLIDWORKS user:
Everything outside that green box you probably already know how to do, so this tutorial will mostly be dealing with how to prepare the textured, overlapping VRML for GrabCAD Print.
The first thing we have to do is understand what Booleans are and why we used to use them.
Let's get started.
Step 2: Why Booleans Are No Longer Needed (also, What Are Booleans?)
The major enabling technology for textured parts inside blocks is Stratasys/GrabCAD Print's new Advanced Slicer. We no longer have to do Boolean operations between the part and the clear volume surrounding it.
Here's what the situation looked like before:
That might seem easy for the simple shape shown above, but as you get more and more bodies in your model, some with badly defined boundaries (as happens with a lot of medical scans), the Boolean operations get a lot harder.
Also, doing the booleans with textured bodies was only successful in a few softwares, limiting what types of things could be 3D printed inside of clear blocks (and by whom).
But now with Stratasys' Advanced Slicer (just released in GrabCAD Print version 1.31, click here or even here to learn more) you don't have to do those Booleans at all. Now the Slicer realizes the larger block should automatically make space for overlapping volumes inside it:
This makes things a lot easier.
So now, let's focus on making those overlapping volumes in SOLIDWORKS, before exporting to Rhino for texture mapping.
Step 3: Making Your Overlapping Volumes
For this example I'm going to print a cutaway view of a rocket in flight, since my aerospace customers prompted the creation of this tutorial (and also because it will look really cool).
I'll start with this model of a AGM-84 Standoff Land Attack Missle (SLAM) from the GrabCAD Community, (hat tip to Community user Gurkan Yilmaz for the highly detailed model!) Here's how it looks starting off in SOLIDWORKS:
Now, I could just extrude a rectangular block around that missile and be done, and that might be a good first test for you all to do, to test the process of importing overlapping volumes for printing. But we can make things at least 20% cooler.
As with some Community models, this model is completely solid inside, but let's hollow it out and add some missile guts here in SOLIDWORKS to make things more interesting:
Missiles usually have payloads and guidance electronics, so lets add those too. And my four years of aerospace engineering told me that thin, slender shapes needed to get braced, so let's add a bunch of brace rings for no reason:
I'm pointing out all these bodies not because they have anything to do with the accuracy of the missile in real life, but because I'm being so blase about caring about whether they interfere with each other or not. Just look at how these brace rings just dive into the rocket body – before the Advanced Slicer, I'd DEFINITELY have to clean up all these overlapping volumes before GrabCAD Print would accept it:
And even though the Wiki page says the SLAM is a subsonic missile, let's add a shock wave around the nose cone and an exhaust coming out the back, just because it will look cooler:
Some of those bodies overlap right now, but let's add the HUGE clear block around all that which interferes with EVERYTHING, to encase my print. Since I want people to get closer to the cutaway, I'm making my clear body have a cutaway too:
Now, I've spent a little bit of time making the colors of the SOLIDWORKS bodies close to what I want in the final print (mainly for the benefit of taking these screenshots) but as readers of my first tutorial will know, exporting colors and textures out of SOLIDWORKS is always dicey.
So even though we're going to save this out as a VRML, you'll see it lose all its colors when it imports into Rhino:
Step 4: Adding Color and Textures in Rhino
(UPDATE 9-8-2020: Recent updates to GrabCAD Print have allowed textures and transparency to come in right from SOLIDWORKS files, making a lot of the Rhino steps below redundant. For more info on how to export fully textured files right from SOLIDWORKS, please read this more recent tutorial here: https://grabcad.com/tutorials/how-to-really-export-your-color-solidworks-files-for-printing. Then come back here to see how this rocket print turned out in the end! END UPDATE.)
This is how my nicely colored, high-resolution SOLIDWORKS model looks when I import the VRML into Rhino:
Even putting the viewport into "Rendered Mode" doesn't restore any of the cool colors I had added in SOLIDWORKS:
I don't know who to blame here, so I'm going to equally blame bad VRML exports from SOLIDWORKS and bad VRML imports to Rhino.
It SEEMS like the single SOLIDWORKS part color gets propagated down to all bodies regardless of body or face color applied in SW, but it doesn't matter because we're going to re-color everything in Rhino anyway.
You can select any body in your Rhino model, right click on a layer, and choose "Change Object Layer" to move it to the current layer. That's how I made the pictures above, putting the outer block on its own layer and easily hiding it for the image:
I usually make a layer for each sub-group I'm going to color/texture, since I want to see ONLY that group when I'm applying textures:
So now that I've got my layers, I'll show you texturing for ONE body, and the same logic will apply to all bodies in my print. Let's start with the wings:
Hit the "empty - click to assign" link and choose your swatch. I want to pretend that these wings have carbon fiber inside (no idea what they really have) so I'm going to choose a swatch that looks like this:
It's VERY IMPORTANT that this swatch be in the same folder as the VRML you will eventually save out of Rhino. If the texture isn't in the same folder as your VRML, GrabCAD Print can't find it and your entire model will come out solid gray (see 'Troubleshooting', later in this tutorial).
For this reason I usually keep my CAD, Rhino, and texture files all in one folder for a print. (And rarely use the stock Rhino textures, which are usually hidden in some install directory somewhere.)
So by now your model should look something like this:
That little mapping button at top will now become very important. It tells Rhino how you want your 2D image to lay over your 3D shape. I think this is the hardest step in the whole process to get right. (But again, I'm a mechanical engineer.)
Rhino has some default options for mapping, here's how they look on this wing model:
There is a whole mess of size, repetition and UV settings you can mess with here to get your shape to fit, and literally hundreds of Youtube tutorials trying to explain how to texture map in Rhino. I'm not going to repeat those here, but will just point out: this mapping step takes a lot of time to get right, so budget for it.
And by the way, why can I see just the wings without the rest of the rocket body? Because I knew I wanted to have a "section view" of the wings in my final print to show the "carbon fiber" inside, so I planned ahead and extruded them as separate bodies in SOLIDWORKS, just so I could select them separately here in Rhino. (#overpreparation #4Dchess)
Here are the other textures I mapped to this rocket and how:
I point out these textures not just because it's fun, but because if you're not doing this level of texture mapping inside you're models, you're not really using the full power of a printer like a J750. A lot of printers can do single color prints (like my fuel tanks above), a few can do textures, but very few can do colors and textures in six different materials perfectly encased inside a clear plastic block, at a resolution a quarter the thickness of a human hair.
It's a fun time to be alive.
Now that our textures are set, we're going to the last step in Rhino: making sure we have a transparent outer block.
Step 5: Transparency in Advanced Slicer Prints
I've learned a bit about the Advanced Slicer since my last tutorial on Clear + Textures, so I'm going to lay out the rules of transparency as I understand them:
1. Any VRML body coming out of Photoshop with even ONE transparent pixel in its wrapped texture will make that body fully transparent in the Advanced Slicer. You don't have to make the body bulk transparent in Photoshop.
2. VRMLs bodies out of Rhino must have their bulk Transparency set to 100% to be read as transparent by the Advanced Slicer.
It comes down to how the different programs write VRMLs. (Other softwares people use to texture map VRMLs, like Magics, may be different.) But those are the rules as of GrabCAD Print version 1.20 (released July 18th, 2018), and as things change, we'll update this paragraph here.
So in my rocket I have two transparencies:
I didn't know if mixing transparencies on different bodies would work, but the Advanced Slicer handled it.
Once you have set your outer block 100% transparent, you can "Save As..." a VRML, and open it right up in GrabCAD Print:
That's if everything goes well. Before I show you the finished model, let's talk about a few common things that could go wrong.
Step 6: Troubleshooting Texture + Block Prints
Common Error #1: "Missing Textures"
The biggest thing that went wrong for me was opening a model in GrabCAD Print and seeing this:
This happens if even ONE out of fifty texture files are missing, and it drove me crazy until I opened up the VRML in a text editor and started looking for the path each texture file was supposed to be at. (If you don't know how to do that, read my Tutorial #2.)
Now I just keep all the necessary texture files in the same folder as the VRML, since that's where GrabCAD Print looks.
Common Error #2: "All VRMLs should share the same core."
After I had all my texture paths squared away, I opened up my 262 body VRML inside GrabCAD Print and got this:
As you can see, error #2 looks very similar to error #1. There's a current rule hard-coded inside the Advanced Slicer that you can have a maximum of 50 separate solid bodies in your VRML before the slicer gives up trying to boolean them and says "Fine, I guess they're all surface bodies in ONE BIG VRML!" Which is good in some applications, but not this one.
Which is a shame, because I had to remove a lot of interesting bodies to get under 50:
This rule may change very soon in future versions of GrabCAD Print, and if it does, we'll update this paragraph here.
(UPDATE 9-8-2020: The fifty body rule has been removed from GrabCAD Print, and recent updates have also allowed textures and transparency to come in right from SOLIDWORKS files, making a lot of the Rhino steps in this tutorial redundant. For more info on how to export fully textured files right from SOLIDWORKS, please read this more recent tutorial here: https://grabcad.com/tutorials/how-to-really-export-your-color-solidworks-files-for-printing. END UPDATE.)
Common Error #3: Your Textures Aren't "Clamped"
The last error we'll discuss is some sort of bad handoff between Rhino and GrabCAD Print. I noticed it first when I opened my model and the carbon fiber wings which looked okay in Rhino now looked like this:
Again, this error is when your texture mapping looks fine in Rhino, but seems hyper-stretched when opening in GrabCAD Print. What's happening is the texture ends halfway across your physical body and GrabCAD Print tries to "clamp" down one end of your texture and stretch the last line of pixels to "fit."
There's probably some setting about "Clamping" or "Repeating" I could have changed in Rhino (let me know in the comments) but one of the gurus here told me to just open up the VRML in a notepad and change Repeats of the affected textures from "False" to "True":
That worked for me, and if you can't figure out Rhino clamping settings, feel free to use it too. (You have to do it for each affected body in the VRML, so 4 wing bodies for me.)
That's all the most common errors you might see, now let's get to the good stuff – the results!
Step 7: Results!
Now, I haven't had time to fully sand and clear coat this model yet (which is why you still see some layer lines), since I wanted to get the results out to you guys as soon as possible. But it still looks pretty awesome!
I'm particularly happy with how the carbon fiber came out:
And how we got the transparency just right on the shock wave:
All in all, a great result for a second draft. Did I not mention that? I always print a smaller version of my texture-inside-block prints first, because if I have errors, I want to catch them on a 3 hour build, not a 9 hour build:
That's an amazing result, which should make my customers happy, but there's even more we can do to make this print better.
Step 8: Further Optimizations
If you're still with me and want to know two more ways to optimize your texture-in-block prints:
Optimization Tip 1: Choose printing orientation for best quality.
Long-time PolyJet users will know clear prints are clearer when looking down one axis versus another, but just in case there are some new J750 users here:
So orient your block so that the faces you want most clear are visible looking down the Z axis.
Which is why, for my THIRD draft of this model, I listened to one of my co-worker's suggestions and cut the rocket in HALF instead of in 3/4ths, printing the main faces in the "More Clear" direction and things turned out even better:
That half cut is probably the keeper, the model I'll take to all the tradeshows. You can see the electronics, the payload, the shock diamonds, everything! So remember to keep iterating on your prints even after they look decent!
Preparation Tip 2: Increase thickness on thin textured bodies.
Just for reference, here is a comparison of FDM and PolyJet layer heights:
I printed this model in High Mix Mode to save printing time, meaning my layers were 0.027 mm (27 microns thick). When I originally hollowed out my SOLIDWORKS missile and did the 3 hour test print, the wing sections were 0.23 mm (only 8 layers) thick. And I was wondering why they looked half-transparent!
My missile body was also 0.35 mm or only 12 layers thick, and you could practically see through the camouflage!
So for the official print (twice as large) I also increased the thicknesses in SOLIDWORKS so that in the final print, I'd have about 30 layers for the wings and 50 for the missile body, and now those sections look much more solid.
I didn't care if they were "official" measurements or not, my goal is for it to look good in the final print. Typically you have to do this most on architectural prints – those "real size" windows and walls, scaled down to fit on your printer, are almost non-existent!
So thicken those thin bodies. You want about 3 mm thickness for a two-sided texture body to have true, solid colors. I got away with less and still made some incredible models.
I may make even more changes as I improve things, (such as removing the cut-out, making it at an angle, or moving it closer to the guts of the rocket) but hopefully this gives all you J750 users out there a better idea of what's possible with your machine!
If you have any other questions about this workflow specifically, ask me in our How to 3D print in Color GrabCAD Discussion Group.
And if you want any more information about the full-color, advanced multi-material printers used to make these model, check out Stratasys' J8 series of Pantone-validated printers here.