Skip to content

PrusaSlicer 2.2.0-alpha1

Compare
Choose a tag to compare
@bubnikv bubnikv released this 22 Dec 14:14
· 13992 commits to master since this release

PrusaSlicer PrusaSlicer 2.2.0-alpha1

Summary

This is the first alpha release of PrusaSlicer 2.2.0, introducing support for 3rd party printer vendors, filament installation, pause at height, Color Print for MMU2, adaptive elephant foot compensation, automatic variable layer height, wipe tower without sparse layers, 3dconnexion support, OSX dark mode, export to removable media and eject, reworked Reload from disk and path planning, 3MF thumbnails, Flash Air support, Japanese translation and much more.

To let you enjoy the alpha without worries, the alpha builds save their profiles into PrusaSlicer-alpha directory, so you may use the alpha side by side with the current release without ruining your production configuration.

The PrusaSlicer 2.2.0-alpha1 brings the following new features:

Support for third party 3D printer vendors

We have extended the Installation Wizard and configuration layer to support 3rd party 3D printer vendors. A 3D printer vendor may provide a versioned Config Bundle to us. We will store these 3rd party Config Bundles into resources/profiles directory of PrusaSlicer, and once any of the 3rd party printer is installed, PrusaSlicer will pull updates of these Config Bundles from the internet.

For starter, we have created profiles for the Creality Ender-3 printer. Please consider this profile experimental, we expect the community members to build upon our initial draft. We will publish a guide for contributors on how these Config Bundles are structured and how to contribute them.

image

Filament installation, filament & print preset aliases (logical profile names)

PrusaSlicer stores the Print, Printer, SLA Print and SLA materials in separate lists and the names of the profiles are required to be unique inside their respective groups. For example, a "Prusament PLA" profile is used by the "MK3S" and "MK2S MMU1" printers, while a "Prusament PLA MMU2" is used by the "MK3S MMU2" printer due to different MMU ramming parameters. Before this release, the full "Prusament PLA MMU2" profile name was shown at both the Plater and at the Filament parameter page. Starting with this release, a shorter "logical name" aka "alias" is shown at the Plater, while the full profile name is shown at its respective parameter page.

The "logical name" aka "alias" is defined in two ways: First, the "@" sign in the preset name is interpreted as a separator of a logical name from the full name. For example, the full Print profile name "0.15mm QUALITY MK3" has been renamed to "0.15mm QUALITY @mk3" (the difference is in the @ sign), and the part before the @ sign - "0.15mm QUALITY" is considered a logical name. In a similar sense, the "Prusament PLA MMU2" has been renamed to "Prusament PLA @MMU2", so that a logical name "Prusament PLA" applies to both the MMU and non-MMU variant of the filament profile. The second way to assign a logical name to a profile without the use of the "@" sign in the profile name is through an "alias" configuration value of a profile.

image

Starting with this release, the Filament and SLA Materials provided by various 3D printer vendors may be installed in a similar way to how the printers are already installable. The filament and SLA materials are referenced by their logical names in the installation wizard, so one filament or SLA material profile is being installed for multiple installed printers at once.

Insert pause or custom G-code at a certain layer

The Color Print tool is highly praised as extremely easy to use and intuitive, but until now it only supported filament switches and it was limited to single extruder printers. Based on the feedback from our customers and the community, we generalized the Color Print tool to support print stops to insert magnets, weights, bearings, nuts or a custom G-code.

Slicer_custom_gcode

Color Print for MMU2

Color Print newly works with MMU2 as well. There are two use cases for this new feature:

  1. Printing signs unattended. Here a filament switch event is inserted at a selected layer height, which will trigger the MMU2 unit to switch filaments automatically while wiping the extruder into a wipe tower. In this scenario there will be just a handful of filament switches performed, therefore many layers of the wipe tower will be printed with sparse layers. Check the other new feature "Wipe tower without sparse layers" on how to reduce material waste and print time when printing with MMU2 Color Print.

  2. Extending the number of colors of MMU2 prints above 5. One may assign a single extruder to two parts separated in Z axis (for example shoes and eyes of a standing figure), and then plan filament exchange (M600 G-code) in between.

The Color Print also newly supports generating color bands at regular intervals:
image

Adaptive Elephant foot compensation

The Elephant foot compensation feature shrinks the contours of the first layer FDM slice inwards to compensate for the first layer squash. The first layer squash is often ugly and it complicates fitting of multiple printed parts together, therefore quite often the elephant foot needs to be filed or scraped off after the print, which is a tedious process and which may negatively influence accuracy and surface quality.

