Adjustment of the 3D printer’s Z offset is a way to achieve successful prints in a variety of situations, such as when using filament with poor adhesion or when using a thick build surface.
This article goes over the basics of Z offset, discussing the meaning of the term, the reasons why users might need to incorporate a Z offset, and looking at how to adjust this key parameter in three different ways: using G-code, slicing software, and a 3D printer’s physical LCD display.
A Z offset is a user-defined print setting that allows the printhead to be positioned above or below the default Z home position (true zero point).
A standard Cartesian-style FDM 3D printer has a printhead that moves along three axes. Movement along the X and Y axes allows the printhead to “draw” each 2D layer, while movement along the Z axis allows the printhead to move upwards to the next layer.
Because a 3D printer has a fixed build volume, there are limits to how far the printhead can move along any of these three axes. And to prevent the printer from trying to exceed these limits, hardware manufacturers install small sensors called limit switches (or endstops) which detect when a moving part has reached its limit and cannot move any further.
The limit switch on the Z axis is important because it effectively prevents the printhead from burrowing into the build surface, which could potentially cause damage to the print bed and the hotend. The limit switch recognizes when the printhead is at its lowest possible point, and prevents it from descending further. The Z probe on a printer with automatic bed leveling performs the same function.
The “home position” of the printhead more-or-less corresponds to the position where these limit switches kick in. So when a printer is “homed,” the printhead sits in a corner of the print bed, just fractionally above the surface. But sometimes a user might want the printhead’s default starting position to be slightly higher or lower on the Z axis. This can be achieved by introducing a Z offset, and there are several reasons why a user might do this.
It is important to understand that adjustment of the Z offset is not an essential form of calibration like bed leveling. Bed leveling, which should be performed when a 3D printer is set up or when a new component has been installed, ensures the nozzle is the correct distance from the print bed at every point across the build surface. It is a necessary procedure for preventing print failure.
By contrast, adjusting the Z offset is a secondary step that users may wish to perform in order to accommodate changes to material type or build surface, or simply to achieve a better first layer. Reasons for adjusting the Z offset include:
First layer: Setting a Z offset can help achieve a good first layer that is neither too far from the build plate (which can lead to adhesion issues) nor too close (which can lead to extrusion issues).
Compensating for change in build surface: If changes are made to the build surface — adding a PEI sheet on top of the bed, for example — then the printhead may need to be repositioned so it does not sit too close to the new surface.
Catering to a different material: Some filaments (PLA, for instance) work best when slightly squashed down onto the build surface in order to improve adhesion; others (like PETG) respond better when deposited from a greater height.
Printing onto a substrate: It is possible to print directly onto another object rather than onto the print bed. An easy way to do this is to adjust the Z offset to compensate for the thickness of the substrate.
Before making adjustments, users should level their print bed, either using their printer’s auto bed leveling function or by manual adjustment of bed leveling knobs.
Auto bed leveling (ABL), a feature that is becoming more common on FDM printers, involves the use of a component called a Z probe. This probe measures the gap between the print bed at nozzle tip at different points on the bed. If the distance is equal at all points, the bed is level; if the gaps differ between points, it is not. Confusingly, ABL doesn’t actually involve a physical leveling of the bed. Rather, it instructs the printhead to compensate for any unevenness by adjusting its height at different points.
Manual bed leveling, on the other hand, does involve physically leveling (or tramming) the bed. The most common method is to use a piece of paper sandwiched between the nozzle and the build surface; when pulled, the paper should offer slight resistance. If there is no friction, the nozzle is too far from the bed, but if the paper offers too much resistance or gets stuck, it is too close. This exercise should be repeated at different points across the bed, with the bed leveling knobs used to make incremental adjustments.
One way to adjust Z offset when 3D printing is to use G-code. However, beginners may prefer to use the more intuitive Z offset settings in their slicer or on their printer’s LCD display.
The relevant G-code commands for adjusting Z offset are G0 (move) and G92 (set position). To add a 0.1 mm Z offset (i.e. to increase the space between bed and nozzle tip by 0.1 mm), input the following commands:
G0 Z0 (This instructs the printhead to move to the zero point on the Z axis.)
G92 Z-0.1 (This instructs the printer to interpret its current position as though it is 0.1 mm lower. So, logically, the next time G0 Z0 is input, the printhead will position itself 0.1 mm higher than it did the first time.)
An alternative way of achieving the same effect would be to input the following commands:
G0 Z0.1 (This instructs the printhead to move 0.1 mm above the zero point.)
G92 Z0 (This instructs the printer to treat its current position — 0.1 mm higher than the original zero point — as the new zero point.)
Note that to add a negative offset — i.e. to decrease the space between nozzle and bed — then any positive values in the above examples should become negative ones, and any negative values should become positive ones. For example, inputting the commands G0 Z0 and G92 Z0.1 will position the nozzle tip 0.1 mm closer to the bed.
A slightly easier way to adjust the Z offset is to change the settings in your slicing software. The outcome is the same, as the slicer is effectively just changing the G-code, but the interface of the slicer may be more user-friendly, especially for beginners.
Setting a negative value will position the printhead closer to the build surface than true zero, while setting a positive value will move it further away from the build surface.
To adjust Z offset in Simplify3D, find the “G-Code” tab under “Edit Process Settings.” The “Z-Axis Offset” setting can be found in the “Global G-Code Offsets” section, along with offsets for the other two axes. The Z offset is defined in millimeters.
To adjust Z offset in Ultimaker Cura, a Z offset plugin like this one is required. Once the plugin is installed, search “Z Offset” in the settings search bar (under the “Profile” drop-down box) to bring up the parameters. The Z offset value is defined in millimeters.
To adjust Z offset in Slic3r, navigate to “Printer Settings” (not “Print Settings”). Z offset, defined in millimeters, can be found in the “Size and coordinates” section at the top of the page.
All 3D printers running Marlin firmware (including the Creality Ender 3) allow for adjustment of Z offset using the printer’s LCD display.
On the display, navigate to the “Control” section. Within that section, find the “Motion” settings. Z Offset is the first parameter in this group of settings.
Finding the ideal Z height for a print can take time, but adjusting Z offset is a relatively simple procedure that users should exploit in order to accommodate new build surfaces and new materials, or when troubleshooting issues with the first layer. The easiest way to add a Z offset is to adjust settings within the slicer, but more experienced users may prefer to use G-code commands.
 Singh A, Yadav PK, Singh K, Bhaskar J, Kumar A. Design of 3D Printed Fabric for Fashion and Functional Applications. InAdvances in Manufacturing and Industrial Engineering 2021 (pp. 729-735). Springer, Singapore.
 RepRap contributors. G-code [Internet]. RepRap. 2022 [cited
2022 May 27]. Available from: https://reprap.org/mediawiki/index.php?title=G-code&oldid=189591