Layer height calculator: nozzle range and full-step layer heights

Print layers between 20% and 80% of the nozzle diameter: 0.08 to 0.32 mm for a 0.4 mm nozzle, with a 0.20 mm first layer. On a T8 lead screw and a 1.8° motor one full step is 0.04 mm, so 0.08, 0.12, 0.16, 0.20, 0.24, 0.28 and 0.32 mm are the full-step heights.

Nozzle

The range scales with the nozzle diameter.

mm
mm

Checked against the nozzle range and the Z full step.

Z axis

Sets how far Z moves for one full motor step.

mm

Lead = thread pitch × starts. In Klipper, rotation_distance ÷ gear_ratio.

Usable layer heights (20% to 80% of the nozzle)

–

Bambu Lab's range (20% to 70%)

–

Z travel per full step

–

Full-step layer heights in range

–

Your layer height

–

First layer height (50% of the nozzle)

–

The formula

usable layer height    = 0.20 × nozzle  to  0.80 × nozzle
Z travel per full step = lead ÷ full steps per turn
                       = microsteps ÷ Z steps per mm
full-step layer height = whole number × Z travel per full step
first layer height     = 0.50 × nozzle
  • Lead is how far Z moves per motor turn: thread pitch times thread starts. A T8 screw has a 2 mm pitch and 4 starts, so its lead is 8 mm. In Klipper it is rotation_distance divided by any gear_ratio.
  • Full steps per turn is 200 for a 1.8° motor and 400 for a 0.9° motor.
  • Z steps per mm is the Z value on Marlin’s M92 line. It counts microsteps, not full steps, so the formula multiplies by the microstep setting.

The 20%, 80% and 50% figures come from the slicer makers.

What layer height should you use for your nozzle?

Use a layer height between 20% and 80% of the nozzle diameter, the range in OrcaSlicer’s documentation. That is 0.08 to 0.32 mm for a 0.4 mm nozzle and 0.12 to 0.48 mm for a 0.6 mm nozzle. Bambu Lab sets a stricter 70% ceiling, 0.28 mm on a 0.4 mm nozzle.

Nozzle Min (20%) Bambu Lab max (70%) Max (80%) First layer (50%)
0.2 mm 0.04 mm 0.14 mm 0.16 mm 0.10 mm
0.3 mm 0.06 mm 0.21 mm 0.24 mm 0.15 mm
0.4 mm 0.08 mm 0.28 mm 0.32 mm 0.20 mm
0.5 mm 0.10 mm 0.35 mm 0.40 mm 0.25 mm
0.6 mm 0.12 mm 0.42 mm 0.48 mm 0.30 mm
0.8 mm 0.16 mm 0.56 mm 0.64 mm 0.40 mm
1.0 mm 0.20 mm 0.70 mm 0.80 mm 0.50 mm

Where the limits come from:

  • OrcaSlicer: its wiki gives 20% to 80%. Below 20% it warns of flow inconsistencies and “fish scale” patterns, above 80% of layer adhesion problems.
  • Prusa: the knowledge base keeps layers below 80% of the nozzle (about 0.32 mm on a 0.4 mm nozzle) and does not suggest going under 0.10 mm, because 0.07 and 0.05 mm layers add little quality for much longer prints. PrusaSlicer shows an error for a layer height above the nozzle diameter.
  • UltiMaker Cura: warns when the layer height passes 80% of the nozzle size or drops under 0.04 mm.
  • Bambu Lab: the wiki gives 20% to 70%, and Bambu Studio’s printer profiles use the same limits, for example 0.08 to 0.28 mm on a 0.4 mm nozzle and 0.12 to 0.42 mm on a 0.6 mm nozzle.
  • Variable layer height: PrusaSlicer and OrcaSlicer cap adaptive and support layers at 75% of the nozzle when the printer’s Max layer height is left at 0.

The calculator’s main result uses 20% to 80%, because OrcaSlicer, Prusa and UltiMaker Cura all put the ceiling at 80%. A second result gives Bambu Lab’s 70% ceiling. On a Bambu Lab printer profile, stay at or under 70%: Bambu Studio warns and offers to adjust a layer height outside the printer’s limits.

Thinner layers cost time. Bambu Lab’s wiki prints one model in 1 h 19 min at 0.08 mm, 36 min at 0.20 mm and 28 min at 0.28 mm. Thicker layers also push more plastic per second (layer height × line width × speed), so check a tall layer against your hotend with the volumetric flow calculator and estimate the job with the print time calculator.

What are magic numbers for layer height?

Magic numbers are layer heights that are whole multiples of the Z axis travel per full motor step, so every layer change ends on a full step. On a T8 lead screw with a 1.8° motor one full step is 8 ÷ 200 = 0.04 mm, so 0.08, 0.12, 0.16, 0.20 and 0.24 mm qualify.

A layer that ends between full steps leaves the Z motor on a microstep (a fraction of a full step). Prusa’s layer height calculator explains the risk: a Z axis switched off partway through a microstep jumps to the closest full step and adds error. That happens “to some extent” even with the motors left on. Prusa says the check helps most on imperial lead screws and for unusual layer heights on metric ones.

Z drive Lead Full step, 1.8° Full step, 0.9° Full-step heights for a 0.4 mm nozzle, 1.8°
T8 / TR8x8 lead screw 8 mm 0.04 mm 0.02 mm 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32
TR8x4 lead screw 4 mm 0.02 mm 0.01 mm every 0.02 mm from 0.08 to 0.32
TR8x2 lead screw 2 mm 0.01 mm 0.005 mm every 0.01 mm from 0.08 to 0.32
M8 threaded rod 1.25 mm 0.00625 mm 0.003125 mm 0.10, 0.15, 0.20, 0.25, 0.30 (the round ones)
5/16”-18 threaded rod 1.41111 mm 0.007056 mm 0.003528 mm none that round to 0.01 mm
Voron 2.4 belt Z 8 mm 0.04 mm 0.02 mm same as T8

The T8 row fits the Creality Ender 3 V2, whose Klipper example config sets rotation_distance: 8 on Z. It also fits the Prusa MK3S: its firmware runs Z at 400 steps per mm with 16 microsteps (16 ÷ 400 = 0.04 mm). The Voron 2.4 drives Z through belts with rotation_distance: 40 and gear_ratio: 80:16, which is 40 ÷ 5 = 8 mm per motor turn. The Voron Trident’s reference config leaves the Z lead for you to set (8 for TR8x8, 4 for TR8x4, 2 for TR8x2), so use the row for the screw you fitted.

Worked example: 0.15 mm on a T8 screw

  1. Full step: 8 mm ÷ 200 = 0.04 mm.
  2. 0.15 ÷ 0.04 = 3.75 full steps, so 0.15 mm is not a magic number on this axis.
  3. The nearest magic numbers are 3 steps (0.12 mm) and 4 steps (0.16 mm).

On an M8 threaded rod the same 0.15 mm is 0.15 ÷ 0.00625 = 24 full steps, a magic number.

From Z steps per mm

If you only know the firmware value, divide the microsteps by it: 16 ÷ 400 = 0.04 mm. M503 prints the value on Marlin’s M92 line. In Klipper, use rotation_distance as the lead. To work out steps per mm from the hardware, use the steps per mm calculator.

When layers still miss full steps

  • Bed mesh: Klipper’s bed mesh adds a Z correction to every move and leaves fade off by default, so while a mesh is active, Z moves between steps within each layer.
  • Z zero between steps: whole-step layers only end on full steps if Z zero sits on one. Klipper’s endstop_align_zero in [endstop_phase] moves Z zero onto a full step, but it is written for a traditional Z axis with bed leveling screws.
  • Stock profiles: PrusaSlicer’s MK3-family presets for a 0.4 mm nozzle are 0.05, 0.07, 0.10, 0.15, 0.20 and 0.30 mm. With the MK3S’s 0.04 mm full step, only 0.20 mm is a whole number of steps. The MK3S firmware also never switches its Z motors off (Z_AXIS_ALWAYS_ON), which avoids the disabled-motor case in Prusa’s explanation.
  • Slicer features: Bambu Studio’s precise Z height adjusts the last 5 layers to hit the model’s exact height, and variable layer height in any slicer picks heights freely.

When two heights would serve equally, the full-step one costs nothing: 0.16 mm rather than 0.15 mm on a T8 axis. On imperial Z screws, where Prusa says the check helps most, pick heights from the calculator’s list.

What should my initial layer height be?

Start with half the nozzle diameter: 0.20 mm for a 0.4 mm nozzle. That is the first layer Prusa gives for its own profiles and the default in Bambu Studio and OrcaSlicer. Bambu Lab’s presets use 50% of the nozzle at every size, and OrcaSlicer’s documentation puts the maximum at 65% of the nozzle.

Slicer or maker First layer height
Original Prusa profiles 0.20 mm, per Prusa’s knowledge base. PrusaSlicer’s older “@0.8 nozzle” presets use 0.30 mm
Bambu Studio presets 50% of the nozzle: 0.10, 0.20, 0.30 and 0.40 mm for 0.2, 0.4, 0.6 and 0.8 mm nozzles
OrcaSlicer 0.2 mm default. The wiki recommends 0.25 mm on a 0.4 mm nozzle and at most 65% of the nozzle
UltiMaker Cura 0.3 mm on a generic printer. The UltiMaker S3, S5 and S7 profiles use 0.2 mm, or the layer height if that is larger. Cura warns under 0.1 mm or above 80% of the nozzle

