What 3D printing a coronavirus taught me about DFAM and rapid prototyping
A project to visualize the novel coronavirus for a local medical conference. But over the course of our work, we re-learned some important 3D printing principles that EVERYONE can use!
Step 1: Overview
Most of the things we get to print in our Boston office are designed by humans.
Rectangular jigs for automotive customers. Circular fixtures for aerospace manufacturers. Even the smooth, shiny, realistic, consumer goods prototypes we print have a certain logic to them. They all look like they came from this Earth.
But two weeks ago I got an email out of the blue, from one of our medical customers, Joe Crozier from Lifespan Physician Group in Providence Rhode Island, pictured here:
His email subject line, in its entirety, read:
"Want to print a model of the coronavirus, for free?"
Joe had a medical student working with him, Julia Lerner, who is a medical illustrator. She had made a CAD model of the SARS-CoV-2 (AKA: the novel coronavirus) based on the latest protein bank information, but the issue was, Lifespan usually needs to track their 3D prints back to a specific patient they're treating.
You do a surgical planning print which turns a 6 hour surgery into a 3 hour surgery, that's a huge savings no matter what the prints cost, since operating costs are up to $100/minute in the OR.
You do a training print so the doctor can practice inserting that screw or clamping that artery BEFORE you have the patient open on the table, that's a win almost every time, since the cost of prints are dwarfed by the resulting savings (in surgical costs AND patient outcomes).
But this coronavirus model, while cool, wasn't directly tied to a specific patient in Rhode Island (thank goodness). And also, it was QUITE the print:
For a speedy J750, that's a lot of material. And a lot of time to be out of service, not printing surgical planning guides for real patients.
So Joe wanted to make a deal: he supplies a fully assembled, protein-accurate Coronavirus digital model to me, and using one of our 2 Stratasys J750s we have for R&D in the Boston office, I would supply a printed model back to him. (And we would get to keep one ourselves.)
Of course I said yes.
And during the course of the project, I relearned some interesting lessons about 3D printing, the biggest one being:
Step 2: Lesson 1: The hardest part is always making the digital model
Julia Lerner is a Research Assistant for the Lifespan Physician Group and a Medical Student at Brown Medical School.
She's the one who did all the heavy lifting to make this project a reality.
When I asked Julia for the steps she took to create the virus model, she replied:
"I used Cinema4D R20 with a plugin called epmv (embedded python molecular viewer) to pull in the molecular data. Data came from the protein data bank, which is a sort of repository for researchers, once they’ve solve the structure of a molecule. I exported it to .obj and sent it to Joe (he did the printer magic)."
If that sounds like Martian to you, it does to me too. And I was a SOLIDWORKS Certified Instructor and have been working in 3D printing for 5 years!
This just makes the point: no matter how much experience you have in one aspect of 3D printing, the field is growing so quickly, there's ALWAYS another deep niche with deep technical tools to do something amazing you've never heard of!
(Which is why conferences like AMUG are so important to go to. I've got my ticket for 2020, see you guys there in March!)
But yeah, I had never heard of Cinema4D or epmv before. Asking Julia for more information, she told me:
"Here’s the Protein Data Bank, and the data I used from a related (MERS) virus to get the spikes. The other protein, in blue, came in through a similar workflow:
"Below is that same molecule from above, when pulled into Cinema4D using the ePMV plugin. It’s shown by default in a 'ribbon' or 'cartoon' configuration, which gives a lot of important information about the properties of the protein, but as you can imagine, isn’t ideal for printing:
"So, I applied a 'surface' representation and split apart the subunits (chains of amino acids) that make up the spike. I later colored them different shades of red for the print:
And then Julia colored the subunits of that spike and patterened them around a sphere with a 'random' effector to make it look a little more organic. The blue proteins were added the same way, and the inner RNA (coil) and spherical membrane were modeled by hand:
I'm summarizing a lot of precise, painstaking steps that Julia had to do, because we're not even halfway through yet.
You saw above, where Julia said AFTER all her work, Joe had to do some 'printer magic'. Here's his quote:
"When Julia first sent me the file for the Coronavirus, it was one giant singular .obj (seriously, it was a huge file, like 1.4 gigs- why Julia, why?????).
If I were to drop that directly into GrabCAD Print, it would be huge, hard to process (literally took ten minutes for GCP to open it).
So I thought I'd split it into an .stl for each object I wanted to be able to control. Here it is, opened in Blender:
"Blender automatically splits the one .obj into multiple objects when you import it.
But as you can see, the 1.3 gig file when imported takes 4 gigs of ram to be loaded:
"So in Blender, in 'object mode', I selected each object and went to the 'modifier' tab:
"Here I chose the 'decimate' modifier. It consolidates a bunch of the faces in the object and tries to simplify it, and you can change that by different amounts (stopping before there is a visible change you can see with the naked eye).
"But often files can be simplified quite a bit before you actually notice. So I'll choose the decimate modifier, and in this case I think I chose ~0.5 (~50% decimate), and hit apply. It'll do it for each object at a time, so you have to click one object, decimate it, click another, decimate it, etc.. etc..
"Doing this took the total size of all the stl's combined down to about 334 MB, vs the 1.4 GB .obj.
"After decimating each object, I exported them as individual .stl's. The way to do that in Blender is to: Make sure you've deleted the 'camera' and 'light' object from your scene, and then File -> Export -> STL
"In GrabCAD Print, nothing fancy, just 'add stl's as assembly', picked each one of them, and then selected the colors for each one, based on hex codes Julia had sent. And I selected the priority of the clear membrane to be last so that it wouldn't overwrite the RNA inside. Hope that helps explain it!"
[This is Shuvom speaking again.]
So if I were to summarize the entire process, it would look something like:
Could one person have done all that work by themselves? Possibly.
Could I have done all that work on my own, today? Nope. But maybe after a few months of learning.
Could 99% of people currently 3D printing do that entire chain today? Not yet. But it's not impossible to learn.
This is the by far the hardest chain in the entire project. All I had to do was get the STL and hit 'print' on my full-color J750. Making the digital model was the tough part, the part that sets Lifespan's organization apart from other medical printers.
[I don't know if this is a great idea or a horrible idea, but if YOU have any questions about the making of these digital models, or want to try it on your own for a different virus and want to know more, Julia's email address is here: email@example.com, and Joe is at firstname.lastname@example.org.
I'm trusting you all not to harass them with nonsense.]
That's the first lesson this project taught me. The second was:
Step 3: Lesson 2: GrabCAD Print has a few hidden tools crucial to making this work
So we left off with Joe taking a 334 MB STL assembly into GrabCAD Print. But it wasn't just hitting 'Print' from there. Check out what this assembly looked like on my tray:
Beautiful, isn't it?
I'm not talking about the virus model (although it is amazing), I'm talking about that part priority tree:
Priority is not a feature many of our customers use (I'm guessing a majority reading this haven't tried it) but the idea is, for polyjet prints with overlapping volumes, something with Priority 1 will get printed over something with Priority 2 in the same space:
I've talked about this feature before in my rocket-in-a-clear-block tutorial, but I've only seen Priorities of 1 and 2 used, never 7, like Joe set! (To set priorities, right click on a body in the tree with Advanced Slicer on.)
He really controlled the priority of every bit of this model, and if he hadn't, it would have been a big chore to do enough booleans to remove those organic, odd-shaped overlapping volumes!
The second thing Joe and Julia did was specify the color of every solid using hex codes. We've talked about color picking in the past, but look at how they set all these colors:
Everyone knows about just clicking in the box to eyeball a color, or using RGBs.
But using hex codes isn't that common (in fact, to create that image above in Microsoft PowerPoint I had to eyeball the line colors, since they don't have hex code input at all).
Looking at the final physical model, one might assume it was a fully textured VRML or OBJ, but it was just an STL assembly with the color of every body carefully set. In fact, this is pretty common for medical models, including one we have in the Boston office:
Just goes to reinforce that most of the complexity of your models come from step 1, the digital pre-processing and making of the file, not from what you do in your slicing tray.
And finally, Delayed Start.
You saw before that the print was 1+ day long. Someone has to be around to clean the heads of the printer pretty soon after it's finished. But sometimes, hitting 'go' on a print while you're in the office doesn't work; you want the print to start at midnight, so it's ready by 9 am for you to pull it!
So we used Delayed Start a lot for this project, just make sure you remember the 3 requirements:
Part Priority, Hex Code colors, Delayed Start. Three little features that made this project possible.
So now let's see what it actually looks like...
Step 4: Lesson 3: WHY does my model look like THIS?
I started my print with high hopes.
The model looked SO good on the tray- you could see right through the clear membrane to the curled RNA inside!
But here's what I saw on my first test print:
As a reminder, the model looked crystal clear on my tray:
Of course, I printed it small first, with a 1 inch, 1 hour print just to test the colors and the priorities. (I always do that for any complex, boolean model with clear sections, it prevents me from wasting 8 hours on a simple mistake.)
So, pop quiz hotshots: what do you think is going on here to make the middle so cloudy?
Printer head failure?
Too much humidity in the room?
An error in the digital model, like holes in the surface bodies?
Maybe you thought like us, that printing it a little larger might make the central membrane much clearer?
The larger print was just as muddy in the center as the small.
Have your final answers ready yet? On what's causing us to be unable to see this as a clear ball with a curl of RNA inside?
The answer, in this case, was: Julia was TOO GOOD in building the virus model.
You know from my previous rocket tutorial that J750 prints with smooth faces are clearer in one direction than another:
And you know from other tutorials that you always need to sand and clear coat transparent surfaces for maximum clarity and gloss:
So if this part had been a rectangular block, I could have easily oriented it with the flat faces on the tray and sanded it afterwards.
If this part had been a SMOOTH sphere, I could have at least gotten 1/2 of my model crystal clear, by printing it 'glossy' (no support material where not needed) and then the top hemisphere would have been clear.
But, in order to be the most accurate to the scientific data, Julia put in every bump and undulation in the clear outer membrane, which leads to a lot of non-smooth surfaces to break up the light, and the density of proteins on the outside make it impossible to get sandpaper in there anyway!
I mean, just look how it comes out of the printer:
Every place where the white support material touches our clear outer membrane (a 'matte' finish) will be cloudy until sanded. But with the proteins packed so closely together, you can't get in there to sand it!
If I was doing a NON-scientifically accurate print, we could have:
- Printed the virus in 2 halves to join it later, so that each hemisphere wouldn't have support material, making them more clear,
- Exchanged the bumpy outer membrane for a smooth sphere, giving us smoother surfaces to look through, and
- Reduced how many bumpy protein things there were on the outer surface, so we could actually get sandpaper in there!
But all those things would have made the model less accurate and less useful. And if Julia wanted to give this to her ID/microbiology professor to teach a seminar on the novel coronavirus, they were all no-gos.
So in medical modeling (and on your projects!) you might hit this too: sometimes, the demands of your customers are sometime at direct odds with what your printers can do. But knowing the right compromise is what makes you, the printer operator, so valuable!
In the end, we just put a quick spray of clear-coat on our non-sanded model and that helped a bit:
And when she saw it, I forget the exact quote from Julia, but it was something along the lines of:
"At this stage, we actually don't know what's exactly inside this novel coronavirus, the structure of its RNA, so it's actually better if the membrane is a little cloudy, better illustrating what we know, and what we don't!"
So it seemed to work out.
Before we wrap up, I learned one more lesson during this project, which was:
Step 5: Lesson 4: The slowest part of rapid prototyping usually isn't the printing
(We could also call this section: "Never trust Just In Time delivery systems!")
Joe emailed me with the files on a Friday.
The medical conference Julia's teacher wanted to use the model at was on Tuesday.
I did the 1" test print Friday afternoon (1 hour print) and realized the thing about the bumpy surfaces, but since we couldn't change anything about that, scheduled a delayed start of the full size version (4" diameter) to finish Saturday morning, when one of my office mates could come in to take the parts off and clean the printer.
So good so far.
We were on track to meet the Tuesday morning deadline.
The prints came through okay Saturday morning (thanks to Anthony Valle for coming in on a Saturday, that's actually his hand in the thumbnail picture):
And on Monday morning when I came in, I clear-coated and dried the model.
And UPS said they could get the 4" model from Boston to Providence, Rhode Island overnight, in time for Julia's Tuesday conference. So I shipped it.
And then this happened:
So after a rush of emails and pre-processing Friday, after Anthony giving up part of his Saturday to come in and clean the printer, after me rushing to clear coat and dry and ship this model by Monday to arrive overnight Tuesday morning, it arrived... Wednesday morning (after a fun detour through Kentucky?), missing the conference entirely.
Why do I bring this up?
When you go to 3D printer conferences, you see a lot of vendors bragging about their machine speed. How their new machine "Prints 30% faster!" or advertising their head speed like that's the thing that matters. Because here is how average people think rapid prototyping works:
That's certainly the assumptions in most of the scheduling apps you see. And all of those trade show barkers, touting how fast their heads move.
But as this project reminded me, it more accurately looks something like this:
And if you work in any sort of large organization with expensive printers that are in any kind of demand, it more accurately looks something like this:
Test this out for a month.
Write down how long your actual print times are for a few jobs, how long after submittal the actual print started, and when it got to the end user.
Most times, for non-emergency jobs, you'll see that your prints might take 8 hours, but getting space on your printer takes 3-4 days.
This isn't a criticism of the industry (it's good that high-end printers are in high demand!) just a realization that if you want to reduce total project time, look in the right place.
(And maybe invest a 3D printing scheduling software to help reduce that big red block at the start of every project? Such as the new GrabCAD Shop that you can try for 30 days, free at this site: https://grabcad.com/shop? Okay, shameless plug over.)
In my case, knowing what I know now, I would have just DRIVEN the models from Boston to Rhode Island (2 hour trip) on Monday night, just to make sure this project got there on time. It wasn't worth all the work we did to let a little $70 UPS overnight shipment throw a wrench in the gears. It would have been worth it to personally deliver.
And that leads us to the final lesson:
Step 6: Lesson 5: Even a late, cloudy 3D print can make a difference
So after all that, here's what I got from Julia when the model arrived:
"Thank you SO much for all your work on this. My ID/microbiology professor is very excited to use it for her course!"
And from Joe:
"Thank you again! Looks incredible!"
But here's what REALLY matters, from Julia in a later email. I had asked her: "Why did you want to print out a 3D model of this coronavirus in the first place? Why not just look at it on a screen?"
And she replied:
"One characteristic of this particular virus is their spikes (red part) which allow them to survive in the GI tract, making it especially dangerous.
"I think my infections diseases instructor was especially excited to show those and to pass around the model in class. I believe it’s also unusual in that these protective/structural proteins would be embedded in a membrane — many viruses don’t have a membrane “envelope” at all.
"The 3D model is helpful because the only imaging we have of this guy is from electron microscopy and is a blurry silhouette at best. The model makes it easier to connect with the material we’re learning, and to appreciate the structures, which are so important to function and potential therapies!"
So even though the model got there late, even though it wasn't as clear as it looked on the screen, it still helped people connect with the material they were learning, to touch and FEEL something that's affected thousands of people all over the world, and help them visualize it, hopefully leading to therapies later on!
That's all we can ask for as 3D printers- a small chance to help some very talented people change the world.
I want to thank Joe Crozier at Lifespan for involving us in this project, Julia Lerner for her excellent, highly detailed virus model, and all of you for reading this tutorial.
I hope it inspires you to go print something amazing today.