STL против 3MF для многоцветной печати
Скачали красивую модель, а на печати она вышла одноцветной серой болванкой? Часто виноват сам формат файла. STL физически не умеет хранить цвет — в нём есть только треугольники. 3MF умеет почти всё: цвета, материалы, отдельные детали и даже единицы измерения. Разберём, почему для многоцветной FDM-печати 3MF — не «модный», а единственно рабочий формат, и почему BunnySplit всегда отдаёт результат именно в нём.
Коротко
- STL хранит только геометрию — ни цвета, ни материалов, ни единиц. Чтобы передать мультицвет, пришлось бы делать по отдельному STL на каждый цвет.
- 3MF — это ZIP-контейнер (OPC), в который упакованы цвета, материалы, несколько независимых тел и явные единицы измерения.
- BunnySplit отдаёт 3MF: каждая деталь едет со своим цветом филамента через basematerials, а мультицвет в одном теле — через per-triangle атрибут pid/p1.
- 3MF сам требует манифолда — поэтому watertight-меш это не опция, а условие существования корректного файла.
- По разным оценкам 3MF обычно на 30–60% компактнее эквивалентного бинарного STL (вторичные источники, не пункт спецификации).
STL: только треугольники — и всё
STL — самый старый и универсальный формат FDM-печати. Он хранит поверхность модели как «суп из треугольников»: список граней, у каждой три вершины и нормаль. И на этом всё. В STL физически негде записать цвет, материал, единицы измерения, метаданные или несколько отдельных тел — стандарт этого просто не предусматривает.
Из-за этого многоцветную деталь в один STL не упаковать. Классический обход — экспортировать по STL на каждый цвет и вручную совмещать их в слайсере по общему нулю координат. Работает, но хрупко: сдвинулся ноль — детали разъехались.
Отдельная застарелая боль STL — единицы. Формат не пишет, миллиметры это или дюймы, поэтому одна и та же модель то приезжает в 25,4 раза больше, то во столько же раз меньше. 3MF эту путаницу закрывает, потому что единицы в нём заданы явно.
- цвет и назначенные материалы — нет
- единицы измерения (мм/дюймы) — нет
- несколько тел в одной сцене — нет
- метаданные (автор, лицензия) — нет
3MF: не файл, а контейнер
3MF (3D Manufacturing Format) устроен принципиально иначе. Это не «один файл с треугольниками», а OPC-контейнер — по сути ZIP-архив с XML-частями внутри. Спецификация прямо требует, чтобы это был ZIP. Если распаковать .3mf как обычный архив, вы физически увидите: [Content_Types].xml, папку _rels с файлом .rels и главную часть 3D/3dmodel.model — именно эту структуру пишет наш экспортёр.
В этот контейнер помещается всё, чего не хватало STL: цвета и материалы, несколько независимых тел в одной сцене, метаданные и явные единицы измерения. Один файл — вся сборка целиком.
Приятный бонус: по разным оценкам 3MF обычно на 30–60% компактнее эквивалентного бинарного STL — за счёт ZIP-сжатия и более экономной модели данных. Это вторичные данные, а не пункт спецификации, но на практике файл почти всегда легче.
| Что несёт файл | STL | 3MF |
|---|---|---|
| Геометрия (треугольники) | да | да |
| Цвет и материалы | нет | да |
| Единицы измерения | нет | да, явно |
| Несколько тел в сцене | нет | да |
| Метаданные | нет | да |
| Контейнер | плоский файл | ZIP (OPC) |
Почему BunnySplit отдаёт именно 3MF
Когда BunnySplit режет модель по цветовым зонам и добавляет snap-fit замки, на выходе получается не одна деталь, а сборка из нескольких тел — каждое под свой филамент. Донести до слайсера «какая деталь каким цветом печатается» умеет только 3MF.
Каждая деталь уезжает в 3MF отдельным объектом со своим цветом филамента: цвет прописан через блок basematerials и displaycolor в формате #RRGGBBAA. Слайсер (Bambu Studio, PrusaSlicer, Cura) открывает готовую сборку, где цвета уже назначены — не нужно вручную красить каждое тело.
Второй режим — мультицвет внутри одного тела. Здесь цвет задаётся не на деталь, а на каждый треугольник через атрибут pid/p1. Так один объект печатается несколькими цветами сменой филамента, без физической разрезки — подробнее в статье про мультицвет без AMS на одном экструдере.
Два пути к многоцвету — и оба живут в 3MF
Многоцветную модель получают двумя способами, и 3MF поддерживает оба.
Первый — разрезать модель на детали по цветовым зонам, каждую напечатать своим филаментом и защёлкнуть snap-fit замками. Цвет получается физической сборкой, без AMS и без покраски. Как именно проходит рез — в статье как разрезать модель на цветные детали.
Второй — оставить одно тело и красить его сменой филамента по слоям или по треугольникам. Разница между «сменой по слою» и «резкой на детали» разобрана отдельно: смена филамента по слою против деталей. В обоих случаях носителем цвета выступает 3MF, а не STL.
Почему у нас свой 3MF-writer
Казалось бы, экспорт 3MF есть в любой mesh-библиотеке — бери и пользуйся. Но здесь спрятана тихая ловушка.
У популярной библиотеки trimesh функция export_3MF объявляет XML-namespace материалов, но не пишет ни сам блок basematerials, ни атрибуты pid/p1 на треугольниках. Файл формально валиден и спокойно открывается — но все детали приезжают серыми: цвет теряется молча, без единой ошибки. Заметишь только когда откроешь сборку в слайсере и не поймёшь, куда делись цвета.
Именно поэтому у BunnySplit свой мультиматериальный 3MF-writer. Он гарантирует, что назначенный цвет каждой детали доедет до слайсера, а не «выпадет» по дороге.
Золотой мостик: 3MF сам требует watertight
И вот главное, что связывает формат с печатной готовностью. Стандарт 3MF не принимает любой «суп из треугольников». Для объектов типа model он требует манифолдности: каждое ребро граничит ровно с одним другим треугольником, ориентация согласована, нормали смотрят наружу. Иначе это просто не валидный 3MF-объект.
Значит наш watertight-гейт — внутренний критик is_manifold_volume, который бракует дырявые и самопересекающиеся меши — это не перестраховка, а прямое требование формата. «Печатно-готовый 3MF» по определению стандарта равно «watertight + manifold».
Что такое герметичный меш, какие бывают дефекты и как движок их чинит — в статье что такое watertight-меш и почему без него не печатается.
Получить мультицветный 3MF из обычного STL помогает инструмент разрезать модель по цветам.
На чём основан сервис
BunnySplit рассчитывает соединения не «на глаз». Зазор замка складывается из посадки (по умолчанию 0.30 мм на сторону) и компенсации усадки материала — PLA 0.3%, PETG 0.5%, ABS 0.7% — а прогиб защёлки проектируется с запасом не меньше двукратного по пределу деформации пластика (PLA около 4%, PETG около 7%). Геометрия консольных защёлок следует инженерному канону snap-fit Bayer/Covestro «Snap-Fit Joints for Plastics».
Числа — из движка сервиса и справочников FDM; величины snap-fit — по Bayer/Covestro. Разработчик и издатель: BunnySplit.
Загрузите модель — получите готовый 3MF
BunnySplit сам разрежет модель по цветовым зонам, расставит snap-fit замки и соберёт печатно-готовый 3MF, где каждая деталь уже знает свой цвет филамента. Загрузите файл и разрежьте модель в редакторе BunnySplit — на выходе сразу цветная сборка без покраски и без AMS.
Загрузить модель →Печатаете на заказ? Продавайте свои модели и услуги на BunnySplit →