Формат OBJ — текстовый формат 3D-моделей¶
OBJ — текстовый формат хранения трёхмерных моделей, описывающий геометрию объекта в виде списков координат вершин, текстурных координат, нормалей и полигонов (обычно треугольников или четырёхугольников). Файл с расширением .obj легко читается человеком, не использует сжатие и может сопровождаться отдельным материалом в формате .mtl (Material Template Library), в котором описываются цвета, текстуры и оптические свойства поверхностей.
¶История и назначение
Формат разработан компанией Wavefront Technologies для своего пакета анимации Wavefront Advanced Visualizer и впоследствии стал одним из наиболее распространённых обменных форматов 3D-графики. Спецификация формата открыта и документирована, поэтому поддержка OBJ реализована практически во всех 3D-редакторах и движках: Blender, 3ds Max, Maya, Cinema 4D, ZBrush, а также в игровых движках и научном ПО для визуализации.
Основное назначение OBJ — перенос геометрии между программами. Формат не поддерживает анимацию, скелетную деформацию, сцену как таковую (положение объектов, иерархию), скрипты и сложные шейдеры — только статичную геометрию и базовые материалы.
¶Структура файла
OBJ — обычный текстовый файл, каждая строка которого содержит команду (ключевое слово) и её параметры. Основные команды:
| Команда | Назначение |
|---|---|
v x y z | Координаты вершины (опционально w) |
vt u v | Текстурная координата (UV) |
vn x y z | Нормаль вершины |
f v/vt/vn ... | Полигон (грань), составленный из вершин |
mtllib file.mtl | Ссылка на файл материалов |
usemtl name | Применение материала к последующим граням |
o name | Имя объекта |
g name | Имя группы |
s flag | Управление сглаживанием (smoothing group) |
Простой пример содержимого OBJ-файла, описывающего треугольник:
`` mtllib triangle.mtl v 0.0 0.0 0.0 v 1.0 0.0 0.0 v 0.0 1.0 0.0 vt 0.0 0.0 vt 1.0 0.0 vt 0.0 1.0 vn 0.0 0.0 1.0 usemtl Material1 f 1/1/1 2/2/1 3/3/1 ``
Строка f ссылается на вершину, текстурную координату и нормаль по их порядковым номерам, начиная с единицы. Отрицательные индексы допускаются и отсчитываются от конца списка. Полигон может состоять из произвольного числа вершин (n-угольник), но многие движки и редакторы при импорте разбивают его на треугольники.
¶Формат материалов MTL
Файл .mtl задаёт свойства поверхностей: диффузный цвет (Kd), зеркальный (Ks), эмиссию (Ke), прозрачность (d), коэффициент освещённости (Ka), а также карты текстур — диффузную (map_Kd), нормальную (map_Bump), отражений (map_Ks) и другие. MTL подключается командой mtllib, а применение конкретного материала к граням задаётся командой usemtl.
¶Достоинства и ограничения
Достоинства:
- Простота и прозрачность: файл легко читать и генерировать программно без сторонних библиотек.
- Широкая поддержка: практически универсальный формат обмена между 3D-пакетами, движками, CAD-системами и научным ПО.
- Открытая спецификация, не привязанная к конкретному вендору.
- Возможность ручного редактирования и отладки.
Ограничения:
- Отсутствие анимации, костей, сцены и сложных материалов.
- Текстовый формат даёт файлы большего объёма по сравнению с бинарными альтернативами (STL, glTF, FBX).
- Нет единого стандарта кодировки и разделителей, что иногда вызывает проблемы при импорте файлов от разных авторов.
- Поддержка полигонов с произвольным числом сторон реализована не везде одинаково.
¶Расширения и альтернативы
Существует ряд расширений формата OBJ, добавляющих то, чего нет в базовой спецификации. Формат OBJ+ (или «OBJ с расширениями») поддерживается рядом движков и добавляет морфинг-таргеты и упрощённые кости. Формат glTF (GL Transmission Format), разработанный консорциумом Khronos Group, позиционируется как «JPEG для 3D» и поддерживает анимацию, PBR-материалы и компактную бинарную кодировку (.glb). Тем не менее OBJ продолжает использоваться как базовый обменный формат, особенно там, где важна простота и совместимость: 3D-печать, научная визуализация, импорт геометрии в CAD, обучение и прототипирование.
¶Применение
OBJ применяется в компьютерной анимации и игровой индустрии для переноса моделей между пакетами, в 3D-печати для передачи геометрии слайсерам, в геоинформационных системах и научных симуляциях (например, визуализация молекул, гидродинамическое моделирование), а также в образовательных целях — как учебный пример структуры 3D-данных.
Источники:
- Спецификация Wavefront OBJ/MTL (Polygon Data File Format)
- Документация Blender Foundation по форматам импорта/экспорта
- Khronos Group — glTF Specification
- Файл справки 3ds Max по форматам обмена
