Musings and Experiments on the Art and Science of 3D Printing


Recent Posts

Musing: How to print accurate parts

By Michael Hackney → Saturday, March 3, 2018


The purpose of this post is to help you understand:
  1. what accuracy, precision and resolution actually mean
  2. what factors influence printed part dimensional accuracy and precision
  3. how to calibrate Cartesian and delta printers to achieve high dimensional accuracy
  4. how to use RepRapFirmware's M579 Scale Cartesian Axes command to compensate for X-Y dimensional issues on a delta printer
As you read this, keep in mind I am a Duet controller and RepRapFirmware (RRF) convert and have been since the dc42 release with David Crocker's superb delta auto-calibration least-squares fit for the important delta calibration parameters. I use Duets (all models from the original 0.6 to the 0.8.5 and now the Duet 2 Wifi and Ethernet controllers) on all of my machines, currently 6 deltas, 1 CoreXY and 1 Cartesian printer. But I've built and sold or helped many others build their delta, CoreXY and Cartesian printers with Duets and RRF. Although some of what I describe is unique to RRF (the LSF auto-calibration and M579) the overall process for calibrating your printer to get dimensionally accurate parts still applies.

A Little Reality Check

Before we embark, have realistic expectations about what to expect from Fused Filament Fabrication (FFF) 3D printing! Think about the process – the printer is melting plastic filament and pushing it through a tiny orifice to create a thin layer – a really thin layer - of plastic as it moves. These thin layers are stacked one on top of another to create a 3D part. What could possibly go wrong?

All part-making technologies from blow and injection molding plastics to high-end CNC machining metals have limitations, tradeoffs and part design constraints. Let's look at injection molding a little closer since it uses similar materials to our FFF printers. Molten plastic changes dimension and shape as it is cooled – typically it shrinks. High precision injection molding takes this into consideration and molds are designed and painstakingly machined (i.e. $$$) to accommodate this shrinkage. But the actual part accuracy is highly dependent on the plastic formulation and purity, melt temperature, environment (humidity, ambient temperature, etc), molding pressure, mold residence time, mold temperature, and many other parameters including the part geometry itself. It is very complex and varying any one of these parameters can significantly affect the dimensions (accuracy) of the molded parts. Consider that these are million dollar machines in clean room, controlled environments using highly purified feedstock plastic and churning out thousands of identical parts. What chance do we have with a $1000 home-built 3D printer, printing inexpensive plastic filament in a home environment (i.e. big fluctuations in temperature and humidity) printing one part and then moving on to the next?

Consider that injection molded part tolerances for typical 75mm to 150mm cubic parts (in other words, the size of parts we typically 3D print) on dedicated commercial injection molding machines with highly engineered molds ($$) is around 0.23mm to 0.30mm for standard commercial moldings and 0.15 mm to 0.20mm for fine precision modlings (at much greater cost) in ABS. Think about that for a moment. Even in highly precise molding shops, the upper limit is only about an order of magnitude better (.015mm to .020mm).

You should not expect ± 0.01mm precision from your 3D printer. By the way, that's 0.0004" - a precision that even high-end CNC milling centers must work hard to maintain. If you've built or purchased a very geometrically accurate 3D printer and are meticulous and consistent in your approach to printing, you can attain ±0.05mm precision with experience and practice from a 0.4mm nozzle. But results within ±0.10mm precision are more typical and certainly PDG (pretty darned good) for most structural and ornamental prints.

Accuracy, Precision and Resolution - Oh My

Have you ever wondered what "accuracy" and "precision" and "resolution" mean? These confuse many people. I cringe every time I read a post that talks about "accuracy" when they actually mean "precision". Let me give simple definitions for each and then a drawing that should put it all into perspective:

accuracy – is a description of repeatable errors (how close the size of the actual printed item is to the true size)

precision – is a description of random errors (if you print that item multiple times, how much does it vary for each print or, in other words, how repeatable it is)

resolution – is the smallest increment you can measure (applied to your printer it is the smallest increment it can move precisely and/or the smallest feature it can print)

Resolution is related to precision but is NOT the same thing and often mistaken for precision. Resolution dictates the upper limit of precision. So, if your printer is not able to resolve movements of 0.05mm then your printed precision can never be better than that.

Another complication arises with resolution and that is attributed to the resolution of the STL model you are printing. If the model was tesselated with a low polygon count such that the resulting sliced line segments are longer than your printer's mechanical resolution, your prints will likely not be accurate. This is a subtle issue that most 3D printing enthusiasts don't realize – now you are armed with that knowledge.