While PrusaSlicer implements the Elephant foot compensation for a long time, it was used much less than it deserves due to the following drawback: The old algoritm shrank the first layer contours evenly, thus shrinking thin protrusions as well as large areas, leaving the thin protrusions unsupported. This PrusaSlicer release brings an adaptive version of the Elephant foot compensation, which ensures, that no area is made narrower than the width of two perimeter lines, minimizing the necessity of post processing of the print while ensuring good print adhesion to the print bed.

ensure thickness

Also the following Elephant foot compensation issues were resolved: #1757 #2085 #2132 #2156 #2423 #2502 #2773 #2828 #2998 #3001.

Automatic variable layer height

We have added automatic initialization of the smooth variable layer height profile to PrusaSlicer. The adaptive variable layer height profile algorithm may not always produce a desired result. One wants to make sure the salient features of an object are printed accurately, while hidden cavities may be discretized coarsly to print faster with little effect to print quality. We therefore let the user to initialize the smooth variable layer height profile automatically with a button from the smooth variable layer editing tool, while allowing the user to adjust the proposed layer height curve manually.

image

We have experimented with various metrics for the surface quality. The metrics by Florens Wasserfall et al. implemented in Slic3r limits the maximum discretization error (largest Eucledian distance of the stepped surface from the source model), while Cura limits the maximum distance of contour lines in the XY plane, producing more intuitive results than the metric by Waserfall. At the end, we have implemented yet another metric, limiting the cross section area between the stepped surface and the source model. The following graph shows the layer height limit of various metrics depending on surface slope:

image

Wipe tower without sparse layers

The Wipe tower generator newly supports skipping the sparse layers (layers without a tool change), thus saving material and in almost all cases reducing the print time. On our set of muti-material projects, this feature reduced the total print time by 3.16% and the filament deposited on the wipe tower was reduced by 16.17%. As PrusaSlicer currently does not check for collisions of the extruder with the printed object when lowering down to the top of the wipe tower, this feature is marked as experimental, and it is recommended to place the wipe tower to the rear right corner of the MK3S's print bed, while the object is placed to the opposite corner.

The wipe tower without sparse layers feature is very useful together with the newly introduced Color Print for MMU2, where only a handful of filament switches are needed to print a colored sign unattended thus saving a lot of material compared to a full wipe tower.

3dconnexion SpaceMouse(r) support

We have added support of 3dconnextion SpaceMouse(r) devices for camera manipulation in the 3D scene. We have tested three generations of the device: Space Navigator(R) (Wired), Space Mouse(R) Wireless and SpaceMouse(R) Pro Wireless. On Windows, both wired and wireless connection works, while on OSX only wired connection works, and we have mixed results on Linux (sometimes wireless works, sometimes wired works). On Linux, one needs to install the 90-3dconnexion.rules file into the /etc/udev directory for the device to be accessible by a regular user. The 3D mouse sensitivity may be set from a dialog, that pops in the 3D scene on Control-M key press.

We were unable to get the drivers, API description or any other support from the 3Dconnection company. If you believe that we at Prusa Research could do better integrating the SpaceMouses devices, please bug the manufacturer to provide us with the necessary support. Otherwise we are left with googling of what others managed to reverse engineer, or do the reverse engineering ourselves, which is likely not the most efficient use of our time.

SD eject, Save to SD

When exporting G-code, the file dialog is newly initialized with a path to an SD card or USB flash drive if detected. If multiple SD cards or USB flash drives are detected, the file dialog is opened at the last visited removable media. Once a G-code is exported to a removable media, an "Eject" button is shown next to the "Export G-code" button.

Reload from disk #552 #1471 #1890 #1996 #3075

The "Reload from disk" feature has been fully reworked for this release. Now full paths of the imported geometries are remembered for each volume. If a geometry is imported from a 3MF / AMF file, then full path of the 3MF / AMF is remembered including index of the object and object's volume in the source 3MF / AMF file. The "Reload from disk" action may newly be called on multiple selected objects from the pop-up menu. If the referenced files are moved thus not found, the "Reload from disk" feature will ask for an alternate path on loading and the new path is remembered.

Please note that the following operations break the link to the source geometry file: Split to Objects, Split to Parts, Cut by Plane, Anisotropic scaling along arbitrary axis (not X, Y or Z).

Better path planning #375 #409 #1942 #2713

We have reworked the path planning aglorithm in PrusaSlicer to produce shorter paths with less travels. Optimal path planning is NP hard, thus one will hardly achieve a perfect solution in a reasonable time, though some heuristics are better than the others. The issue is complicated by the fact, that the slicer has to chain segments, not points as in the case of the Traveling Salesman Problem.

