49

Сглаживание криволинейных поверхностей при 3D-печати

Недавно натолкнулся на очень интересный скрипт для питона, который позволяет сглаживать "лесенки" слоёв при печати на FFF/FDM принтере.

Для тех, кто не знает - FFF/FDM это технология послойного наплавления пластика. Перед печатью модель делится на слои заданной толщины, потом движок слайсера продумывает путь движения сопла таким образом, чтобы примерно(именно так, примерно) соответствовать среднему значению координат-XY 3D-модели в заданном слое. Что это означает? Предположим внизу слоя у нас модель шире, а сверху тоньше. Слайсер возьмёт среднее значение. Соответственно чем больше толщина слоя, тем менее точная получается печать.

Вот примерно так:

Исходная "модель"

Исходная "модель"

Для варианта со слоем в 0.1 мм точность замечательная:

Вот он, слой 0.1 мм

Вот он, слой 0.1 мм

А вот для слоя в 1мм мы получает полную ж... з.... Z... Ну... Лесенку со ступеньками.

Слой 1 мм

Слой 1 мм

Но чем тоньше слой, тем дольше печатается модель. И получается такая борьба между качеством и точностью vs скоростью печати. Вообще придумано уже много всякого - сейчас по умолчанию во всех современных слайсерах включена система автоматического изменения толщины слоя. Но "лесенки" нам всё равно не избежать, просто ступеньки будут разного размера.

И да, за Cura извините, влом было портить конфиг принтера для того, чтобы позволить Orce задать толстый слой.

Итак, это классический вариант слайсинга. Но ведь у многих уже возник вопрос: А нафига нам тогда полноценная ось Z, если мы её используем только для того, чтобы опустить стол/поднять печатную голову на высоту слоя? Мы ведь видим, что тот же ЧПУ XYZ-фрезер позволяет обрабатывать криволинейные поверхности:

Рандомная картинка из интернета, гуглятина сказала, что авторских прав на неё нет.

Рандомная картинка из интернета, гуглятина сказала, что авторских прав на неё нет.

Бинго! Да, существуют слайсеры для криволинейных поверхностей, которые позволяют слайсерить и печатать на многоосевых 3Д-принтерах:

Ещё одна картинка из интернетов

Ещё одна картинка из интернетов

Так почему мы не можем? Кратко: можем, но для домашнего использования это дорого и сложно разрабатывать. Слишком много надо учитывать. Самое-самое сложное - надо контролировать положение сопла и печатной головы в пространстве, чтобы не задевать уже выдавленный материал. Ну и особого смысла это не имеет, сейчас по умолчанию(я уже говорил это, да?) стандартный размер сопла 0.4 мм, а это означает достаточно посредственную точность печати. Даже с учётом того, что теперь можно печатать линии тоньше 0.4 мм соплом 0.4 мм, даже с учётом того, что движок Арахна - офигенный генератор периметров и позволяет печатать переменные толщины экструзии. Мы всё равно не можем выйти за рамки физического ограничения: 0.4 сопло будет укладывать слои примерно так, как на картинке ниже:

Мы всё равно не сможем избежать слоистости.

Мы всё равно не сможем избежать слоистости.

Крч, умные разработчики подумали и решили, что зачем нам все эти сложности, если разницы всё равно особой не будет и никто не сможет увидеть разницу?

А вот немецкая программист Thea Schöbl не согласилась с этим. И пару лет назад выкатила скрипт на Python, который модифицирует gcode и использует Z-Anti-Aliasing для сглаживания лесенок между слоями.

Модифицированный этим скриптом G-CODE:

Вот она, небольшая магия Z-AA.

Вот она, небольшая магия Z-AA.

Для сравнения оригинал gcode:

Лесенка небольшая, но отчётливо видна.

Лесенка небольшая, но отчётливо видна.

В чём же магия? В том, что часть слоёв укладываются под наклоном:

Примерно так

Примерно так

Качество поверхностей повышается, время увеличивается, но не сильно. Оригинальный gcode печатается примерно 6 минут, с gcode с ZAA - около 7 минут.

Как же нам воспользоваться этим чудом? Легко. Т.е. сложно, но я попытаюсь объяснить попроще.

Для начала нам понадобится Python 3.12.9

Качаем тут: https://www.python.org/downloads/release/python-3129/

Версии новее ставить нельзя, потому что на момент написания они ещё не работают с 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 мм.

Оригинальный gcode

Оригинальный gcode

GCODE с ZAA иии... GCODE с Ironing + ZAA

GCODE с ZAA иии... GCODE с Ironing + ZAA

Наилучший результат мы получаем, если включаем режим утюжка(Ironing), когда после печати слоя принтер разглаживает поверхность горячим соплом с маленькой подачей пластика. Увы, при этом мы много теряем в скорости печати:

Без ZAA

Без ZAA

Ironing + ZAA

Ironing + ZAA

Ближе к нам Ironing+ZAA, далее просто ZAA, потом изначальный GCODE

Ближе к нам Ironing+ZAA, далее просто ZAA, потом изначальный GCODE

Ещё чуть-чуть фото:

Ironing+ZAA

Ironing+ZAA

Попытка увидеть лесенку на фото

Попытка увидеть лесенку на фото

Ironing + ZAA

Ironing + ZAA

Ступеньки явно стали меньше, но всё равно чувствуются даже при использовании утюжка. В целом для последующей пост-обработки моделька стала гораздо проще. Не идеально, нет.

Итак, подведём итоги. 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 подписчика

Правила сообщества

Запрещено хамство и оскорбления, уважайте чужой опыт и труд

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества