Ликвидация видимости слоёв при фотополимерной DLP LCD печати.

vadimav
Идет загрузка
Загрузка
25.10.2020
3394
17
3D-печать

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

29
Статья относится к принтерам:
FlyingBear Shine

ОГРОМНАЯ благодарность за оказанную помощь и поддержку за советы и  создание  ПО Сергею, профиль: https://3dtoday.ru/blogs/sergeyr7

Статья касается печати на фотополимерных ДЛП LCD принтерах. В этой статье  речь идёт о ликвидации  видимых рёбер, возникающих при проекции пикселя на плоскости находящиеся под малыми углами к осям принтера (осям решётки пикселей X, Y  и оси Z). Данная проблема сильно ухудшает качество печати  деталей и возможности применения 3д печати в моделировании претенциозными моделистами, которые предпочитают печать на дорогих принтерах с ультра мелким разрешением типа EnvisionTec Aureus.   Для визуализации проблемы приведём пример. См. Рис 1.   В данном случае проекция пикселя (или шага оси Z) становится гораздо большего размера при проекции на почти перпендикулярную её нормали плоскость, и становится заметной глазом.

Рис.1.  Фотография детали с почти плоской крышей, напечатанной без наклона в естественном положении. В данном случае видно, как проекция шага оси Z  величиной в 20 микрон на почти горизонтальную поверхность оставляет большие промежутки между срезами.

Как первая мера - обычно используют наклон и поворот детали, чтоб не минимизировать  расположение больших плоскостей детали  близко к плоскостям ХУ, XZ, YZ. Но во многих случаях недопустимо, чтобы мелкая текстура основных слоёв была бы под углом к осям самой детали, или по другим причинам (запреты на установку поддержек на лицевых частях, которые нельзя зашкурить, итд..)

Данный эффект возникает для плоскостей детали  близких к ХУ, XZ, YZ.  Для вертикальных плоскостей  эта задача была частично решена введением  полутонового пикселя, яркость которого была пропорциональна объёму деталей  попавшей в сегмент пикселя XY с толщиной среза по Z. В данном случае на краях детали пиксели  при проекции горели  не в полную силу, что приводило к некому сглаживанию. См  рис. 2. Это введено в таких слайсерах как НаноДЛП, Perfactory RP.

Рис.2. Фото горизонтального среза (слой) с полутоновыми пикселями, где яркость их пропорциональна объёму детали попавшей в сетку слайсера. Это хорошо заметно на части окружности близкопараллельной оси Y. Пиксели меняют свой тон постепено, пытаясь компенсировать резкий провал.   Этот процесс улучшал качество печати, но не до конца!

На Рис. 2. видно, что  в данной концепции используется предположение, что объём заполнения пикселя полимеризовавшейся смолой пропорционален интенсивности света. Но это не совсем так. Твёрдая фаза полимеризованной смолы начинает расти  в некоторой степени линейно начиная с некого порога Т1, и заканчивает  порогом Т2.  См Рис. 3.

Рис. 3.

Поэтому имеет смысл ноль интенсивности пикселя приравнять к Т1. А  конец кривой закончить на Т2, используя, скажем, самую простую - линейную апроксимацию  (см Рис.3)

Некоторые самые последние версии слайсеров позволяют это делать, но работа ведётся только с порогом Т1. См Рис. 4.

Рис.4. По сравнению с Рис.2 видно, что пиксель с почти нулевой интенсивностью по интенсивности приподнят.

Например, это можно сделать в Слайсере ЧИТУ(1.7.0), объявив, что срезы вы будете сохранять в ZIP формат, чтобы не потерять 8ми битный тон пикселя и открыть срезы. См Рис 5.

Рис. 5  Опция, позволяющая поднять ноль полимеризационной кривой (8 градаций) в слайсере ЧИТУ.

Слайсер Читу предлагает это делать, но делать наобум, не предлагая какого либо универсального теста. Возможно, эта опция у них в разработке.

Очевидно, что результаты порогов Т1 и Т2 на Рис. 3  будут зависеть от яркости света, коефициента пере-выдержки (выдержки), структуры зерна и паттерна распределения интенсивностей проекции пиксельной решётки в слой смолы.

