Getting Perfectly Crisp and Dimensionally Accurate 3D Prints on a Resin Printer: Fighting Resin Shrinkage and Exposure Bleeding

Share via

Most polymers shrink when they cure or solidify. That means that their volume shrinks down during the process. The simple consequence is that the models you print either on FDM or resin printer are smaller than you designed. Therefore, when you try to print, e.g., an enclosure for PCB or a hole for a pin or a screw, they might not fit.

Today, we will explore how serious the shrinkage is, whether it is the only source of dimensional inaccuracy and how to measure it and compensate. After reading this post, you should be able to calibrate your resin printing process such that the models you print will come out perfectly within the accuracy of a single LCD pixel. That is usually roughly 50 µm + the inaccuracies in your measurement setup. We will also show you that you can easily use this test to precisely tell if you overexpose your model or not.

However, since we print quite complex geometry layer-by-layer there are some interesting phenomenons that need to be taken into account. They affect how the printed part wraps. They are complex, so we will dedicate a separate blog post on this topic in the future; today we will start with the basics.

The sources of inaccuracy

If you go and print one of the standard 35mm test cubes on a resin printer and measure it precisely, you will probably find out that it doesn’t have 35 mm, but only 34.8 mm. When you crank your exposure ridiculously high enough, you will find out that the cube has about 34.9 mm, but it lost some details. When you load the full plate of test cubes, you will find out that suddenly, all the cubes have 35.1 mm and they have a rough surface. What’s going on?

There are several sources of dimensional inaccuracy (that I know of). Let’s explore them one by one. Note that we ignore for the moment the inaccuracy in the printer construction (e.g., the Z-axis not being perfectly perpendicular to the LCD) as they are negligible compared to the other sources.

Squeezing out resin

I wrote a series of blog posts on this topic (blooming, measuring, mitigation). Basically what happens is that it takes a lot of force to squeeze resin into a thin film. Most printers are not strong enough, so they start the exposure while the resin is being squeezed out, so partially cured resin is leaving the perimeters of the layers and causes expansion and rough surface. This explains why in our initial cubes example this phenomenon appeared after adding multiple cubes. We increased the cross-section surface, thus the printer had a hard time forming the layer.

Since this effect can be easily eliminated, there is no point in compensating for it – it is better to eliminate it by keeping your resin warm (and thus liquid), introducing wait times, and reducing cross-section.

Resin shrinkage

The shrinkage of expoxy-, polyurethane- and other resins is a well-known fact. The resins we use in our printers are no exception. This is the main reason why the model cube in the initial example came out small. The printer forms a relatively precise layer in the XY direction, however, once the curing happens, the layer shrinks. How much it shrinks depends mainly on the resin used. You can read in the literature, that the shrinkage is also affected by the curing speed in epoxies, however, I haven’t found a paper on this topic for UV resins. Luckily for us, the cure speed in a printer is pretty deterministic. Thus, the effect is predictable.

Exposure bleeding

The pixels in the LCD for small rectangular openings for the light. If the light that comes from the light source isn’t perpendicular enough, it can penetrate the neighboring area of the pixel. This causes the cured voxel in a layer to be slightly overgrown. Note that non-perpendicular light isn’t the only cause of this. The LCD pixels don’t mask perfectly so they pass some light on the edges. Also, some resins cause light spattering (e.g., Siraya Tech Fast Mecha as seen in my review). How much the voxel overgrows also depends on the temperature. If the resin is warm, smaller doses of UV lights are needed to trigger the curing reaction and thus, the voxel grows more.

Note that some resins, especially the dark ones (e.g., Siraya Tech Fast Navy or some of the “high-resolution” or “8k” resins) block the UV light quite well and thus, mitigate this effect.

Also, if you have ever seen macro photography of LCD, you can see that there are tiny borders around each pixel. So a little voxel overgrowing is needed to actually form a solid layer.

See the pattern of individual pixels on the screen. The size of each pixel is 50 µm.

Modeling the inaccuracy and measuring it

If we want to get precise models, we need to:

  • print a slightly bigger model (scale it up) to compensate for the shrinkage,
  • erode the model cross-section; that is to take a constant amount of pixels out of the model cross-section to compensate for the exposure bleeding (as it has an effect only on the perimeters of the layer). This is something that the slicers already know, we only need to find out how much to compensate.
  • introduce wait times to prevent blooming and resin squeezing.

Easy, right? The only challenge remaining is to get the right number – new scale and erosion factor for the slicer and we are ready to go.

To measure them, I designed the following piece:

The piece is 100 mm long and has 6 pairs of protrusions marked by O1, O2, O3, and I1, I2, and I3. The O-protrusions stand for “measure outside” and the I-protrusions for “measure inside”. They are 20, 50, and 100 mm apart so you can easily tell if you are measuring the right dimension. You print the model at 100% scale with your resin at the desired temperature, cure it and then take the 6 measurements:

Then you enter these numbers into a calculator I build for this purpose: https://yaqwsx.github.io/printer-calculator/#/shrinkage.

The calculator

It will give you 2 numbers – scale factor and erosion factor you can put in your slicer. Also, it will give you a confidence interval: that is how precisely your measurements match the model. Basically, it tells you how good a job you did with your measurements.

Since we assume the LCD is precise enough, it doesn’t matter if you print your piece in the X-direction or Y-direction (verified for mono screens, not entirely true for RGB screens as their pixels are not square). You will always get the same results. And that’s it. This is how you can get dimensionally accurate pieces. If you aim for high precision, you have to run this test for every resin separately, as each resin (even different colors) shrinks differently.

With multiple precise measurements, and controlled temperature I was able to compensate for the exposure bleeding and resin shrinkage such that my 80mm pieces came within 70µm.

How to apply the parameters

The shrinkage we are discussing happens in the X- and Y- directions, however, it doesn’t happen in the Z-direction. The reason for that is simple – any shrinkage that happens in the Z-direction is actually compensated by the next layer. If the layer shrinks in the Z direction, the next layer will be just-ever-so-thicker and it will compensate for this effect. Therefore, when you scale your model, you have to scale it only in the X- and Y-direction of the printer, not the model!

This is a little tricky with models that are printed tilted since Chitubox scales in the original orientation of the model. I haven’t found any other way than tilting the model in another software and importing it already tilted into Chitubox.

What happens when you tilt a model and scale it in all directions? Your model gets skewed. And it will get even more skewed the more it is tilted. It means that if you print a cylinder, it will actually become an ellipse. The important observation is that when you don’t compensate, but you tilt your models, the models get skewed! If you have ever printed an engineering model, e.g. a hole for bearings, and they didn’t fit one side, this is the reason.

The tilted rings I used for confirming the skew of models

If you measured a significant exposure bleeding, you can use the built-in slicer compensation for it. However, there is no point in entering values smaller than 1 pixel. The compensation won’t do anything.

Compensation for resin-casting shrinkage

Since I use my resin printer a lot for making patterns for silicone molds that are then used for polyurethane casting, I am interested in using it for compensation for the whole process. That is the shrinkage of the UV resin in the pattern, the shrinkage of the silicone mold, and the shrinkage of the final resin.

This is why I also provide a mold pattern for the test piece. You can print it, fill it with silicone, and cast it. You will obtain a test piece that tells you the shrinkage of the whole process. Note that you will also need to print and measure the shrinkage of the resin. Why? Because of the Z-direction. The X- and Y- directions shrink in all processes (printing and casting), however, the Z-axis directions shrink only in casting. Therefore, you will have to compensate the X- and Y- differently from the Z-direction.

How does the measurement piece work?

Feel free to skip this section if you are scared of a little math.

When we take a dimension on a 3D model, let’s say $x$, it will turn out as $\overline{x}$ on the final model due to the shrinkage and bleeding. When we take outer measurements on the model, we can capture a relationship between $x$ and $\overline{x}$: we know that $\overline{x}=s\cdot x + 2e$, where $s$ is the amount of shrinkage and $e$ is the amount of growth. The equation tells you that the intended dimension shrinks by $s$ and it is larger by two growths ­– one for each protrusion (we have two faces that grew). Similarly, we use $\overline{x}=s\cdot x – 2e$ for the internal measurements.

We have a simple linear equation. However, with only one measurement, we cannot do much. We need at least two measurements to solve the equation and get $s$ and $e$ from which, we know how much to compensate.

However, since the measurements can be imprecise, we actually take 6 measurements and perform linear regression and statistical analysis: we want to find $s$ and $e$ such that “it fits the best for all 6 measurements”. This will give us a more precise value. With some extra work, we can even extract the confidence intervals – that is how precisely the numbers fit the model (this is where I would like to thank my friend with the nickname Darwin for the assistance!).