Now take a look at the figure below. A target and bullseye is the classic way to show accuracy and precision. I've added a third dimension, resolution, to the picture.

The top row shows the difference between accuracy and precision at low resolution – the grid used to measure the position of each red star is very large. The stars in the bullseye can't be distinguished from each other since they are all in the same grid square – the resolution of measurement for the top row of targets.

The bottom row shows the same accuracy and precision as the top row but at high resolution. Here you can see the grid is much finer so you can distinguish the difference between stars even if they are all in the bullseye.
Click image for larger view
Think about this... high accuracy and high precision is, of course, best and the goal. But what can we say about low accuracy and high precision? In this case, a simple fudge factor could be used to compensate for the low accuracy. Once you know what this fudge factor – or compensation – is, you can apply it to each star and the results would be high accuracy and high precision! This is not true for the two cases on the right. There is no simple fudge factor that can fix low precision. So given the choice, always choose high precision over high accuracy. Accuracy is easy to adjust, precision is not.

Look at the definitions above again – precision is random, accuracy is repeatable. Hopefully this makes more sense now. Let's see how all this applies to your printed parts, that's why you are reading this right?

What Affects Printed Part Accuracy?

Realize that dimensionally accuracy and precision is dependent on a lot of factors including:
  1. the mechanical resolution and precision of the printer itself
    1. with Cartesian printers, the resolution for Z is usually different than the resolution in X and Y
    2. with delta printers, the resolution for X, Y and Z is the same but the resolution decreases from the center of the bed to the perimeter
  2. the mechanical resolution and precision of the extruder
  3. nozzle orifice diameter – and don't forget about the accuracy of the diameter
  4. the type of plastic filament 
  5. the extrusion temperature AND extrusion flow rate (which is determined by print speed)
  6. the quality of the STL file (low polygon counts are course, high polygon counts are more precise)
  7. how you slice the STL file (one perimeter is suboptimal, perimeter print order, infill density)
That's a lot to take into consideration and there are other factors too – but they have a lesser impact so I'll ignore them for this discussion.

A Strategy for Accurate Parts

You've just built or purchased a 3D printer and want to print some replacements for some broken parts on one of your kid's toys. These parts need to fit properly on the toy – they can't be too large or too small. Let's assume you have a 3D model of the parts. Let's also assume you know a little bit about slicing and have watched all of my YouTube videos and read all of my blog posts on the topic. Here's how to proceed – in order...
  1. calibrate your extruder
  2. calibrate your printer (more below)
  3. create an STL file from your model
  4. slice your STL file (see my numerous videos and posts)
  5. print three or more test cubes (a 25mm "calibration cube")
  6. measure the printed test cubes
  7. adjust the printer's firmware calibration to fix any problems
  8. repeat steps 5-7 to verify
  9. use firmware compensation (if available) to fix minor discrepancies
From the measurements you should get an idea of how accurate and precise you can print this simple test part. If these are within the requirements for the replacement toy part, you are ready to go! But if your accuracy is off (say the X and Y are always larger than expected) or precision is poor, then you have some work to do.

A note about precision: determining precision is deceptively difficult. Measuring printed parts is almost an art in-and-of itself due to the variability in the sidewalls caused by the printed layers. Measuring a part's height (Z) is more precise because the bottom layer is quite flat (depending on your print surface) and the top layer is likewise flat and measurement with a simple caliper averages any unevenness. Measuring a part's length and width is a greater challenge since the layers make it difficult to find a flat surface to register against. Also, printer artifacts like blobs and strings appear on these layers, again complicating measurement. Measuring length or width in one place on the part might yield a different value than measuring even a millimeter higher or lower. In general, I like to measure across the layers as shown in the photo below. I take three measurements – one near the front, one in the center and one near the back - and average them. Make sure not to be thrown off by a burr on the first layer. Assuming that your printer has the mechanical resolution to obtain it and you are willing to work to achieve it, a precision of ±0.05mm is achievable.

Cartesian Printer Calibration

Cartesian printers are generally easier to calibrate to get good dimensional accuracy than delta printers due to their linear motion mechanics and independence of the three axes. Once you've printed and measured your parts, adjustments to improve X, Y or Z accuracy is done with the axes' steps/mm parameter in firmware. For instance, let's assume you printed a 25mm calibration cube and your average Y measurement came out to 25.10mm. Your firmware currently has 800 steps/mm configured for Y. The formula to adjust the steps/mm is:

