UltKit
Изображения11
PDF13
Документы и данные7
Видео6
Аудио4
Другие инструменты22

STL, OBJ или 3MF: какой формат 3D-файла выбрать?

Используйте STL для одноцветной печати, когда модель нужно просто нарезать в слайсере, OBJ — когда у модели есть текстуры для рендера или игрового движка, и 3MF — когда ваш слайсер его поддерживает и вам нужно, чтобы единицы измерения, цвета и несколько деталей дошли без потерь. Формат определяет, какие метаданные передаются вместе с сеткой, но никогда не определяет, исправна ли сама сетка.

Jonas WeberJonas WeberРедактор раздела о производительности сайтов
Обновлено 12 мин чтения
Настольный 3D-принтер в прозрачном корпусе на белом столе, рядом ноутбук с 3D-моделью и разноцветные напечатанные детали, среди них рельефная карта и красная шестерня

STL: список треугольников и больше ничего

STL создали в 1987 году для первых стереолитографических машин 3D Systems, и это видно по его устройству. Файл — плоский список треугольников, каждый описан нормалью грани и тремя угловыми точками. Общей таблицы вершин нет, поэтому вершина, к которой сходятся шесть треугольников, записывается шесть раз. Поля единиц измерения тоже нет: координата 25 может означать миллиметры, дюймы или метры, и почти все слайсеры считают её миллиметрами. Цвету, текстуре и названиям деталей в базовом формате места нет, и именно поэтому его до сих пор читают все слайсеры, CAD-программы и сервисы печати.

У STL две кодировки. ASCII STL записывает всё текстом, строками вроде facet normal, outer loop и vertex 12.5 0 3.2, так что файл можно открыть в текстовом редакторе и прочитать числа. Бинарный STL начинается с 80-байтового заголовка и 4-байтового числа треугольников, затем каждый треугольник хранится как двенадцать 4-байтовых чисел с плавающей точкой плюс 2-байтовое поле атрибутов: ровно 50 байт на треугольник. Поэтому размер легко предсказать. Модель из миллиона треугольников в бинарном виде занимает около 50 MB, а ASCII-версия той же сетки обычно в четыре–шесть раз больше, потому что каждая цифра становится символом.

Простота — и сила, и ловушка. По STL нельзя узнать, должен ли он быть одной деталью или тремя, экспортирован ли в дюймах и образуют ли его треугольники замкнутое тело. Слайсер выясняет это по сырым координатам, и если ошибается, получается деталь в 25,4 раза меньше или пропавшая стенка. Для одноцветной детали, которую вы сами спроектировали и экспортировали в миллиметрах, всё это не важно, а STL остаётся форматом, который меньше всего рискует быть отвергнутым.

OBJ: полигоны, UV и отдельный файл материалов

OBJ появился в Wavefront Technologies, чьё ПО Advanced Visualizer использовало его в конце 1980-х, а в 1990-х он распространился как текстовый формат, который могли обменивать почти все 3D-программы. В отличие от STL, он хранит список вершин и строит грани по индексам, так что общая вершина записана один раз, а грани могут быть треугольниками, четырёхугольниками и более крупными полигонами. Строки с v содержат позиции, vt — текстурные координаты (UV), vn — нормали, f — грани. Группы (g) и объекты (o) задают имена частям, поэтому OBJ проходит через Blender, Maya или ZBrush с сохранением структуры.

Внешний вид хранится вне файла .obj. Строка mtllib называет сопутствующий файл .mtl, а строки usemtl назначают материалы граням. В .mtl записаны цвета, например Kd (диффузный), и ссылки на изображения текстур в записях вроде map_Kd wood.png. Модель с текстурами — это как минимум три файла: геометрия, библиотека материалов и одно или несколько изображений, и все они связаны относительными путями. Если отправить только .obj, получатель увидит серую модель. Такое разделение удобно в игровых и VFX-конвейерах, где художники меняют текстуры, не трогая геометрию, и это же самая частая причина того, что скачанная модель выглядит неправильно.

В масштабе у OBJ та же слепая зона, что у STL: он хранит голые числа без единиц. Большинство программ моделирования пишут метры или сантиметры, а слайсеры читают миллиметры, поэтому OBJ из магазина игровых ассетов может прийти с ошибкой в 10 или 1000 раз. Для печати OBJ не даёт ничего, что использует слайсер, кроме цвета вершин в нескольких программах, так что художественный ассет проще всего оставить с текстурами для рендера, а слайсеру отдать чистую сетку. В обратную сторону перевод STL в OBJ — кратчайший путь из модели для печати в рендер или игру.