PrusaSlicer’s tooltip gives the reason for a thicker first layer: better adhesion and more tolerance for build plates that are not perfectly flat.

  1. Set the first layer to 50% of the nozzle and keep it at or under 65%: 0.20 to 0.26 mm on a 0.4 mm nozzle.
  2. To keep every layer on a full step, make the first layer a whole number of steps too. 0.20 mm is 5 steps on a T8 axis; 0.30 mm for a 0.6 mm nozzle is 7.5, so use 0.28 or 0.32 mm. This only holds if Z zero sits on a full step, which Klipper’s endstop_align_zero arranges.
  3. Redo your first layer calibration (Z offset) after the change. Prusa notes that a new first layer height will most likely need a new Z offset.

Where to set it in each slicer

Slicer Layer height First layer height Per-nozzle limits
PrusaSlicer Print Settings > Layers and perimeters > Layer height Same group: First layer height, in mm or % of the layer height Printer Settings > Extruder 1 > Layer height limits
Bambu Studio Process > Quality > Layer height Process > Quality > Initial layer height Printer settings > Extruder > Layer height limits
OrcaSlicer Process > Quality > Layer height Process > Quality > First layer height Printer settings > Extruder > Layer height limits
UltiMaker Cura Print settings > Quality > Layer Height Quality > Initial Layer Height None; it warns above 80% of the nozzle

In PrusaSlicer the Min and Max limits only cap variable layer height and support layers. Bambu Studio and OrcaSlicer also warn when the main layer height falls outside them and offer to adjust the value. A new nozzle size needs its own line widths: work them out with the line width calculator.

Published · Figures last checked

Sources

  1. OrcaSlicer Wiki, Quality settings: Layer Height (accessed 2026-10-18)
  2. Prusa Knowledge Base, Layers and perimeters (accessed 2026-10-18)
  3. Bambu Lab Wiki, Layer height (Bambu Studio) (accessed 2026-10-18)
  4. UltiMaker Cura 5.13.0 source, fdmprinter.def.json (layer_height and layer_height_0) (accessed 2026-10-18)
  5. UltiMaker Cura 5.13.0 source, ultimaker.def.json (UltiMaker printer defaults) (accessed 2026-10-18)
  6. PrusaSlicer 2.9.6 source, PrintConfig.cpp (max_layer_height and first_layer_height) (accessed 2026-10-18)
  7. PrusaSlicer 2.9.6 bundled profiles, PrusaResearch.ini (MK3 print presets) (accessed 2026-10-18)
  8. Bambu Studio 02.08.04.57 source, PrintConfig.cpp (initial_layer_print_height) (accessed 2026-10-18)
  9. Bambu Studio 02.08.04.57 source, Tab.cpp (layer height limits warning) (accessed 2026-10-18)
  10. Bambu Studio 02.08.04.57 printer profiles (min and max layer height per nozzle) (accessed 2026-10-18)
  11. Bambu Studio 02.08.04.57 process profiles (layer height and first layer presets) (accessed 2026-10-18)
  12. OrcaSlicer 2.4.2 source, PrintConfig.cpp (initial_layer_print_height) (accessed 2026-10-18)
  13. OrcaSlicer 2.4.2 source, Slicing.cpp (75% variable layer height cap) (accessed 2026-10-18)
  14. Prusa Research, 3D printing calculator: Optimal layer height for your Z axis (accessed 2026-10-18)
  15. Klipper documentation, Endstop phase (accessed 2026-10-18)
  16. Klipper documentation, Configuration reference (full_steps_per_rotation, endstop_align_zero) (accessed 2026-10-18)
  17. Klipper documentation, Rotation distance (lead screws and threaded rods) (accessed 2026-10-18)
  18. Klipper documentation, Bed Mesh (move splitting and fade) (accessed 2026-10-18)
  19. Klipper example config, Creality Ender 3 V2 (printer-creality-ender3-v2-2020.cfg) (accessed 2026-10-18)
  20. Voron Design, Voron 2.4 reference printer.cfg (Octopus) (accessed 2026-10-18)
  21. Voron Design, Voron Trident reference printer.cfg (Octopus) (accessed 2026-10-18)
  22. Prusa-Firmware 3.14.1, MK3S variant (Z steps per mm and microsteps) (accessed 2026-10-18)