Until now, PrusaSlicer used the simplest heuristics possible: Add the next closest point to an existing path. The new path planning algorithm starts with a Multi-fragment approximation, which is then improved with 2-opt exchanges, generating a shorter path in general. Couple of bugs were fixed as well (infill path planning for islands inside holes of other islands, path planning for multiple object instances).

slicer comparison
Comparison of the previous simple (left) and new heuristic (right), from user DrLex0

SLA Pad around object enhancements

SLA Pad generation received an upgrade which enhances its shape and makes more accurate deduction of its geometry when used with zero elevation (pad around object feature). Parts of the pad which don't host any supports are now reliably removed. If the pad shall be used as a brim around the printed model, a checkbox is added to force the pad everywhere.

The following new parameters were added to control the pad:

  • pad_around_object_everywhere: Force parts of pad not occupied with supports
  • pad_brim_size: How far out should the pad stretch.

Other new features and improvements

  • OSX Dark Mode is newly supported by PrusaSlicer. Dark mode seems to work on one of our co-worker's Linux box. On Windows, we are waiting until Microsoft finishes Dark Mode API for Win32 controls.
  • The 3D scene thumbnails are newly stored into the 3MF and SL1 files. The 3MF thumbnails are shown by Windows File Explorer #3252.
  • The SLA slicing statistics newly shows the print weight and cost based on the following new SLA material properites: bottle_cost, bottle_volume, bottle_weight and material_density.
  • The skirt is newly allowed to overlap with the brim, so that the skirt used as a wind draft shield is stabilized by the brim. Brim lines are split at the intersections so there is no overextrusion #724.
  • Color bars are newly painted in the extruder selection combo box at the object list and at the MMU purge amount dialog #1484.
  • The Gyroid and 3D honeycomb infills were reworked, so that their infill lines now follow the perimeters as in the case of grid and cubic infills #1690, thanks @supermerill.
  • The Gyroid infill discretization was reworked to produce less segments thus shortening the G-code and printing smoother on low power 3D printer control boards #1690, thanks @wavexx.
  • A new [total_toolchanges] placeholder is supported for the output filename and custom gcode templates. The statistics section at the end of the GCODE has been extended with the number of tool changes as well #1775, thanks @BryanSmithDev.
  • Added FlashAir support for host upload #2215, thanks @stephanr.
  • When slicing from command line, the object is newly centered around the center of the print bed shape if available #2424, thanks @luketaverne.
  • Generic box / sphere / cylinder objects may newly be added to the plater by right clicking at an empty space in the 3D scene or at the object list #2865.
  • The G-code preview newly supports coloring by fan speed #2922, thanks @jschuh.

Translations

Japanese translation is provided by Prusa Research, Brazilian Portugese translation has been submitted by @BoaImpressao3D.

The following languages are being translated by PrusaResearch: cs, de, es, fr, it, ja, pl. Dear contributors, please provide localization updates for the other languages.