3MF: ZIP-пакет, созданный для печати

3MF опубликовал в 2015 году 3MF Consortium — группа, которую основала Microsoft вместе с компаниями из индустрии печати и CAD. Файл .3mf — это ZIP-архив, тот же контейнер, что разобран в статье ZIP, RAR и 7z. Если переименовать его в .zip, внутри найдётся XML-файл 3D/3dmodel.model с сеткой, файл типов содержимого, файлы связей и часто миниатюры и конфигурация слайсера. Каждая модель объявляет единицу измерения (микрон, миллиметр, сантиметр, дюйм, фут или метр), так что проблемы масштаба, преследующей STL и OBJ, просто нет. Цвета, базовые материалы, несколько объектов и их расположение на столе входят в спецификацию.

Спецификация также требует, чтобы сетки были многообразными и согласованно ориентированными: каждое ребро общее ровно для двух треугольников, и все они смотрят наружу. Экспортёры, следующие правилам, не могут записать открытую самопересекающуюся геометрию, которую STL спокойно хранит. Поддержка среди актуальных программ широкая. PrusaSlicer, Bambu Studio, OrcaSlicer и UltiMaker Cura читают 3MF, PrusaSlicer и Bambu Studio сохраняют весь проект как .3mf с настройками печати и раскрашенными цветами, а приложение Microsoft 3D Builder в Windows открывает его напрямую. Слабое место — старые прошивки, порталы печатных ферм и CAD-импортёры, которые всё ещё ждут STL; для них конвертируйте 3MF в STL и смиритесь с тем, что дополнительные данные останутся позади.

from ↓ · to →UnitsColorTexturesНесколько деталейПараметры печатиПравило многообразности
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to Несколько деталей: no– STL to Параметры печати: no– STL to Правило многообразности: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to Несколько деталей: yes– OBJ to Параметры печати: no– OBJ to Правило многообразности: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to Несколько деталей: yes3MF to Параметры печати: yes3MF to Правило многообразности: yes
supported not offeredСтроки — форматы, столбцы — то, что может нести сам файл. Цвет и текстуры OBJ требуют отдельного файла .mtl и изображений; текстуры 3MF берутся из расширения материалов. Некоторые программы записывают цвет в неиспользуемые байты бинарного STL, но стандарта для этого нет.
Ряд 3D-принтеров с открытой рамой на деревянных столах, на столе ближайшего несколько синих цилиндрических деталей
Фото: Unsplash

Какой формат под какую задачу

Правильный формат зависит от того, куда файл пойдёт дальше, а не от того, какой из них новее. Если дальше слайсер, а деталь одноцветная, подойдёт STL, и его по-прежнему понимают все форумы, библиотеки моделей и сервисы печати. Если дальше рендерер, игровой движок или программа моделирования другого художника, OBJ сохранит UV, нормали и именованные группы, которые STL теряет, а его текстовая форма позволяет легко найти проблемы.

3MF оправдывает себя, когда файл несёт больше, чем геометрию. Многоцветная печать, раскрашенная в Bambu Studio, стол с двенадцатью деталями, расставленными под одно задание, деталь, спроектированная в дюймах, или проект, который нужно открыть снова с теми же высотой слоя и заполнением, — всё это требует 3MF, потому что ни один другой формат из рассмотренных не вместит такие данные. Если назначений несколько, храните самую полную версию как основную и экспортируйте из неё более простые с помощью конвертера 3D-моделей, а не цепочки конвертаций.

STL для простой печати

Одна деталь, один цвет, экспорт в миллиметрах. Открывается в любом слайсере, диалоге импорта CAD и форме загрузки сервиса печати.

OBJ для моделей с текстурами

UV, нормали и именованные группы для Blender, Maya, Unity или Unreal. Передавайте вместе с ним файл .mtl и изображения текстур.

3MF для современных слайсеров

Настоящие единицы, цвета, несколько объектов и параметры печати в одном ZIP. Родной формат проектов PrusaSlicer и Bambu Studio.

Пять причин, по которым 3D-файл ломается

Большинство неудачных печатей и сломанных импортов, которые списывают на формат, на деле связаны с сеткой или с тем, что программа-получатель о ней предположила. Сильнее всего уязвим STL, ведь в нём нет метаданных для отлова ошибок; у OBJ те же проблемы с масштабом и потерянными файлами; 3MF по замыслу избегает большинства из них, хотя небрежный экспортёр всё равно может записать плохую сетку. Откройте строки ниже, чтобы увидеть, как выглядит каждая проблема и откуда она обычно берётся.