Так же Слайсер ЧИТУ (1.7.0) делает это пока только для  вертикальных поверхностей XZ и YZ, не работая для горизонтальных.  Для горизонтальных ЧИТУ  тупо оставляет бортик в 1 пиксель(в противовес двумерной зоне пикселей см как на Рис. 7 при полнофункциональном вычислении объёма).  Слайсер НаноДЛП на данный момент продвинулся чуть дальше, он вычисляет это для всех трёх вариантов, но работает без учёта порогов, а вариант для горизонтальной плоскости почему то работает только на поверхности снизу детали. Сверху детали обсчёт не производится - идёт тупо линия из одного пикселя. Я писал им в форум. Мне ответили, что они не посчитали нужным это делать.

Для удобства определения и настройки  порогов при обработке был разработан такой 3Д тест из 2х мерного расположенных одинаковых объектов, содержащих одинаковые элементы из 1 шарика и 1 пирамидки с почти вертикальными и почти горизонтальными стенками,(наклон 1 к 32) для каждой из которых  при нарезании был вычислен трёхмерный объём пикселя (верхний срез см. рис. 7) и была проведена своя обработка со своими Т1 (Тн) и T2 (Тв)  одинаковые в пределах каждого элемента в соответствии с величинами отложенными по осям (см. Рис 3. ) Напечатанный тест изображён на Рис. 6. Пирамидки расположены в виде массива, где по одной оси меняется нижний порог, а по другой - соответственно, верхний.

Рис.6. Напечатанный тест для определения  порогов Т1(Тн) и Т2(Тв) под контровым освещением для определения оптимальных параметров.

Рис. 7 Слой  проходящий через верхнюю окологоризонтальную поверхность пирамидок (без учёта порогов). Видно постепенное притухание интенсивности пикселя (с права на лево) в следствии уменьшения объёма попавшей детали в объём ограниченной сеткой пикселя. ( Так же опытный глаз может даже заметить границы треугольников формата STL.)

Из Рис.4. следует, что  оптимальные пороги для вертикальных стенок где риски не прослеживаются (определён как третий слева на право  в самой верхней строчке )  и для около горизонтальных  стенок (помечен чёрной точкой )  совершенно РАЗНЫЕ!

Видимо, это объясняется тем, что при вертикальных  стенках близко-параллельных к осям Х и У  важен профиль огибающей изолинии начала полимеризации края детали в поле освещённости и верхний порог не важен (он всегда 100% - и относится к стенке ) а ряд полутоновых пикселей - это всегда линия из одного пикселя-границы детали. В то время как на окологоризонтальных  плоскостях и верхний и нижний пороги линейной части важны, и на этих плоскостях важна вся зависимость кривой полимеризации от приложенной мощности (см Рис. 3. )

Для того, чтобы выработать единый алгоритм, было предложено   связать  пороги для вертикальных и горизонтальных зон линейной аппроксимацией  введя переходную постепенную зону, зависящую от угла наклона поверхности в пикселе, которой устанавливается в обработчике. Зона переходов была выбрана там где слои идут часто, и переход не сказывается на внешнем виде детали. (при углах  примерно 10-30 градусов)

Стоит заметить, что  величины для разных типов смол на одном принтере получаются достаточно РАЗНЫМИ. Так же очевидно, что они будут зависеть и от типа принтера, величины пере-выдержки, и конфигурации формы поля УФ излучения (пиксельной сетки) при проекции в слой смолы.  Поэтому рекомендованная последовательность такая: Сначала делается печатный тест, определяющий оптимальную выдержку - это когда объекты устойчиво получаются, и твёрдость больше не нарастает. И, потом, обычно, выбирается двойная перевыдержка, с целью, чтобы деталь получалась максимально прочной (с учётом неравномерностей, погрешностей итд, -так. наз. допуск в плюс) и её не вело бы при печати, и поддержки не смывало бы. Далее, печатается второй тест на определение порогов. И уже с определёнными порогами в тех же условиях печатается деталь.

Рис. 8. Изображено фото печати в контровом свете  с применением алгоритма трёхмерного вычисления объёма пикселя с коррекцией порогами слабовыгнутой крыши готовой детали 1.- без применения алгоритма. 2. - алгоритм только вычисления объёма (без порогов). 3. - с применением порогов по результатам теста.

Из Рис. 8 видно, что данный подход позволяет уменьшить видимость рёбер, обусловленную дискретностью пикселей и шага оси Z, и привести качество получаемых деталей к более высокому  классу. 

СИТУАЦИЯ ДЕЛ СЕЙЧАС:

