OBJ (или .OBJ) — это формат файла определения геометрии, впервые разработанный Wavefront Technologies для своего пакета анимации Advanced Visualizer . Формат файла открыт и принят другими поставщиками приложений для 3D-графики.
Формат файла OBJ — это простой формат данных, который представляет только трехмерную геометрию, а именно положение каждой вершины , положение UV каждой вершины координат текстуры, нормали вершин и грани, которые делают каждый полигон определенным как список вершин, и вершины текстуры. Вершины по умолчанию хранятся в порядке против часовой стрелки, что делает явное объявление нормалей граней ненужным. Координаты OBJ не имеют единиц измерения, но файлы OBJ могут содержать информацию о масштабе в удобочитаемой строке комментария.
Все, что следует за символом решетки (#), является комментарием.
# это комментарий
Файл OBJ может содержать данные вершин, атрибуты свободной кривой/поверхности, элементы, операторы тела свободной кривой/поверхности, связь между поверхностями свободной формы, группировку и информацию об атрибутах отображения/рендеринга. Наиболее распространенными элементами являются геометрические вершины, координаты текстуры, нормали вершин и полигональные грани:
# Список геометрических вершин с координатами (x, y, z, [w]), w необязательно и по умолчанию равно 1,0.в 0,123 0,234 0,345 1,0в ......# Список координат текстуры в координатах (u, [v, w]), они будут варьироваться от 0 до 1. v, w являются необязательными и по умолчанию равны 0.вт 0.500 1 [0]вт ......# Список нормалей вершин в форме (x,y,z); нормали могут не быть единичными векторами .вн 0,707 0,000 0,707вн ......# Вершины пространства параметров в форме (u, [v, w]); свободная форма геометрического утверждения (см. ниже)вп 0,310000 3,210000 2,100000вице-президент ......# Многоугольный элемент лица (см. ниже)ж 1 2 3ф 3/1 4/2 5/3ж 6/4/1 3/5/3 7/6/5ф 7//1 8//2 9//3ф ......# Элемент строки (см. ниже)л 5 8 1 2 4 9
Вершина указывается с помощью строки, начинающейся с буквы . За ней следуют координаты (x,y,z[,w]). W является необязательным и по умолчанию равно 1.0. Для указания местоположения координат используется правая система координат. Некоторые приложения поддерживают цвета вершин, указывая значения красного, зеленого и синего после xy и z (это исключает указание w). Значения цвета находятся в диапазоне от 0 до 1. [ 2]v
Оператор геометрии свободной формы может быть указан в строке, начинающейся со строки vp
. Определите точки в пространстве параметров кривой или поверхности. u
требуется только для точек кривой, u
а также v
для точек поверхности и контрольных точек нерациональных кривых обрезки, и u
, v
и w
(вес) для контрольных точек рациональных кривых обрезки.
Грани определяются с помощью списков индексов вершин, текстур и нормалей в формате vertex_index/texture_index/normal_index, для которого каждый индекс начинается с 1 и увеличивается в соответствии с порядком, в котором был определен указанный элемент. Многоугольники, такие как четырехугольники, могут быть определены с помощью более трех индексов.
Файлы OBJ также поддерживают геометрию свободной формы, которая использует кривые и поверхности для определения объектов, например поверхности NURBS .
Допустимый индекс вершины соответствует соответствующим элементам вершины ранее определенного списка вершин. Если индекс положительный, то он ссылается на смещение в этом списке вершин, начиная с 1. Если индекс отрицательный, то он ссылается на конец списка вершин относительно, -1 ссылается на последний элемент.
Каждая грань может содержать три и более вершин.
ф в1 в2 в3 ....
При желании индексы координат текстуры можно использовать для указания координат текстуры при определении грани. Чтобы добавить индекс координат текстуры к индексу вершины при определении грани, необходимо поставить косую черту сразу после индекса вершины, а затем указать индекс координат текстуры. До или после косой черты не допускается наличие пробелов. Допустимый индекс координат текстуры начинается с 1 и соответствует соответствующему элементу в ранее определенном списке координат текстуры. Каждая грань может содержать три или более элементов.
ф v1/vt1 v2/vt2 v3/vt3 ...
При желании нормальные индексы можно использовать для указания векторов нормалей для вершин при определении грани. Чтобы добавить нормальный индекс к индексу вершины при определении грани, необходимо поставить вторую косую черту после индекса координат текстуры, а затем указать нормальный индекс. Допустимый нормальный индекс начинается с 1 и соответствует соответствующему элементу в ранее определенном списке нормалей. Каждая грань может содержать три или более элементов.
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
Поскольку координаты текстуры необязательны, геометрию можно определить и без них, но для этого необходимо поставить две косые черты после индекса вершины, прежде чем указывать нормальный индекс.
ф v1//vn1 v2//vn2 v3//vn3 ...
Записи, начинающиеся с буквы «l» (строчная L), указывают порядок вершин, образующих полилинию.
л v1 v2 v3 v4 v5 v6 ...
Файлы Obj поддерживают поверхности более высокого порядка, используя несколько различных видов интерполяции, таких как Тейлор и B-сплайны, хотя поддержка этих функций в сторонних считывателях файлов далека от универсальной. Файлы Obj также не поддерживают иерархии сеток или какие-либо виды анимации или деформации, такие как скиннинг вершин или морфинг сеток.
Материалы , описывающие визуальные аспекты полигонов, хранятся во внешних файлах .mtl. Из файла OBJ можно ссылаться на несколько внешних файлов материалов MTL. Файл .mtl может содержать одно или несколько именованных определений материалов.
mtllib [имя внешнего файла .mtl]...
Этот тег определяет имя материала для следующего за ним элемента. Имя материала соответствует именованному определению материала во внешнем файле .mtl.
usemtl [имя материала]...
Именованные объекты и группы полигонов указываются с помощью следующих тегов.
о [имя объекта] ... г [имя группы] ...
Плавное затенение полигонов обеспечивается с помощью групп сглаживания.
с 1 ... # Плавное затенение также можно отключить. выключен ...
Файлы OBJ, благодаря своей списочной структуре, могут ссылаться на вершины, нормали и т. д. либо по их абсолютному положению (1 представляет первую определенную вершину, N представляет N-ую определенную вершину), либо по их относительному положению (-1 представляет последнюю определенную вершину). Однако не все программное обеспечение поддерживает последний подход, и наоборот, некоторое программное обеспечение изначально записывает только последнюю форму (из-за удобства добавления элементов без необходимости пересчета смещений вершин и т. д.), что приводит к случайным несовместимостям.
Формат библиотеки шаблонов материалов (MTL) или формат файла .MTL — это сопутствующий формат файла .OBJ, также определенный Wavefront Technologies , который описывает свойства затенения поверхности (материала) объектов в одном или нескольких файлах .OBJ. Файл .OBJ ссылается на один или несколько файлов .MTL (называемых «библиотеками материалов»), а оттуда ссылается на одно или несколько описаний материалов по имени. Файлы .MTL — это текст ASCII , который определяет светоотражающие свойства поверхности для целей компьютерного рендеринга и в соответствии с моделью отражения Фонга . Стандарт широко поддерживается различными пакетами компьютерного программного обеспечения, что делает его полезным форматом для обмена материалами.
Формат MTL, хотя и широко используется, устарел и не полностью поддерживает более поздние технологии, такие как карты отражения и карты параллакса . Однако, благодаря открытой и интуитивно понятной природе формата, их можно легко добавить с помощью пользовательского генератора файлов MTL.
Формат MTL определяет ряд форматов. [5] [6]
Один .mtl
файл может определять несколько материалов. Материалы определяются в файле один за другим, каждый из которых начинается с newmtl
команды:
# определить материал с именем «Цветной»newmtl Цветной
Окружающий цвет материала объявляется с помощью . Определения цветов указаны в RGB, где значение каждого канала находится в диапазоне от 0 до 1 .Ka
# белыйКа 1.000 1.000 1.000
Аналогично, диффузный цвет объявляется с помощью Kd
.
# белыйКд 1.000 1.000 1.000
Зеркальный цвет объявляется с помощью и взвешивается с помощью зеркального показателя .Ks
Ns
# черный (выкл.)Кс 0.000 0.000 0.000# диапазон от 0 до 100010.000 н.с.
Материалы могут быть прозрачными . Это называется растворением . В отличие от настоящей прозрачности, результат не зависит от толщины объекта. Значение 1,0 для "d" ( solve ) является значением по умолчанию и означает полную непрозрачность, как и значение 0,0 для "Tr". Растворение работает со всеми моделями освещения.
# некоторые реализации используют 'd'д 0,9# другие используют 'Tr' (инвертированный: Tr = 1 - d)Тр 0.1
Прозрачные материалы могут дополнительно иметь цвет пропускающего фильтра, обозначенный как «Tf».
# Цвет фильтра пропускания (используется RGB)Тф 1,0 0,5 0,5# Цвет фильтра пропускания (с использованием CIEXYZ) - значения y и z являются необязательными и считаются равными x, если они опущеныТф хyz 1,0 0,5 0,5# Цвет фильтра пропускания из файла спектральной кривой (обычно не используется)Tf спектральный <имя файла>.rfl <необязательный фактор>
Материал также может иметь оптическую плотность для своей поверхности. Это также известно как показатель преломления .
# оптическая плотностьNi 1.45000
Значения могут быть в диапазоне от 0,001 до 10. Значение 1,0 означает, что свет не преломляется при прохождении через объект. Увеличение оптической плотности увеличивает величину преломления. Стекло имеет показатель преломления около 1,5. Значения менее 1,0 дают странные результаты и не рекомендуются. [7]
Доступно несколько моделей освещения для каждого материала. Обратите внимание, что не требуется устанавливать прозрачную модель освещения для достижения прозрачности с помощью "d" или "Tr", и в современном использовании модели освещения часто не указываются, даже для прозрачных материалов. Модели освещения перечислены следующим образом:
0. Цвет включен, а окружающий свет выключен1. Цвет включен и окружающая среда включена2. Выделите на3. Отражение и трассировка лучей4. Прозрачность: Стекло включено, Отражение: Трассировка лучей включена5. Отражение: включено Френель и трассировка лучей включена6. Прозрачность: преломление включено, отражение: Френель выключен, трассировка лучей включена.7. Прозрачность: Преломление включено, Отражение: Френель включен и Ход лучей включен8. Отражение включено, трассировка лучей выключена9. Прозрачность: Стекло включено, Отражение: Трассировка лучей выключена10. Отбрасывает тени на невидимые поверхности.
иллюминация 2
Текстурированные материалы используют те же свойства, что и выше, и дополнительно определяют карты текстур . Ниже приведен пример файла общего материала. Более подробную информацию см. в полном справочнике по формату файла Wavefront.
newmtl Текстурированный Ка 1.000 1.000 1.000 Кд 1.000 1.000 1.000 Кс 0.000 0.000 0.000 д 1.0 иллюминация 2 # карта текстур окружающего пространства map_Ka lemur.tga # диффузная карта текстуры (в большинстве случаев она будет такой же, как и # карта фоновой текстуры) map_Kd лемур.tga # зеркальная цветовая текстура карты map_Ks лемур.tga # компонент зеркального выделения карта_Ns лемур_spec.tga # альфа-текстурная карта карта_d лемур_альфа.tga # некоторые реализации используют 'map_bump' вместо 'bump' ниже карта_бумп лемур_бумп.tga # карта рельефа (которая по умолчанию использует канал яркости изображения) удар лемур_bump.tga # карта смещения дисп лемур_дисп.tga # текстура трафаретной наклейки (по умолчанию «матовый» канал изображения) декаль lemur_stencil.tga
Операторы текстурной карты также могут иметь дополнительные параметры (см. полную спецификацию).
# происхождение текстуры (1,1,1) map_Ka -o 1 1 1 окружающая среда.tga # сферическая карта отражения refl -тип сферические облака.tga
-blendu on | off # установить горизонтальное смешивание текстур (по умолчанию включено)-blendv on | off # установить вертикальное смешивание текстур (по умолчанию включено)-boost float_value # повысить резкость mip-карты-mm base_value gain_value # изменить значения текстурной карты (по умолчанию 0 1) # базовое_значение = яркость, усиление_значение = контрастность-ou [v [w]] # Смещение начала координат (по умолчанию 0 0 0)-su [v [w]] # Масштаб (по умолчанию 1 1 1)-tu [v [w]] # Турбулентность (по умолчанию 0 0 0)-texres resolution # разрешение текстуры для создания-clamp on | off # рендерить только текселы в фиксированном диапазоне 0-1 (по умолчанию выключено) # При отсутствии зажима текстуры повторяются по всей поверхности, # при зажатии только текселы, которые попадают в диапазон 0-1 # диапазон визуализируется.-bm mult_value # множитель рельефа (только для карт рельефа)-imfchan r | g | b | m | l | z # указывает, какой канал файла используется для # создать скалярную или рельефную текстуру. r:red, g:green, # b:синий, m:матовый, l:яркость, z:глубина z.. # (по умолчанию для выпуклости - «l», а для наклейки - «m»)
Например,
# говорит использовать красный канал bumpmap.tga в качестве карты рельефаbump -imfchan r bumpmap.tga
Для карт отражений ...
-type сфера # указывает сферу для карты отражения "refl" -type cube_top | cube_bottom | # при использовании кубической карты файл текстуры для каждого cube_front | cube_back | # сторона куба указывается отдельно куб_левый | куб_правый
Из-за простоты анализа файлов и неофициального распространения формата файла файлы могут содержать изменения, специфичные для поставщика.
Согласно спецификации, опции должны предшествовать имени файла текстуры. Однако, по крайней мере, один поставщик генерирует файлы с опциями в конце.
# множитель удара 0,2удар texbump.tga -bm 0.2
Создатели онлайн-инструмента для 3D-редактирования и моделирования Clara.io предложили расширить формат MTL, чтобы включить указание карт и параметров физически обоснованного рендеринга (PBR). Это расширение впоследствии было принято Blender и TinyObjLoader. Карты и параметры PBR расширения: [8]
Pr/map_Pr # шероховатостьPm/map_Pm # металликPs/map_Ps # блескТолщина прозрачного лака № шт.Pcr # шероховатость прозрачного покрытияKe/map_Ke # эмиссионныйанизо # анизотропияанизотропия # вращение анизотропиинорма # карта нормали (компоненты RGB представляют компоненты XYZ нормали поверхности)
Дальнейшие предлагаемые расширения исходят из набора инструментов DirectXMesh для движка DirectX от Microsoft , что позволяет определять предварительно скомпилированный материал RMA модели. [9]
map_RMA # Материал RMA (шероховатость, металличность, окклюзия окружающей среды)map_ORM # альтернативное определение map_RMA