adjusted steps/mm = steps/mm * (true size / measured size)

For our example, this becomes:

adjusted steps/mm = 800s steps/mm * (25.0/25.1) = 796.8 steps/mm

Update your firmware and re-print the test cube and Y should be much closer to 25.0mm. Each of the three Cartesian axes are independent and can be calibrated individually in this way.

Delta Printer Calibration

Calibrating a delta printer is a much bigger challenge due to the math involved in the kinematics (it is based on trigonometry) and the inter-dependance of the three delta axes. I'm not going to go into detailed delta kinematics discussion here but I will touch on the basics you'll need to calibrate your printer.

The first thing to recognize is that the delta firmware calculates the position of the nozzle from the Cartesian coordinates fed to it in g-code. The g-code for a delta printer is – and should be – almost indistinguishable from the g-code used to print on a Cartesian printer (if the home position on the Cartesian is defined as the center of the print bed, otherwise the X-Y offset to home needs to be considered). The delta firmware calculates positions of the carriages that run up and down on the three towers. All movement in the X, Y or Z Cartesian space requires moving all three tower carriages. Confusingly, these towers are sometimes labeled X, Y and Z – but understand that they are not X, Y, Z Cartesian coordinates. It would have been nice if alpha, beta and gamma or some other label were used to reference the three towers on a delta printer.

Delta calibration depends on a lot of attributes but I'll focus on the main ones here. Some of the others really should be addressed in the mechanical build (i.e. tower lean and tower location errors, arm length variation, etc). The effects of these can be minimized with sophisticated firmware features like delta auto-calibration (RepRapFirmware) and grid compensation or the M579 compensation discussed later. The main parameters are:
  • delta radius
  • diagonal rod length (arm length)
  • the three tower steps/mm
See for the classic delta calibration guide. Note, that I left off homed height - that affects the first layer height and not the absolute X, Y, Z positioning.

The approach to calibrating a delta printer is:
  1. Adjust the steps/mm for all three towers to get the correct Z movement. This can be calculated based on the stepper motor step angle, driver microstepping, number of pulley tooth count and belt pitch. For pure movements in Z, all three carriages move the same amount. This is exactly like a Cartesian printer. The Prusa steps per mm calculator for belt systems can be used to calculate this.
  2. Measure or estimate the delta radius and arm length. It is best to actually measure these or use the manufacturer's recommendations. At the very least, roughly measure them. Plug these starting values for delta radius and arm length into the config.g (RepRapFirmware) M665 command. You can take a rough measurement for home height (the distance from the homed nozzle tip to the bed in mm) and enter that too. 
  3. Bring the bed up to print temperature. I also prefer to bring the hot end up to temperature too. Allow to stabilize for at least 5 minutes once they have reached the target temperature.
  4. Make sure to delete the config-override.g file if there is one. Then run delta calibration (G32) three or more times. Each time you run it, it will print the calibration results and the deviation of the calculated fit. You want to run enough times for the deviation to converge. You can see this in the G-code Console in the Web interface. The final converged deviation should be below  0.04 for best results. If it is higher, it is best to track down the issue and fix it. If you are using FSR probing, 99% of the time the problem is the bed is constrained, resulting in more force than necessary to trigger the FSR.
  5. Run M500, which will persist the calibration results to a config-override.g file.
  6. Print three 25 mm test cubes and measure their height. This will give you some information on how precise your printer's Z motion is. If there is a lot of variability in the heights, you should try to determine the cause and fix it. Usually it is a mechanical "slop" issue – loose belts, loose pulleys, or stepper motors not mounted firmly. 
  7. If the height (Z) is off, adjust the tower steps/mm to correct the printed height. This is the same as the calculation described above in the Cartesian Printer Calibration section. Edit the M92 command in config.g using this new value – all three towers (X, Y, Z) should be the same.
  8. Repeat steps 6 and 7 until your measured height is within the range ±0.05mm of the true value. This is a very good precision for FFF printers and requires some work to achieve. You should be happy with ±0.10mm of true value for most non-critical work. 0.10 mm is only four one-thousands of an inch – or roughly twice the diameter of a human hair.
  9. Now measure the test cube's length (X) and width (Y). These should be the same (within your printer's precision, again between ±0.05 to ±0.10). The firmware diagonal rod length determines the X-Y scaling of the printed part. This is the L parameter in the M665 command. Use the measured X value to proceed, if X and Y are different, we'll address that next. You calculate the corrected value like this: corrected L = original L * (measured X / true X)
  10. Print another test cube and measure X and Y. If X is not within your printer's precision (between ±0.05 to ±0.10) repeat steps 9 and 10 until it is.
  11. Now turn your attention to Y. Ideally, X and Y will be nearly equal (within tolerance). If not, the best approach is to identify and correct the geometrical error that is causing the discrepancy. Culprits include tower rotation, tower lean, arm length variations, and non-circular delta "radius". If you can't fix the geometrical issue and the variation is not large (say less than 5%), you can use the RRF's M579 command to compensate for the variation. You should only use M579 as a last resort and I highly recommend calibrating Z properly and calibrating either X or Y properly, leaving M579 to compensate the other axis (Y if you calibrated X).