Данная работа была выполнена как хобби вне рамок какого либо проекта. Использовался доработанный по свету и оси принтер FlyingBear Shine 1, который использует открытый формат данных в виде ZIP архива( *.cws, *.fbs ) с  картинками слайдов *.PNG  и текстовым файлом Г-Кодов, что представляло удобства в проведении исследований. (Форматы НаноДЛП, Creation WorkShop, EnvisionTec  Perfactory RP, FlyingBear Shine, возможно MicroMake  Слайсеора ЧитУ (для некоторых принтеров)и др.)

Сергеем была создана программа - конвертер, которая работает достаточно быстро (мульти-поточность)  позволяет вычислить объём каждого пикселя, определить  и наклон проходящей через него поверхности , что привело к получению однозначных результатов.

Занятость Сергея и попадания меня на грань выживания из-за условий кризиса в стране, по состоянию здоровья, и с отсутствием адекватного источника финансирования - работы  привело к тому, что работа не доделана до финального состояния, годного для людей-потребителей, не готовых вникать в детали. 

Тех, кто заинтересован, пишите на мой профиль  и профиль Сергея. Может быть возможен совместный проект.

Мне так же можно писать на Воцапу - Вибер, там я чаще, чем тут, или для оперативности звонить на номер: +7-903-174-16-29 (Вадим)

Не исключено, что вскоре, тот же ЧИТУ сделает что то подобное. Хотя, с другой стороны, тем, кто является основным потребителем, и печатает предметы искусств может не понадобится излишняя точность, описанная в этом подходе.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

29
Комментарии к статье

Комментарии

25.10.2020 в 20:22
5

Нехилая работа была проделана!

26.10.2020 в 08:42
2

Спасибо за статью и проделанную работу!

Как всегда - фундаментально!

26.10.2020 в 15:04
0

А какая, в результате, получается у поверхности шероховатость ?

puh
26.10.2020 в 16:40
3

Засчёт применения вышеописанной обработки  и пикселя 47 микрон получается достичь разрешения такого же как достигается на Ауреусе.

Вот образец колеса, полученного с помощью данного метода :

А это оно же выращенное на Ауреусе:


Та же крыша, что и в примере статьи  не покрытая грунтовкой выглядит более менее обычно, примерно как и боковая поверхность, но при желании, в отражённом свете можно поймать некие изменения в отражении света (полосы с бОльшим рассеянием), связанные с тем, что в зоне полутона пикселей имеется некая неравномерность поля освещения (пиксельная сетка), ведущая к началу роста в местах пиков этой интенсивности зон полимеризации смолы, выглядящие как микропупырышки с периодом 47мкм. И этим она напоминает более матовую боковую поверхность детали, где идёт слабый узор пиксельной сетки.  В зоне где  яркость 100% - смола прилегает плотно к блестящей плёнке - и мы получаем зеркало.  См фото незагрунтованной детали ниже. Если же её покрыть грунтом - неравномерность в контровом свете практически отсутствует. 

27.10.2020 в 04:17
0

автору я предлагал связаться с разработчиком ПО UVTOOLS - который как раз и занимается подобными доработками модели с существенной математикой.

27.10.2020 в 10:52
2

В UV tools это не получится внедрить малой кровью. Только если в сам слайсер, Читу.

27.10.2020 в 11:18
0

а с читу разговаривать бесполезно. Можно говорить с личи - ну как то еще. Я с читу не могу нормальную русификацию вставить договориться, а тут функционал поменять.
А личи заняты. Они даже за хорошие деньги отказались ПОКА дорабатывать свой слайсер - других проблем полно.

27.10.2020 в 12:41
0

подождите, вы же мне сами говорили, что для алгоритма нужны нарезанные слайды, но есть набор png, и по ним ведется расчет. UV tools точно так же разбирает на слайды файл, и с ними работает.

28.10.2020 в 11:48
1

Да,  но, поскольку целью является вычисление объёма, то выход тут - либо считать объём в слайсере (что пока не возможно, надо договариваться...), либо это делать косвенным образом - создавая пласты нарезок слайдов на обычном слайсере, но с микросдвигом (скажем, по пол микрона).  Такую спец нарезку для деталей среднего размера слайсер будет делать часа 4 на  относительно мощном ПК, что может оказаться долгим для типового юзера. Но пока это единственный метод.  Потом это дикое кол-во слайдов уже обрабатывается внешним обработчиком, откуда параметрически и выходит объём пикселя, и где и учитываются кривые полимеризации смолы. ( откидывая ненужный  параллельно сгенерированный г-код).  Далее, результат пакуется  в стандартный ЗИП файл с Г-кодом соответствующим этим слайдам, с нарезкой, скажем по 20 микрон.   Так, что всё это не так просто как кажется.  Обычной нарезкой и прогаммой УВТулз тут не обойдёшся.