Немногообразная сетка

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

Перевёрнутые нормали

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

Путаница миллиметров и дюймов

Деталь, нарисованная в дюймах, приходит в 25,4 раза меньше в слайсере, который считает миллиметры; сантиметры, прочитанные как миллиметры, дают ошибку в 10 раз. STL и OBJ не могут записать единицу, поэтому её задают при экспорте или конвертации.

Нет файла .mtl или текстур

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

Огромные ASCII STL

Подробный скан, сохранённый как ASCII STL, может занимать несколько сотен мегабайт, что тормозит слайсеры и упирается в лимиты загрузки. Повторный экспорт той же сетки в бинарный STL уменьшает файл примерно в пять раз, не меняя ни одного треугольника.

Сколько обычно весит файл в каждом формате

Размер вытекает из структуры. Бинарный STL фиксирован: 50 байт на треугольник, так что его можно рассчитать до экспорта. ASCII STL повторяет каждую вершину текстом и обычно в четыре–шесть раз больше бинарного. OBJ хранит каждую общую вершину один раз и ссылается на неё по индексу, поэтому для типичной замкнутой сетки он меньше ASCII STL и примерно в диапазоне бинарного STL, а если несёт ещё UV и нормали — больше. 3MF хранит индексированный XML и сжимает его внутри ZIP, поэтому для той же геометрии обычно получается самым маленьким из трёх.

Цифры ниже типичны для замкнутой сетки примерно из 500 000 треугольников, например подробной фигурки. Реальные файлы зависят от точности координат и экспортёра, так что считайте их порядками величин: они пригодятся, когда сервис печати ограничивает загрузку или STL, экспортированный из 3MF, получается в несколько раз больше.

Бинарный STL (500 000 треугольников × 50 байт)
≈ 25 MB
ASCII STL, та же сетка, типично
≈ 100–150 MB
OBJ без UV, типично
≈ 15–30 MB
3MF после сжатия в ZIP, типично
≈ 5–12 MB

Что исправляет конвертация, а что не исправит никогда

Конвертация считывает треугольники из одного контейнера и записывает их в другой. Всё, что может выразить целевой формат, переносится; всё, что не может, теряется. Поэтому STL в OBJ не теряет геометрию, 3MF в STL теряет цвета, единицы и расположение на столе, а OBJ в STL — текстуры и названия частей. В 3D-инструментах UltKit дополнительные решения задаются явно: Единицы модели сообщают конвертеру, в каком масштабе записан исходный файл, Вертикальная ось учитывает разницу между Y-up в игровых движках и Z-up в слайсерах, а Объединить в одну сетку определяет, останутся ли отдельные части раздельными.

Чего не делает ни одна конвертация — не исправляет сетку. Если в STL есть дыра, в OBJ, полученном из него, будет та же дыра, а экспортёр 3MF либо откажется её записывать, либо запишет как есть. Исправление сетки — отдельный шаг в программе для работы с сетками или во встроенном исправлении слайсера; лучше выполнить его один раз в главном файле, прежде чем экспортировать что-либо ещё. То же с масштабом: конвертер не узнает, что деталь задумывалась в дюймах, пока вы ему не скажете. С детализацией так же: низкополигональный STL станет низкополигональным OBJ или 3MF, поэтому, если важно качество, экспортируйте файл заново из исходной модели.

Что делает смена формата

  • Переносит те же треугольники в контейнер, который принимает другая программа
  • Применяет единицу, выбранную в Единицы модели, и исправляет ошибку масштаба в 25,4 или 10 раз
  • Поворачивает модель между Y-up и Z-up с помощью Вертикальная ось
  • Уменьшает ASCII STL, записывая его в двоичном виде
  • Сохраняет раздельные части или объединяет их в зависимости от Объединить в одну сетку

Что остаётся без изменений

  • Дыры, открытые рёбра и немногообразная геометрия
  • Перевёрнутые или несогласованные нормали
  • Самопересекающиеся части и стенки нулевой толщины
  • Детали, потерянные при первом экспорте сетки
  • Цвета и текстуры, если в целевом формате для них нет места

Таблица выбора: STL, OBJ или 3MF

Ещё два формата всегда всплывают в этом вопросе. STEP (ISO 10303) хранит точные тела и поверхности, а не треугольники, поэтому он нужен, когда деталь надо вернуть в Fusion 360, SolidWorks или FreeCAD для редактирования. GLB — двоичная форма glTF 2.0 от Khronos Group — упаковывает сетку вместе с материалами и текстурами в один файл в метрах и подходит для показа модели в вебе и в AR на Android.