The most important thing you can do to print the most accurate parts possible is to make sure your printer's geometry is as close to perfect as you can get it. Time spent finding and fixing geometry issues – and this applies to both Cartesian and delta printers – is time well spent and will yield much more consistent results. The next most important thing you can do is have realistic expectations on part accuracy. After reading this post, you should have a clear idea on what that means. The third most important thing you can do is carefully calibrate your printer. And lastly, try to be as consistent as possible – including using the same filament (even color), slicing attributes, and room temperature and humidity.

For my work, I prefer to print 100mm x 100mm x 50mm test objects. This larger size reduces measurement errors and exercises more of the printer mechanics. Of course they take much longer to print but for exacting work, that shouldn't be an issue.

If you have an application where dimensional accuracy is critical and you've done all of the above and your printer prints accurate and precise calibration cubes, I'd recommend looking at the polygon count in the STL, consider how part geometry could be affecting things (thin walls for example) and if all else fails, consider tweaking the scaling of one or more dimensions in the model to compensate for the variation. Another option if you designed the part, is to design for "tolerance tolerant" –------------------ meaning consider how FFF printing tolerances can affect your parts and design accordingly. Some examples are designing parts that are an integral number of layers in Z height and an integral number of extrusion widths for thin walled features.

I wrote this post in a stream of consciousness to help a few of my supporters on my Slack channel. Please let me know if there are any errors or points that are confusing and I will update this post as needed.

Plastic Razor Blades? Oh Yeah!

By Michael Hackney → Monday, December 18, 2017
I'm always looking for ways to reduce my cycle times for printing lots of parts every day - or just to make my life a little easier. I've been using these very cool plastic razor blades for a few months and I give them the "SublimeLayers Seal of Approval" for non-destructive part removal and general print bed cleanup without fear of damaging the bed.

They look like a standard single edge razor blade - and you can even put them in a box cutter. They are not sharp like a razor blade but they are remarkably keen-edged. I got mine in a bag of 100 from Amazon and they have really simplified cleanup.

UPDATE: Several people have suggested I setup an Amazon Affiliate and link to interesting and useful products that I recommend. So here we go! Thank you for your support!

Plastic Single Edge Razor Blades

Although these are not the exact blade I show above, I purchased these last time and they are functionally equivalent. The original source has been out of stock.

Musings on Under-extrusion - More to think about

By Michael Hackney → Tuesday, December 12, 2017
My blog post yesterday detailing results of the under-extrusion experiment seems to be getting some attention - it had the highest number of views in the first 24 hours of any post I've made to date. In this follow-up post I'm going to show - at a very high level - how the voids are distributed and how large they are.

In practice, the geometry of the deposited extrudate is very complex and dependent on a lot of factors including:

  • extrusion width vs orifice diameter
  • extrusion height to width ratio
  • material viscosity
  • for the first layer, adhesion properties of the bed surface
  • and  a lot of others

In the under-extrusion experiment and my standard print conditions, I use an extrusion width equal to the diameter of the orifice so the analysis here assumes that. If your extrusion width is larger or smaller than the nozzle orifice diameter, things get more complicated, fast.

I've been doing these experiments and studies for several years. I've also dissected a lot of parts and have attempted to cut the parts in cross section so I can scrutinize the deposited filament under magnification. I've never been able to get clear photos but I am working on it. You'll have to take my observations at face value - or conduct your own experiments to confirm my assertions.

Making the cross-section drawings below is a time-consuming process so I focused on three cases:

  1. full extrusion
  2. 10% under-extruded
  3. 20% under-extruded

