Сглаживание криволинейных поверхностей при 3D-печати
Недавно натолкнулся на очень интересный скрипт для питона, который позволяет сглаживать "лесенки" слоёв при печати на FFF/FDM принтере.
Для тех, кто не знает - FFF/FDM это технология послойного наплавления пластика. Перед печатью модель делится на слои заданной толщины, потом движок слайсера продумывает путь движения сопла таким образом, чтобы примерно(именно так, примерно) соответствовать среднему значению координат-XY 3D-модели в заданном слое. Что это означает? Предположим внизу слоя у нас модель шире, а сверху тоньше. Слайсер возьмёт среднее значение. Соответственно чем больше толщина слоя, тем менее точная получается печать.
Вот примерно так:
Для варианта со слоем в 0.1 мм точность замечательная:
А вот для слоя в 1мм мы получает полную ж... з.... Z... Ну... Лесенку со ступеньками.
Но чем тоньше слой, тем дольше печатается модель. И получается такая борьба между качеством и точностью vs скоростью печати. Вообще придумано уже много всякого - сейчас по умолчанию во всех современных слайсерах включена система автоматического изменения толщины слоя. Но "лесенки" нам всё равно не избежать, просто ступеньки будут разного размера.
И да, за Cura извините, влом было портить конфиг принтера для того, чтобы позволить Orce задать толстый слой.
Итак, это классический вариант слайсинга. Но ведь у многих уже возник вопрос: А нафига нам тогда полноценная ось Z, если мы её используем только для того, чтобы опустить стол/поднять печатную голову на высоту слоя? Мы ведь видим, что тот же ЧПУ XYZ-фрезер позволяет обрабатывать криволинейные поверхности:
Бинго! Да, существуют слайсеры для криволинейных поверхностей, которые позволяют слайсерить и печатать на многоосевых 3Д-принтерах:
Так почему мы не можем? Кратко: можем, но для домашнего использования это дорого и сложно разрабатывать. Слишком много надо учитывать. Самое-самое сложное - надо контролировать положение сопла и печатной головы в пространстве, чтобы не задевать уже выдавленный материал. Ну и особого смысла это не имеет, сейчас по умолчанию(я уже говорил это, да?) стандартный размер сопла 0.4 мм, а это означает достаточно посредственную точность печати. Даже с учётом того, что теперь можно печатать линии тоньше 0.4 мм соплом 0.4 мм, даже с учётом того, что движок Арахна - офигенный генератор периметров и позволяет печатать переменные толщины экструзии. Мы всё равно не можем выйти за рамки физического ограничения: 0.4 сопло будет укладывать слои примерно так, как на картинке ниже:
Крч, умные разработчики подумали и решили, что зачем нам все эти сложности, если разницы всё равно особой не будет и никто не сможет увидеть разницу?
А вот немецкая программист Thea Schöbl не согласилась с этим. И пару лет назад выкатила скрипт на Python, который модифицирует gcode и использует Z-Anti-Aliasing для сглаживания лесенок между слоями.
Модифицированный этим скриптом G-CODE:
Для сравнения оригинал gcode:
В чём же магия? В том, что часть слоёв укладываются под наклоном:
Качество поверхностей повышается, время увеличивается, но не сильно. Оригинальный gcode печатается примерно 6 минут, с gcode с ZAA - около 7 минут.
Как же нам воспользоваться этим чудом? Легко. Т.е. сложно, но я попытаюсь объяснить попроще.
Для начала нам понадобится Python 3.12.9
Версии новее ставить нельзя, потому что на момент написания они ещё не работают с open3d.
Далее запускаем командную строку(CMD) и устанавливаем библиотеки open3d:
python -m pip install open3d
Создаём нужные нам папки:
mkdir C:\ZAA
mkdir C:\ZAA\GCODE
mkdir C:\ZAA\GCODEOUT
mkdir C:\ZAA\STL
Качаем скриптик с гитхаба: https://github.com/Theaninova/GCodeZAA
Распаковываем, закидываем папку gcodezaa в C:\ZAA.
Далее нарезаем нашу 3д-модельку в Orca и:
1) Закидываем получившийся gcode в папку C:\ZAA\GCODE
2) Исходную STL модель экспортируем через File - Export в C:\ZAA\STL (ВНИМАНИЕ!!! ОБЯЗАТЕЛЬНО НАЗВАНИЕ STL МОДЕЛИ ДОЛЖНО БЫТЬ НА АНГЛИЙСКОМ И СООТВЕТСТВОВАТЬ ИСХОДНОМУ ИМЕНИ МОДЕЛИ!!!)
3) В командной строке переходим в нужную нам директорию и запускаем скрипт:
cd C:\ZAA
C:\ZAA>python -m gcodezaa C:\ZAA\GCODE\test.gcode -o C:\ZAA\GCODEOUT\modified.gcode -m C:\ZAA\STL
test.gcode и modified.gcode меняем на нужные нам.
Voilà, мы получаем измененный gcode с anti-aliasing.
Итак, я для теста сделал модельку 20х60х6 мм. Вроде бы правильно называется усечённая четырехугольная призма, если нет - поправьте меня. Меньшая грань - 0.65 мм.
Наилучший результат мы получаем, если включаем режим утюжка(Ironing), когда после печати слоя принтер разглаживает поверхность горячим соплом с маленькой подачей пластика. Увы, при этом мы много теряем в скорости печати:
Ещё чуть-чуть фото:
Ступеньки явно стали меньше, но всё равно чувствуются даже при использовании утюжка. В целом для последующей пост-обработки моделька стала гораздо проще. Не идеально, нет.
Итак, подведём итоги. Z-Anti-Aliasing - перспективная штука. Но не идеальная. Сама автор, судя по всему, забила на разработку скрипта. Ещё этот скрипт далёк от идеала и иногда ломает gcode:
Ещё за два года ничего не поменялось в ToDo листе:
Сделано:
+ Ironing support
+ Smooth flow transition
Не сделано:
Flow normalization (right now speed is kept constant)
Travel moves!
Overhang z contouring
Integrate properly into OrcaSlicer
Arc (G2/G3) support
Без нормализации потока и нормальной обработки криволинейной поверхности(Overhang z contouring), а так же без интеграции в OrcaSlicer излишне сложно использовать. Без обработки холостых ходов по Z тоже никуда не продвинуться, это, как я и сказал, самое сложное в реализации. Но в целом было интересно попробовать.
ЗЫ
На данный момент работает с gcode сделанными только в OrcaSlicer и Bambu Studio. Я тестировал ТОЛЬКО версию для Orca Slicer, для бамбуков инструкции другие.


















Лига 3D-принтеров
3.8K постов15K подписчика
Правила сообщества
Запрещено хамство и оскорбления, уважайте чужой опыт и труд