You might be wondering – why isn’t the relation $\overline{x}=s(\cdot x + 2e)$? Well, this form actually better describes the reality. Even the $e$ for which we compensate shrinks. However, the amount of shrinkage is negligible and this “more precise” equation leads to a non-linear system that is much harder to solve. This is why I stick with a simpler model that is precise enough, but still easy to solve.

How serious is the shrinkage?

I left the most important question at the end. How serious the effect is? I have measured a lot of resin since I developed this method.

Most of the resin features linear shrinkage (that is shrinkage in the measurement of distance) between 0.3­–0.6%. That is about 0.9–1.8% volumetric (shrinkage in the final volume). There were some resins (usually the tough ones) that shrink more. On the other hand, the composite resins (Siraya Tech Fast Mecha and Siraya Tech Fast Sculp Ultra) feature very low shrinkage.

I was pleasantly surprised that the exposure bleeding is a relatively weak effect. It also follows that usually, the darker resins bleed less (as they block the light more). However, on the Siraya Tech Fast Mecha, the bleeding is massive. My working theory is that the powder in the resin scatters the light. This is the reason, why many, people in their YouTube videos complain that they cannot assemble multi-part models printed with Mecha. Mecha is probably the only resin that I would actually recommend for compensating the bleeding.

The “dark” version of Fast Mecha – less exposure bleeding, but a pain to print.

For fun, I tried to add a black die into Fast Mecha. The resin becomes a nightmare to print (the layers won’t stick together as I block too much light), however, after many attempts, I managed to lower the bleeding from 110µm to 45µm. But I wouldn’t recommend this.

A few examples:

  • Siraya Tech Fast Gray: shrinkage 0.48%, bleeding 33µm.
  • Siraya Tech Fast White: shrinkage 0.46%, bleeding 52µm.
  • Siraya Tech Fast Navy Gray: shrinkage 0.34%, bleeding 10µm.
  • QTS Model Resin: shrinkage 0.90%, bleeding 24µm.
  • QTS Strong Resin: shrinkage 0.32%, bleeding 20µm.
  • Siraya Tech Fast Mecha: shrinkage 0.21%, bleeding 110µm.

Is the shrinkage constant?

An obvious question is on what does the shrinkage depends. It should be clear that is depends on the material. However, there might be other variables that affect it. At the moment, I am running more experiments and this area needs further research. So far, I have observed that:

  • the model shrinks over time (couple of days) until it settles in final dimension.
  • the time can be speed up curing at 50°C (to a 1 hour)
  • it seems that higher temperatures during printing yield slightly (roughly 0.1 percent points)

So, how much should I care?

If you print functional parts, you should care a lot and always compensate. Without compensation for shrinkage, your components will never match the non-printed ones.

In practical numbers, when you print an enclosure for 100×100 mm PCB flat on the bed, it can get smaller by half a millimeter. That’s not ideal, but doable. However, once you tilt your model, it can get seriously deformed and it won’t fit together nor it won’t be square.

This can be nicely seen on e.g., a cylindrical box with a screwable lid. If you print them tilted, they will bite every 90° when you screw the lid on. Similarly, the shape deformation can affect some articulated models. Also, shrinkage plays an important role if you want to press-fit bearing into your model.

Since we are able to measure the exposure bleeding, we can also detect overexposure. No more staring at the XP2 validation card and judging by eye, if it looks OK or not. Just print the test piece introduced in this blog post twice – one with high exposure, and once with shorter exposure. If the bleeding value is roughly the same, you know you hit the sweet spot. If it is lower for the shorter exposure, you probably overexpose your model.

The shape deformation is more serious than the fact the model is smaller. However, if you print only miniatures, there’s not much to be worried about. However, since the resin shrinks during printing, there are some consequences to printing large thin-walled models (e.g. helmets) and their dimensional stability. Also, resin shrinkage can negatively affect the performance of magnetic build-plates. We will explore this in an upcoming post. Be sure to follow me on social media to not miss it.

PS: If you are a slicer developer and you are considering implementing some kind of resin-shrinkage compensation, please, reach out to me!


Recent news: My open letter to the 3D-printing community

I love the 3D-printing community, but I think there is room for improvement. Let's get better in 2023! Read the full letter.

Support my work!

If you like my work (these blog posts, my software and CAD models) and you would like to see more posts on various topics coming, consider supporting me in various ways:

If you are interested in knowing what I am up to and recent sneak-peaks, consider following me on social media (Twitter, Instagram, Facebook).

My store offers

I launched new tank cleaning kits for Elegoo Saturn, Saturn S, Mars 1, and Mars 3. You can find them in my store.

Share via
Back To Top