Based on part observations, I modeled the deposited filament cross-section as a round cornered rectangle. In reality, they are a more complicated geometry and the first layer geometry is different than upper layers due to the constraint imposed by they bed (it is perfectly flat, unlike printing on an existing extruded layer). As a simplification, I performed my analysis and calculation on cross-section area and not on extrusion volume. In practice, filament deposition happens when the nozzle moves in the X-Y plane and that introduces shear forces that further affect the cross-sectional geometry. But, I assert, there is a lot to be learned from this simple two-dimensional analysis.

I began by calculating the area for the three cases as shown here:

Next, I assumed that in all three cases the extrudate width and height will be the same - in this case 0.4mm (W) and 0.2mm (H). So, the task was to calculate the corner radius that results in the target cross-sectional area. I'll leave the math as an excercise for you, dear reader, but if you are interested please post in the comments and I'll fill in the details. Here are the calculated corner radii in mms.

The final step was to create scaled drawings of the extrudate cross-sections using these corner radii. I used this cross-section to create a simple "print model" cross-section that is two perimeters wide and two layers high as shown here:
Take a close look at these cross-sections. Even at the extreme 20% under-extruded case, the void is surprisingly small and, more interestingly, are precisely distributed at the intersection of extrudate corners in the part.

Note that in reality, even the corners of the 100% case are rounded over so one has to ask where that extra filament went. Does it result in a slight width increase of the extrudate or does the slicer attempt to compensate by slightly under-extruding? I've done the back-calculations for g-code created by KISSlicer, Cura, Slic3r and Simplify3D to see how they actually handle it. This will be the subject of a future post.

Keep in mind that this deposition is happening at a very small scale, fairly quickly, and requires movement of the nozzle in the X-Y plane. As the molten filament is deposited, it can flow (i.e. distort) until it solidifies due to cooling. This can result in various distortions from the hypothetical simple case shown above. But guess what, looking at parts under reasonable magnification, it really does appear remarkably consistent with this simple case (for PLA extruded under reasonable conditions).

I'll leave you with one last drawing showing the 100% and 80% cases side-by-side at relative scale. If you look at your nozzle closely, you'll observe that the orifice is centered in a flat field. This field drags over the deposited filament and contributes to pressing it down into the bed or layer below. I don't have experimental evidence for the shape of the 80% under-extruded case shown on the right side of the drawing. I derived it - a simple trapezoid - by observing squeezing toothpaste against a counter top to simulate extrusion.

Musings on Under-extrusion - prepare to rethink your understanding

By Michael Hackney → Monday, December 11, 2017
UPDATE: my friend Tony Akens asked if I had weighed the parts to verify the commensurate reaction in mass. Of course I did! I've updated the tables to show that data.

I've asserted for a few years that under-extrusion (with the caveats listed below) is not as catastrophic as many make it out to be. I am asked to analyze lots of bad parts for my opinion on why they look bad, have gappy perimeters, first layers, and top surfaces, and other issues attributed to bad extrusion or filament diameter. I can usually (but not always) make good recommendations and they usually have nothing to do with under-extrusion. This post should dispell some of the myths and misunderstanding - or at least get you to do a few experiments of your own so you understand how your printer and filament behaves.

Before I get into those experimental details and results, first a little refresher on how FFF 3D printing extrusion works...

Extrusion Primer

From the dawn of the RepRap movement, filament extrusion calculations have been based on the length of raw filament feeding into the extruder. It is not the length of filament that is coming out of the nozzle nor is it the volume of filament coming out of the nozzle (although volumetric extrusion would be ideal and is coming). A properly calibrated extruder will feed exactly a 100mm length of filament when instructed to do so.

Stop and think about that for a moment...

The extruder doesn't care if the filament is 1.75mm D or 1.60mm D or even 2.5mm D (as long as it is constructed to handle this larger filament), it will push exactly 100mm of each of these if instructed to do so in the g-code. FYI, extrusion g-code looks like this:
G1 E100 F60
  • G1 is the "move" command
  • E is the amount to move (or push) filament through the extruder - 100mm in this case
  • F is the feed (speed) per minute - 60 mm/min in this case, which is 1mm/second
The amount of filament the extruder moves is calibrated - the "E-step calibration" - and I've talked about it at length in one of my videos. Everything I'm going to present below is critically dependent on a properly calibrated extruder, so watch the video and calibrate yours now.