Bugs fixed

  • Fixed spurious infill below bridges in case the infill density was set to 0% #442.
  • Fixed unnecessary splitting of infill regions by a modifier mesh, if the modifier mesh does not influence infill parameters #1005.
  • Fixed missing anchors for bridges in case the infill density was set to 0% #1185 #1301 #2686.
  • Fixed crash with multi-material prints requiring a wipe tower, where one object was fully separated from another object with a vertical gap to be filled with supports #1266 #2258.
  • Fixed spurious gap fill inside the inner most perimeters for infill density 0% (which also applies to Vase mode) #1476.
  • Fixed some unexpected bridging issues due to a missing update of the slicing back end in case the support is enabled / disabled while the soluble supports are configured, as the bridging is disabled for soluble supports, while the bridging is enabled with supports disabled #1482.
  • Fixed compilation of OSX dependencies #2264.
  • Fixed missing update of the slicing back end when the "Bridge flow ratio" is changed #2359.
  • The brim path newly takes into account the wipe tower #2378, thanks @tcm0116.
  • Fixed G-code export on Linux and OSX to permissionless filesystems as FAT32 or Samba #2521 #3102.
  • Fixed a crash when slicing an object standing on a narrow edge or a pointy tip, where the first layer would produce an empty layer. Such situation is newly detected and an error is emitted stopping the slicing process. In the future versions we may try to lower the object and continue slicing #2581. a co #1479?
  • Fixed a buggy check in single-extruder multi-material mode, which prevented usage of layer range parameter modifiers when printing multiple objects #2835.
  • Fixed arrangement of objects larger than the print bed #2897.
  • Fixed one more issue of the admesh library on big endian architectures #2879.
  • Fixed validation of the layer height parameter: Maximum allowed layer height now defaults to 3/4 * nozzle_diameter if the extruder maximum layer height is not specified #2892.
  • Fixed a crash when downloading the latest PrusaSlicer application version from the Internet and garbage is returned by a proxy server #2927.
  • Fixed an unreliable numeric entry into the layer height table, where the number sometimes reverted to the old value on enter #2946.
  • Increased the maximum range to account for large custom print bed or printer models #2948.
  • Fixed crash on update of 3D print path preview with no retractions #2988.
  • OSX specific: Fixed an old issue, where sometimes the first column of the object list was extremely narrow initially #1774 #1927.
  • Fixed an assert in "Set number of instances" #2953.
  • Fixed deselection of an object in the 3D scene after adding an instance with autocenter active #2972.
  • Fixed a crash on arrange #2973.
  • Fixed a crash when deleting an object from the plater #2977.
  • Replaced "mm3/s" with "mm³/s" in UI texts and localizations #2978.
  • Fixed a crash when holding the Shift key and clicking on an empty space in the object list #2997.
  • Fixed color change update after changing layer height. Not all color change events were adjusted to the new layer heights and it was not possible to remove them #3002.
  • Fixed missing or disappearing print bed texture on some computers: The maximum size of the texture allocated for the print bed is now limited to half of the maximum texture size reported by the OpenGL driver, and the print bed texture mip map is calculated down to the 1x1 size #3008.
  • Fixed processing of G92 code (set offset of coordinate system) by the G-code analyzer, fixing 3D print path preview #3010.
  • Implemented M132 code (load the current home position from EEPROM) for Makerbot to fix 3D print path preview #3108.
  • The single-extruder multi-material wipe tower generator newly emits the M220 B/R codes for Marlin firware only. Also a pull request has been accepted by upstream Marlin to implement the Prusa3D M220 B/R G-codes.
  • Fixed some crashes at the object list, where some menu items shown in a context menu for an object instance were not applicable to an instance #3275.
  • Fixed G-code preview for the Machinekit and Mach3/Linuxcnc firmware flavors, which use the A axis for the extruder instead of E #3287.
  • The bundled avrdude has been updated from upstream to fix the use of deprectated gethostbyname() function #2918.
  • Fixed clipping plane visualization in SLA support gizmo for mirrored objects.

Architecture, infrastructure

Starting with PrusaSlicer 2.2, we are fully supporting C++17 on our build servers and we are encouraging our contributors to use C++17 features. We are using the following tools to build PrusaSlicer:

  • Visual Studio 2019 on Windows, supporting Windows 7 and newer.
  • Xcode 11.1 on OSX with OSX 10.14 SDK and the minimum supported OSX version (aka depolyment target) 10.9, supporting OSX 10.9 and newer.
  • Linux builds are built on CentOS 6 with devtoolset-7 (gcc 7.3.1), thus producing binaries compatible with most of current and long term support Linux distributions.

We have introduced a testing framework Catch2 and we have started to use it actively for new development. Many unit tests testing libslic3r were ported from the upstream Slic3r, thanks @lordofhyphens.

We newly test our OSX and Linux builds internally with the Address Sanitizer enabled. The Address Sanitizer builds (aka ASAN) allow us to catch subtle memory access errors much quicker than before. We will test ASAN builds on Windows once Microsoft finishes their Address Sanitizer support in Visual Studio.

Known issues

  • The "Reload from disk" feature requires the paths of the imported objects to be stored into the project file. When sharing such projects on PrusaPrinters, Thingiverse or elswhere, some people may consider sharing paths of their hard drives or company shared drives a security risk. We will provide a way to disable storing the paths into the project file by default, and we will provide a way to export a 3MF file without the paths if the full paths are stored by default.
  • We plan to make the ColorPrint feature for MMU2 a bit more intuitive to better fit the two distinct MMU2 use cases (unattended sign prints versus muti-colored objects printed with more than 5 colors).
  • The automatic redirection to the removable media when exporting a G-code may not always be wanted. We will add a way to save to a non-removable media eve if a removable medium is plugged in.
  • We have renamed many Print, Filament and SLA material profiles due to the introduction of logical names, which breaks the "derived from" property of user profiles and profiles stored into project files. We plan to add a list of "renamed from" profile names to the preset profiles, so that these "derived from" links between profiles are maintained.

What is in the working

We are working diligently on hollowing for SLA. The feature did not make it yet into the first alpha as it turned out to be quite a tough one, but we are positive we will finish it for the 2.2 final release. We are also working on a Raspberry PI 4 build of PrusaSlicer.