Для трёх форматов, о которых идёт речь в статье, таблица ниже подводит итог выбора по назначению. Если подходят две строки, выбирайте формат, который хранит больше информации, а более простой экспортируйте позже: из 3MF в STL перейти легко, а восстанавливать потерянные цвета или единицы приходится вручную.

Выбор по тому, куда файл пойдёт дальше
СитуацияЛучший форматПочему
Одноцветная деталь для любого слайсераSTL (двоичный)Поддерживается везде; слайсеру больше ничего не нужно
Загрузка в библиотеку моделей или сервис печатиSTL, плюс 3MF, если он принимаетсяSTL принимают всегда; 3MF сохраняет единицы и цвета
Многоцветная печать или печать несколькими материалами3MFЕдинственный из этих форматов, который хранит цвета и материалы отдельных частей для слайсеров
Стол с несколькими деталями и настройками печати3MFХранит расположение объектов и настройки слайсера в одном файле
Деталь, спроектированная в дюймах3MFУказывает единицу, поэтому масштабирование на 25,4 не нужно
Модель с текстурами для Blender, Unity или UnrealOBJ (+ .mtl и изображения)Сохраняет UV, нормали и назначение материалов
Быстрая проверка в текстовом редактореOBJ или ASCII STLПростой текст, который можно читать построчно
Старая прошивка или программа, которая показывает только STLSTLУберите лишнее и отправьте сетку

Главное

  • STL хранит только треугольники: без единиц, без цвета, в двоичном виде — 50 байт на треугольник.
  • OBJ добавляет UV, нормали и именованные группы, но его цвета и текстуры зависят от отдельного файла .mtl и файлов изображений.
  • 3MF — это ZIP с XML, в котором записаны единицы, цвета, несколько объектов и настройки печати; он требует замкнутых сеток.
  • Используйте STL для простой одноцветной печати, OBJ для моделей с текстурами в арте и играх, а 3MF — всегда, когда его поддерживает слайсер.
  • Конвертация меняет контейнер, а не сетку: исправляйте дыры и нормали в программе для сеток и задавайте единицу самостоятельно.
ПоделитьсяXFacebookWhatsAppTelegram

Часто задаваемые вопросы

Заменит ли 3MF формат STL?

Медленно — в сфере печати. PrusaSlicer и Bambu Studio уже сохраняют проекты в 3MF, но STL по-прежнему принимают все программы и библиотеки моделей, так что оба формата будут сосуществовать ещё годами.

Может ли бинарный STL хранить цвет?

Стандартного способа нет. Некоторые программы записывают цвет в 2-байтовое поле атрибутов каждого треугольника, но большинство слайсеров его игнорируют, поэтому если важен цвет, используйте 3MF или OBJ.

Почему мой OBJ после скачивания отображается серым?

Файл .mtl или изображения текстур остались в другом месте, либо пути внутри .mtl указывают на папки, которых нет на вашем компьютере. Положите .obj, .mtl и изображения в одну папку и загрузите модель снова.

Какой STL дает более точную печать: ASCII или бинарный?

На практике ни один не печатает точнее. Оба описывают одни и те же треугольники; двоичный формат хранит координаты как 32-битные числа с плавающей запятой, ASCII — как текст, а двоичные файлы обычно в несколько раз меньше.

Можно ли конвертировать OBJ обратно в STL для печати?

Да. Треугольники переносятся без изменений, а UV, материалы и текстуры отбрасываются, так как в STL для них нет места. После этого проверьте масштаб: OBJ из программ моделирования часто записаны в метрах или сантиметрах.

В каком формате делиться моделью, чтобы ее могли напечатать другие?

Предложите STL для максимальной совместимости, а если в модели несколько частей, есть цвета или она спроектирована в дюймах — добавьте рядом 3MF, чтобы пользователи с современным слайсером получили всю настройку целиком.

Читайте также

Рука со стилусом над планшетом, лежащим на открытой странице журнала с сеткой маленьких белых иконок на черном фоне
Работа с изображениями

Как конвертировать PNG в SVG: трассировка логотипов и иконок

PNG становится настоящим SVG только после трассировки. Какие изображения хорошо векторизуются, как подготовить PNG, какие настройки выбрать и как проверить контуры.

Jonas Weber · 4 окт. 2026 г. · 12 мин чтения