While I'm discussing extruders and E-step calibration it is important to understand the impact on the number of E-steps per mm on your print quality. So let's do some calculations to help your understanding.

The circumference of a circle is calculated as:
Circumference = π * Diameter

Applying this formula to the extruder, it will tell us the length of filament that will wrap once around the drive gear as shown below. This will be the length of filament that will move in one full rotation of the stepper motor (of a direct stepper with no gear train).
Now, if we know how many steps it takes to rotate the drive gear a full turn (360°), we can calculate the steps per mm. Common stepper motors are 200 steps/rotation (although higher resolution 400 steps/rotation are affordable and gaining popularity). These are usually driven with 16 microsteps, giving 3200 steps/revolution. A discussion of microsteps is beyond this post but if there is interest, I'm happy to do a post on microstepping too.

Let's assume that the drive gear is 10mm diameter. Its circumference calculates to 31.42mm. So, 3200steps/rotation divided by 31.42 mm/rotation gives 101.85 steps/mm. This tells us that it takes 101.85 steps to move 1mm of filament through the extruder and into the hot end. Simple, eh?

The conventional wisdom dictates that extruders in the range of 400-800 steps/mm are preferable. There is good reason for this and you can perform the math to understand the effect of steps/mm on extrusion precision. I am not aware of any experimental evidence for this though and it would be challenging to design such an experiment and more challenging to analyze the results. So the best we have is anecdotal evidence from folks like me who have spent 1000s of hours printing with low and high-resolution extruders.

With that behind us, let's take a closer look inside the extruder as shown below. Simple extruders use an idler bearing to push against the filament opposite the drive gear as shown. This is to make sure the drive gear grips the filament so the filament moves when the cog rotates. Most extruders provide a tension adjustment for setting the pressure the idler bearing exerts on the filament.

If you apply too much idler pressure, you can distort the plastic filament as shown in the drawing below. Hard filaments like PLA distort less than soft filaments like TPU. PETG and ABS are in between. But, unless the filament (or drive gear) slips (or the stepper skips steps), the extruder will deliver whatever it is asked to extrude. 

Excessive idler pressure can permanently damage the filament (those teeth marks you may have seen or felt on your filament) and this damage can cause all sorts of inexplicable print problems when these grooves catch on surfaces and edges inside the extruder and hot end. I recall diagnosing extrusion issues related to these ridges catching on the edges of a Bowden tube 4 or 5 years ago and dug out this old photo:

Not only can this damaged filament snag on things, it increases the effective filament diameter, which can create excess friction in Bowden tubes. It is best to use the least amount of idler pressure as required to minimize this damage.

Sidebar: I prefer Bondtech extruders because they use two drive gears - one on each side of the filament. This allows a much lower pressure setting to get high extrusion forces, resulting in less damage to the filament and better extrusion consistency. I have blogged about Bondtech here, so search or find the Bondtech tagged posts to learn more.

Under-extrusion Print Test

Ok, let's get to the heart of this post! Over the last few months, I've had a spike in the number of print issues blamed on under-extrusion. I've patiently tried to explain that the photographed results were likely not the result of filament diameter variations or other extrusion-related issues. So this weekend I decided to conduct a controlled experiment to finally put this to bed.

Experimental Design

For this test, I used a stock Ultibots D300VS with its Micro Extruder and an E3D V6 hot end. The extruder was carefully calibrated as described in the video I linked above. This resulted in an E-step value of 780 steps/mm. This printer runs a Duet WiFi and RepRapFirmware.

For the test part, I used a 30mm cube with two vertical edges rounded - this is my standard test cube as it provides more information than a typical cube with sharp corners. I sliced the part with KISSlicer 1.6.2 as:
  • 195°C extrusion temp
  • 55°C bed temp
  • PEI bed surface
  • Filament: 1.75mm D PLA (no name brand)
  • Destring: 1mm at 20 mm/s 
  • Extrusion width: .4mm 
  • Layer thickness: .2mm 
  • Fixed layers 
  • Infill: 33% straight 
  • 3.5 loops and 3 shells 
  • Loop1>Perim 
  • Seam Join-Loop 
  • 360° Jitter 
  • Speeds: 
    • Perim: 30 mm/s 
    • Loops: 45 mm/s 
    • Solid: 50 mm/s 
    • Sparse: 50mm/s
The goal was to print this part at 100% as a baseline and then at 5%, 10%, 15% and 20% under-extruded to compare. Photos of the first layer and completed part were taken of each test and dimensional measurements of the width, depth and height made for each test part.

