The Myth of G2 / G3 Arc Commands
Introduction
A commonly held belief in the 3D printing community is that using G2
/G3
arc commands leads to smoother curves and more precise prints. This article explores why that belief doesn’t hold in modern 3D printer firmware - especially in Klipper.
Historical Context
- Circular approximation in CNC originated post-1950s with the RS-274 standard.
- Early computing made it profoundly impractical to represent curves as discrete segments (via multiple
G1
commands). Even a simple quarter-circle would require hundreds of G-code lines. G2
andG3
commands solved this by defining a complete arc with ease - specifying only the endpoint and the center or radius in a single line.- This approach shifted the computational burden of trajectory calculation from the human programmer or external computer to the machine controller itself.
Important:
- Virtually no CNC or 3D printer based on Cartesian (or CoreXY, Delta, etc.) linear motion is mechanically capable of true circular (or diagonal) motion due to its mechanical properties, kinematic layout and the discrete stepping of the motors.
- Every movement in the X-Y plane, aside from straight lines, must be discretized into combinations of small linear X and Y segments.
- A sufficiently high resolution creates the visual “illusion” of a smooth object.
3D Printing: A Chain of Approximations
Analyzing the typical workflow in 3D printing highlights that the original model geometry undergoes multiple approximation steps before becoming a physical printed object:
-
Native CAD
Native CAD data represent the original design intent, containing the full parametric feature history and exact Boundary Representation (B-Rep) geometry. No approximations occur at this stage. -
Export to STEP
STEP files represent the exact geometric model - retaining precise B-Rep geometry and topology but losing parametric history. No approximations yet. -
Export to STL
STL format introduces the first approximation, as it contains only a faceted mesh approximation of the model’s surfaces. Precise geometry, topology, and design history are discarded. The magnitude of error depends heavily on the software settings for chordal and angular tolerances. -
Importing into the Slicer and Slicing
Most modern slicers don’t natively handle B-Rep slicing. Instead, they internally convert precise geometry into a high-resolution mesh. Slicing this mesh to generate tool-paths introduces the second approximation. -
Arc Generation by the Slicer
Typically performed as a post-processing step after initial mesh slicing, arc generation do not utilize the original design intent. Instead, it attempts to reconstruct curves from already linearized tool-paths. This constitutes the third approximation. -
Arc Conversion in Klipper
G-code files containingG2
/G3
commands are not direct motor / movement instructions; they’re firmware (specifically klippy-host) commands. Klipper interprets and immediately re-segments arcs into short linear movements (G1
). The segment length is determined by the[gcode_arcs]
configuration. This is the fourth approximation.
Important:
- Every approximation introduces a certain resolution or precision limit and therefore results in deviation from the original design intent.
- These approximations are lossy conversions - once detail or precision is lost in an earlier step, it cannot be recovered by applying a higher resolution later in the process.
- The resolution across the entire processing chain should match the desired print quality and progress consistently from fine to coarser (or stay constant), never the other way around.
Verdict
- Precision and Smoothness:
Using arc commands (G2
/G3
) in Klipper does not improve movement precision or smoothness. Instead, it adds two further approximation steps, increasing the potential error. - G-Code Volume:
While arc commands significantly reduce G-code size, Klipper offloads G-code processing to the host application, negating any meaningful benefit from reduced file size. - Planner / Buffer Starvation:
In some firmware architectures or resource-constrained printer boards, numerous shortG1
segments can cause planner or buffer starvation, resulting in stuttering motion. Klipper’s architecture and its virtual SD card implementation fully alleviate these concerns.
Note:
- OctoPrint may not immediately benefit from these advanced Klipper features.
- Traditionally, starting a print directly from the OctoPrint UI bypasses Klipper’s virtual SD card functionality - even if activated in your
printer.cfg
.- To utilize Klipper’s virtual SD card feature fully, you must initiate prints via Klipper’s built-in
M23 / M24
command.
Conclusion
Using arc commands (G2
/ G3
) in Klipper provides no significant real-world benefit for print quality, motion smoothness, or printer performance. While they reduce G-code file size, Klipper’s architecture negates the performance impact this reduction would have on traditional firmware. Any minor advantages (like slightly faster file transfer) are typically outweighed by the potential for introducing error through the extra reconstruction step and offer no tangible improvement to the final printed part.
Note:
- The general process discussed above is not a Klipper limitation.
- Arcs and their segmentation into small linear X- and Y-segments work the same for all firmware implementations.