28.10.2020 в 12:26
1

- типовому юзеру это не нужно. А профи которому нужно такое качество - 4 часа это мелочь. Он поставит 5 компьютеров, не те расходы. Поставит Ryzen Threadripper 3990X например
- вы изначально ставите задачу некорректно с коммерческой точки зрения, потому финансирование тут вряд ли получится. Вы же хотите чтобы дешевый принтер печатал как ауреус - ну так ауреус потому столько и стоит, что он может - а аникубик нет. И стирать эту грань - невыгодно. Невыгодно ни производителям, ни профессионалам кто эту 3д печать делает.
- начать надо с того что дело не только в софте. Сравните свой принтер с рыночными - сколько времени и средств Вы в него уже вложили? Я к тому что задача интересная, академический интерес колоссален, коммерческой выгоды там - 0. Ну если делать принтеры по 150-200 тыс - но это никак не про обычного пользователя. И не про российский рынок уж точно.
Потому - я как и предлагал. Будет внятное ТЗ - попробуем помочь.

28.10.2020 в 22:14
2

Вы же слайсерами вроде не занимаетесь...

А для микронного режима ЧИТУ есть уже наша примочка.

Только Г-Код пока в ручную подправляю.

28.10.2020 в 15:30
0

Вполне вероятно, что часть вычислений можно на GPU перенести? Вроде, как раз работа с изображениями - самое то для графической карты. Что-то вроде OpenCL задействовать, например.

brn
28.10.2020 в 22:14
1

Медленно режет слайсер. Тот же Читу , Энвижн, Нанодлп - однопоточны .

К тому же, требуют очень хорошо вылеченной детали.  На обычных - такой скан по пол микрона найдёт все микро дырки в СТЛ, и будет море медуз.(выпадание вектора за деталь в слое - образуются висячие полигоны)

Наша примочка как раз мультипоточна.

29.10.2020 в 13:34
0

Согласен, что лучше всего реализовывать это в слайсере.

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

29.10.2020 в 13:43
1

Весь затык в том, что в библиотеке для языка Це (Си), который использовал Сергей, который мне помогал, функция вычисления объёма работает некорректно и крайне медленно. Посему, решили работать вычисляя объём пикселя дедовским методом - нарезав  гораздо мельче чем нужно, и, потом  проводя скользящую обработку рамкой шириной в наш толстый слой вдоль всей стопки из мелкой нарезки. Это так же спасает если даже сам слайсер считает не объём 3Д а лишь двумерное пересечение.  Всё равно это оказывается корректным.

29.10.2020 в 14:48
0

Мне видится оптимальным решением вокселизация модели и расчет интенсивностей пикселей слоя с учётом выше и ниже лежащих слоёв а так же анизотропии как кривых полимеризации по осям, так и расположения субпикселей экрана.

А не так, как сейчас в большинстве слайсеров - проекция сечения модели на плоскость и растеризация в лучшем случае с антиалиазингом в этой плоскости.

29.10.2020 в 19:36
1

В том то и дело, что то что у нас - это не антиалиасинг по своей сути, а вычисление обьёма 3Д в сетке пикселя, и, далее, с учётом кривых полимеризации проэципование его в слое. БЕЗ МАЛЕЙШЕЙ ПОТЕРИ ДЕТАЛИЗАЦИИ!     Если совсем углубляться, то можно вычитать рассеяние, или глубину отверждения смолы. Но это чревато потерей деталировки. Если вы из элемента в 0.3мм вычтите  глубину отверждения, тоже равную у бытовых смол 0.3-0.5мм - то вы уже её потеряете. Данные вещи всё же рациональнее  делать на смоле высокого разрешения с малой глубиной отверждения, а не учитывать в "Вокселе", используя бытовую смолу.

 

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Очередной REFR тест, или ищем лучшее время засветки

Выпущена учебная версия T-FLEX CAD 17!

T-FLEX CAD 17 – самая быстрая САПР?

Чёрная пятница 2020: 27.11 - 04.12

Schüler. Erster Druck auf Photon Mono X.

Дробовик производства Bandit "Чистильщик" из Borderlands 2