To achieve the under-extrusion, I simply calculated and set the E-step value in the firmware (config.g in RepRapFirmware using M92). I verified the new E-step value was indeed set before each test print as well as did a quick and dirty 100mm extrusion test to validate that the reduced length of filament was indeed delivered.

Each experiment is color-coded to make it easy to digest the data:
  1. red is normal, 100%
  2. orange is 5% under
  3. yellow is 10% under
  4. green is 15% under
  5. blue is 20% under


Let's start with the table showing the under-extrusion part measurements and observations:

As you can see here, the X and Y dimensions of the part decreased slightly with increasing under-extrusion but the Z (height) was remarkably consistent. The part mass reduced as expected, we'll see if it tracks the expected reduction in the next table. I then calculated the measurement errors as shown here:

Yes, the mass of the parts tracks the expected loss due to the under-extrusion. So we know for sure that the parts were indeed being under-extruded.

Even at significant - 20% - under-extrusion, the part dimensions are quite good.

Now let's look at the photos of these parts.

Finally, I wanted to see if I could calculate an effective filament diameter - that is, what diameter of filament would result in the same decrease in extrusion volume in the print if it were extruded at 100%. Here are the calculations:

The important column is the Calculated diameter - it shows what the corresponding filament diameter would be to produce the associated under-extrusion. Surprising huh? So if we accept that under-extrusion up to about 10% produces reasonable parts, then your filament could vary from 1.75mm to 1.66 mm in diameter and also yield respectable looking parts.


What may be surprising and counter-intuitive to many, it is clear that under this set of conditions, filament and part geometry that significant under-extrusion up to 10% under was basically insignificant. The first and top layers were filled completely with no gaps, the walls (perimeters) were also tight and looked excellent. Dimensionally, the parts are all within realistic expectations for FFF 3D prints. I carefully observed the infill as these parts printed and the infill also looked indistinguishable over this range of under-extrusion.

At 15% under-extruded, I really didn't see any visual difference but under magnification, both the first and top layers show striations due to the edges of the extruded paths not quite bonding as closely to each other.

At 20% under-extruded, there were visible gaps in the internal perimeters as well as visible striations on the first and top surfaces. But surprisingly, even these 20% UNDER-EXTRUDED parts looked quite respectable.

Family Portrait

I did not perform strength tests for any of these parts. One could argue that reducing the amount of plastic should result in weaker parts. I agree. The 20% under-extruded part showed pronounced gaps between perimeters, surely that would be weaker than tightly bonded perimeters. But how strong is strong enough?

The bottom line is, FFF 3D printing is surprisingly robust to non-trivial under-extrusion in the range up to 10% under-extruded, and possibly higher depending on your requirements. This is why I have been saying for years that I don't advocate tweaking e-steps, slicer flow adjust or any other slicer extrusion fudge factor for reasonable filament diameters.

Arguably, if you have a demanding part that requires the best precision you can muster, then perhaps setting the measured filament diameter in your slicer (and validating your extruder calibration) might make sense - but please don't use fudge factors like flow adjust.

At some point, you are just chasing zeros. This is plastic, after all, that is melted, squirted out of a ridiculously small orifice and deposited in layers to make a 3-dimensional object! Don't expect CNC machined metal precision. Realize that 0.01mm is only four ten-thousandths of an inch (0.00039)!

Next Steps

The calibration cube was an "ideal" part, it would be interesting to run this same experiment with real-world parts (anything but Benchys please). I would expect similar results based on my experience.

It would also be interesting to repeat this with other filaments, especially ABS, PETG and TPU.

Print Contest #1 Example Print

By Michael Hackney → Tuesday, December 5, 2017
I posted details about the new series of print contests yesterday. Of course, I won't ask anyone to print something that I can't print so here is an example print and submission:

KISSlicer 1.6.2
- adaptive layers 0.08 to 0.25
- 3.5 loops
- .6 skin (3 shells)
- speeds: perimeter: 18.8mm/s, loops: 33.6mm/s, solid: 33.60mm/s, sparse: 50.4mm/s
- Fillamentum Vertigo Galaxy PLA
- RailCore II (CoreXY) printer with Bondtech BMG and custom water cooled E3D V6 hot end

Let the contest begin!

First Print Contest for my Supporters!

By Michael Hackney → Monday, December 4, 2017
I'm pleased to announce that I'll be holding a series of challenging print contests for my supporters conducted through my private Slack channel. Prints will be evaluated purely on technical attributes. I'm posting this here simply to let folks know that supporting my work has other advantages!

This first contest is a very challenging model from Ferherez's Random Octopus Generator. Specifically, oco6.stl. Here are some render photos:

And here is some info about the contest:

Da Contest

  1. Michael will evaluate all submitted entries and pick the finalist as per the criteria described in Da Evaluating below
  2. Winning entry will be mailed to Michael for inclusion in a blog post and/or YouTube video. Michael will pay shipping from any country.
  3. The winner will be deemed "SublimeCreator" and will win a roll of Fillamentum PLA - your choice of color and I'll have it shipped direct to you.
  4. All submissions must be made by midnight EST (GMT -05:00) on Tuesday, December 19, 2017
  5. Winner will be announced on Friday, December 22, 2017

Da Rules

  1. print the _octo6.stl_ full scale - no resizing
  2. use any slicer of your choosing and any slicing tricks you want (variable/adaptive layer height, etc)
  3. use support or no support as you choose - but if you use support, properly post-process the part (I will be looking for un-removed support!)
  4. use an opaque filament - any type is fine as long as it is opaque
  5. submit a photo of the completed first layer (don't be shy, this WILL be challenging!) - try to get as much of the layer in the photo, this will be tricky but do your best
  6. take one or more photos of the top showing the areas in TopDetail.png
  7. take one or more photos of the bottom showing the areas in BottomDetail.png
  8. photos should be well lit and in focus
  9. all entries must include a description of the slicer used, primary slicing attributes, print speeds (all of them), filament used, and printer and extruder and hot end used
  10. ONLY FFF 3D printers
  11. Only cropping is allowed on photos - no editing!

Da Evaluating

The primary evaluation criteria are based on three categories with the following point values:
  1. first layer (30 pts)
    1. presence of gaps? minus (10 pts)
    2. even and correct layer height? (20 pts)
  2. top detail (60 pts)
    1. blobbing or stringing? (10 pts)
    2. crisp/well formed tenticle tips (circled in photo) (20 pts)
    3. evidence of support? (10 pts)
    4. good layer lines? (10 pts)
  3. clean octopus head top surface? (10 pts)
    1. bottom detail (10 pts)
    2. evidence of support? (10 pts)

I'm happy to evaluate your prints if you post a link to the required entry info or email it to me. However, the winning entry will come from one of my supporters - that's one of the perks!

Why I love KISSlicer top 10 list

By Michael Hackney → Friday, November 10, 2017

Here is my complete top 10 list of why I love KISSlicer.
and my #1 reason for loving KISSlicer is...

Why I love KISSlicer: Reason #1

By Michael Hackney →
Well, here we are at my top reason for loving KISSlicer. By way of background, I want to go on record by saying I'm at expert at slicing - and not just with KISS. My g-code background goes back 17 years on CNC milling machines. I learned how to write g-code by hand and to manually modify g-code produced by CAM applications (the machining equivalent to a slicer) to get better results.

So when I made the move (~10 years ago) to 3D printing and slicers, I was comfortable. More importantly, I had already learned how to analyze g-code in order to see what's "good" and what's "so-so". These skills carry over to slicer generated g-code. And there is a difference between good paths and not-so-good paths even though the end result (print) might look nearly the same.

I've spent 1000s of hours studying slicers and their g-code. I'm expert with all the major players: Slic3r (and Prusa Edition), Cura, MatterSlice, Skeinforge, Craftware and Simplify3D to name few. I've also developed slicing utilities to generate code that current slicers can't - like a 3D printed fishing fly, an SVG file to g-code utility and programs to combine layers from multiple g-code files to get exactly the results I want.

The one thing I can say is that, without a doubt, for those willing to truly understand the slicing process and the resulting g-code, KISSlicer is by far the most predictable. And that, dear readers, is my Why I love KISSlicer: reason #1 - Predictability. When I slice a part in KISS, I know what I'm going to get. When I tweak a parameter, KISS doesn't do weird/inexplicable/stupid things, it does what I expect it to do, predictably. I'm not going to go through a litany of stupid slicer tricks here but I have models and configuration examples for every slicer in the list above that result in g-code that simply defies explanation - and not just slicer crashes but legitimate, head-scratching, whydeydodat? examples. Thank you KISSlicer, I'm really looking forward to the next great thing!