Файл Wavefront .obj
Расширение имени файла |
.obj |
---|---|
Тип интернет-СМИ |
модель/объект [1] |
Разработано | Волновые Технологии |
Тип формата | 3D model format |
OBJ (или .OBJ) — это формат файла определения геометрии, впервые разработанный компанией Wavefront Technologies для пакета анимации Advanced Visualizer . Формат файла является открытым и принят другими поставщиками приложений для 3D-графики.
Формат файла OBJ — это простой формат данных, который представляет только трехмерную геометрию, а именно: положение каждой вершины , UV-позицию каждой вершины координат текстуры, нормали вершин и грани, которые определяют каждый многоугольник как список вершин. и вершины текстуры. По умолчанию вершины сохраняются в порядке против часовой стрелки, что делает ненужным явное объявление нормалей граней. Координаты OBJ не имеют единиц измерения, но файлы OBJ могут содержать информацию о масштабе в удобочитаемой строке комментариев.
Формат файла
[ редактировать ]Все, что следует за символом решетки (#), является комментарием.
# this is a comment
Файл OBJ может содержать данные вершин, атрибуты кривой/поверхности произвольной формы, элементы, операторы тела кривой/поверхности произвольной формы, связность между поверхностями произвольной формы, информацию о группировке и атрибутах отображения/рендеринга. Наиболее распространенными элементами являются геометрические вершины, текстурные координаты, нормали вершин и многоугольные грани:
# List of geometric vertices, with (x, y, z, [w]) coordinates, w is optional and defaults to 1.0. v 0.123 0.234 0.345 1.0 v ... ... # List of texture coordinates, in (u, [v, w]) coordinates, these will vary between 0 and 1. v, w are optional and default to 0. vt 0.500 1 [0] vt ... ... # List of vertex normals in (x,y,z) form; normals might not be unit vectors. vn 0.707 0.000 0.707 vn ... ... # Parameter space vertices in (u, [v, w]) form; free form geometry statement (see below) vp 0.310000 3.210000 2.100000 vp ... ... # Polygonal face element (see below) f 1 2 3 f 3/1 4/2 5/3 f 6/4/1 3/5/3 7/6/5 f 7//1 8//2 9//3 f ... ... # Line element (see below) l 5 8 1 2 4 9
Геометрическая вершина
[ редактировать ]Вершина буквы задается строкой, начинающейся с v
. За этим следуют координаты (x,y,z[,w]). W не является обязательным и по умолчанию имеет значение 1.0. Для указания местоположений координат используется правая система координат. Некоторые приложения поддерживают цвета вершин, помещая значения красного, зеленого и синего после xy и z (это исключает указание w). Значения цвета варьируются от 0 до 1. [2]
Вершины пространства параметров
[ редактировать ]Оператор геометрии произвольной формы может быть указан в строке, начинающейся со строки vp
. Определите точки в пространстве параметров кривой или поверхности. u
требуется только для точек кривой, u
и v
для точек поверхности и контрольных точек нерациональных кривых обрезки и u
, v
и w
(вес) для контрольных точек рациональных кривых обрезки.
Лицевые элементы
[ редактировать ]Грани определяются с использованием списков индексов вершин, текстур и нормалей в формате vertex_index/texture_index/normal_index, для которого каждый индекс начинается с 1 и увеличивается в соответствии с порядком, в котором был определен ссылочный элемент. Многоугольники, такие как четырехугольники, можно определить, используя более трех индексов.
Файлы OBJ также поддерживают геометрию произвольной формы, в которой для определения объектов используются кривые и поверхности, такие как поверхности NURBS .
Индексы вершин
[ редактировать ]Действительный индекс вершин соответствует соответствующим элементам вершин ранее определенного списка вершин. Если индекс положителен, он относится к смещению в этом списке вершин, начиная с 1. Если индекс отрицательный, то он относительно относится к концу списка вершин, -1 относится к последнему элементу.
Каждая грань может содержать три и более вершины.
f v1 v2 v3 ....
Индексы координат текстуры вершин
[ редактировать ]При желании индексы координат текстуры можно использовать для указания координат текстуры при определении лица. Чтобы добавить индекс координат текстуры к индексу вершины при определении лица, необходимо поставить косую черту сразу после индекса вершины, а затем поставить Индекс координат текстуры. Пробелы до и после косой черты не допускаются. Действительный индекс координат текстуры начинается с 1 и соответствует соответствующему индексу. элемент в ранее определенном списке координат текстуры. Каждая грань может содержать три и более элементов.
f v1/vt1 v2/vt2 v3/vt3 ...
Индексы нормалей вершин
[ редактировать ]При желании индексы нормалей можно использовать для указания векторов нормалей для вершин при определении грани. Чтобы добавить индекс нормали к индексу вершины при определении грани, нужно поставить вторую косую черту после индекса координат текстуры, а затем поставить нормальный показатель. Действительный нормальный индекс начинается с 1 и соответствует соответствующему элементу. в ранее определенном списке нормалей. Каждая грань может содержать три и более элементов.
f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
Индексы нормалей вершин без индексов координат текстуры
[ редактировать ]Поскольку координаты текстуры не являются обязательными, геометрию можно определить и без них, но необходимо поставить две косые черты после индекса вершины, прежде чем помещать нормальный индекс.
f v1//vn1 v2//vn2 v3//vn3 ...
Линейные элементы
[ редактировать ]Записи, начинающиеся с буквы «l» (строчная L), определяют порядок вершин, образующих полилинию.
l v1 v2 v3 v4 v5 v6 ...
Другие форматы геометрии
[ редактировать ]Файлы Obj поддерживают поверхности более высокого порядка с использованием нескольких различных видов интерполяции, таких как Тейлор и B-сплайны, хотя поддержка этих функций в сторонних программах чтения файлов далеко не универсальна. Файлы Obj также не поддерживают иерархии сеток или любые виды анимации или деформации, такие как скиннинг вершин или морфинг сеток.
Справочные материалы
[ редактировать ]Материалы , описывающие визуальные аспекты полигонов, хранятся в внешние файлы .mtl. Из файла OBJ можно ссылаться на более чем один внешний файл материала MTL. Файл .mtl может содержать одно или несколько именованных определений материалов.
mtllib [external .mtl file name] ...
Этот тег определяет имя материала для следующего за ним элемента. Имя материала соответствует определению именованного материала во внешнем файле .mtl.
usemtl [material name] ...
Именованные объекты и группы полигонов задаются с помощью следующих тегов.
o [object name] ... g [group name] ...
Плавное затенение полигонов обеспечивается с помощью групп сглаживания.
s 1 ... # Smooth shading can be disabled as well. s off ...
Относительные и абсолютные показатели
[ редактировать ]Файлы OBJ благодаря своей списковой структуре могут ссылаться на вершины, нормали и т. д. либо по их абсолютному положению (1 представляет первую определенную вершину, N представляет N-ю определенную вершину), либо по их относительному положению (-1 представляет собой последняя определенная вершина). Однако не все программное обеспечение поддерживает последний подход, и, наоборот, некоторые программы по своей сути записывают только последнюю форму (из-за удобства добавления элементов без необходимости пересчета смещений вершин и т. д.), что иногда приводит к несовместимости.
Библиотека шаблонов материалов
[ редактировать ]Расширение имени файла |
.mtl |
---|---|
Тип интернет-СМИ |
модель/MTL [3] |
Магическое число |
|
Разработано | Волновые Технологии |
Тип формата | 3D texture format |
Формат библиотеки шаблонов материалов (MTL) или формат файла .MTL — это формат файла, сопутствующий .OBJ, также определенный Wavefront Technologies , который описывает свойства затенения поверхности (материала) объектов в одном или нескольких файлах .OBJ. Файл .OBJ ссылается на один или несколько файлов .MTL (называемых «библиотеками материалов») и оттуда ссылается на одно или несколько описаний материалов по имени. Файлы .MTL представляют собой текст ASCII , который определяет светоотражающие свойства поверхности для целей компьютерной визуализации и в соответствии с моделью отражения Фонга . Стандарт широко поддерживается различными пакетами компьютерного программного обеспечения, что делает его полезным форматом для обмена материалами.
Формат MTL, хотя и до сих пор широко используется, устарел и не полностью поддерживает более поздние технологии, такие как карты зеркального отражения и карты параллакса . Однако из-за открытого и интуитивно понятного характера формата их можно легко добавить с помощью специального генератора файлов MTL.
Формат MTL определяет ряд форматов. [5] [6]
Основные материалы
[ редактировать ]Одиночный .mtl
файл может определять несколько материалов. Материалы определяются в файле один за другим, каждый начинается с newmtl
команда:
# define a material named 'Colored' newmtl Colored
Окружающий цвет материала объявляется с помощью Ka
. Определения цветов представлены в формате RGB, где значение каждого канала находится в диапазоне от 0 до 1.
# white Ka 1.000 1.000 1.000
Аналогично, диффузный цвет объявляется с помощью Kd
.
# white Kd 1.000 1.000 1.000
Зеркальный цвет объявляется с помощью Ks
и взвешивается с использованием зеркального показателя Ns
.
# black (off) Ks 0.000 0.000 0.000 # ranges between 0 and 1000 Ns 10.000
Материалы могут быть прозрачными . Это называется растворением . В отличие от реальной прозрачности, результат не зависит от толщины объекта. Значение 1,0 для «d» ( растворения ) является значением по умолчанию и означает полную непрозрачность, как и значение 0,0 для «Tr». Растворение работает на всех моделях освещения.
# some implementations use 'd' d 0.9 # others use 'Tr' (inverted: Tr = 1 - d) Tr 0.1
Прозрачные материалы могут дополнительно иметь цвет фильтра пропускания, указанный как «Tf».
# Transmission Filter Color (using R G B) Tf 1.0 0.5 0.5 # Transmission Filter Color (using CIEXYZ) - y and z values are optional and assumed to be equal to x if omitted Tf xyz 1.0 0.5 0.5 # Transmission Filter Color from spectral curve file (not commonly used) Tf spectral <filename>.rfl <optional factor>
Материал также может иметь оптическую плотность своей поверхности. Это также известно как показатель преломления .
# optical density Ni 1.45000
Значения могут находиться в диапазоне от 0,001 до 10. Значение 1,0 означает, что свет не преломляется при прохождении через объект. Увеличение оптической плотности увеличивает величину изгиба. Стекло имеет показатель преломления около 1,5. Значения менее 1,0 дают странные результаты и не являются рекомендуется. [7]
несколько моделей освещения Доступно в зависимости от материала. Обратите внимание, что не требуется устанавливать прозрачную модель освещения, чтобы добиться прозрачности с помощью «d» или «Tr», а в современном использовании модели освещения часто не указываются, даже с прозрачными материалами. Модели освещения перечислены следующим образом:
0. Color on and Ambient off 1. Color on and Ambient on 2. Highlight on 3. Reflection on and Ray trace on 4. Transparency: Glass on, Reflection: Ray trace on 5. Reflection: Fresnel on and Ray trace on 6. Transparency: Refraction on, Reflection: Fresnel off and Ray trace on 7. Transparency: Refraction on, Reflection: Fresnel on and Ray trace on 8. Reflection on and Ray trace off 9. Transparency: Glass on, Reflection: Ray trace off 10. Casts shadows onto invisible surfaces
illum 2
Карты текстур
[ редактировать ]Текстурированные материалы используют те же свойства, что и выше, и дополнительно определяют карты текстур . Ниже приведен пример обычного файла материала. Для получения более подробной информации см. полную ссылку на формат файла Wavefront.
newmtl Textured Ka 1.000 1.000 1.000 Kd 1.000 1.000 1.000 Ks 0.000 0.000 0.000 d 1.0 illum 2 # the ambient texture map map_Ka lemur.tga # the diffuse texture map (most of the time, it will be the same as the # ambient texture map) map_Kd lemur.tga # specular color texture map map_Ks lemur.tga # specular highlight component map_Ns lemur_spec.tga # the alpha texture map map_d lemur_alpha.tga # some implementations use 'map_bump' instead of 'bump' below map_bump lemur_bump.tga # bump map (which by default uses luminance channel of the image) bump lemur_bump.tga # displacement map disp lemur_disp.tga # stencil decal texture (defaults to 'matte' channel of the image) decal lemur_stencil.tga
Операторы карты текстур также могут иметь параметры-опции (см. полную спецификацию ).
# texture origin (1,1,1) map_Ka -o 1 1 1 ambient.tga # spherical reflection map refl -type sphere clouds.tga
Варианты текстур
[ редактировать ]-blendu on | off # set horizontal texture blending (default on) -blendv on | off # set vertical texture blending (default on) -boost float_value # boost mip-map sharpness -mm base_value gain_value # modify texture map values (default 0 1) # base_value = brightness, gain_value = contrast -o u [v [w]] # Origin offset (default 0 0 0) -s u [v [w]] # Scale (default 1 1 1) -t u [v [w]] # Turbulence (default 0 0 0) -texres resolution # texture resolution to create -clamp on | off # only render texels in the clamped 0-1 range (default off) # When unclamped, textures are repeated across a surface, # when clamped, only texels which fall within the 0-1 # range are rendered. -bm mult_value # bump multiplier (for bump maps only) -imfchan r | g | b | m | l | z # specifies which channel of the file is used to # create a scalar or bump texture. r:red, g:green, # b:blue, m:matte, l:luminance, z:z-depth.. # (the default for bump is 'l' and for decal is 'm')
Например,
# says to use the red channel of bumpmap.tga as the bumpmap bump -imfchan r bumpmap.tga
Для карт отражений ...
-type sphere # specifies a sphere for a "refl" reflection map -type cube_top | cube_bottom | # when using a cube map, the texture file for each cube_front | cube_back | # side of the cube is specified separately cube_left | cube_right
Изменения в зависимости от поставщика
[ редактировать ]Из-за простоты анализа файлов и неофициального распространения формата файлов файлы могут содержать изменения, специфичные для конкретного поставщика.
Согласно спецификации, параметры должны предшествовать имени файла текстуры. Однако по крайней мере один поставщик генерирует файлы с опциями в конце.
# bump multiplier of 0.2 bump texbump.tga -bm 0.2
Физический рендеринг
[ редактировать ]Создатели онлайн-инструмента 3D-редактирования и моделирования Clara.io предложили расширить формат MTL, чтобы можно было указывать физически основанного рендеринга карты и параметры (PBR). Это расширение впоследствии было принято в Blender и TinyObjLoader. Карты и параметры расширения PBR: [8]
Pr/map_Pr # roughness Pm/map_Pm # metallic Ps/map_Ps # sheen Pc # clearcoat thickness Pcr # clearcoat roughness Ke/map_Ke # emissive aniso # anisotropy anisor # anisotropy rotation norm # normal map (RGB components represent XYZ components of the surface normal)
Дальнейшие предлагаемые расширения взяты из набора инструментов DirectXMesh для движка Microsoft DirectX , что позволяет определять предварительно скомпилированный материал RMA модели. [9]
map_RMA # RMA material (roughness, metalness, ambient occlusion) map_ORM # alternate definition of map_RMA
См. также
[ редактировать ]- глТФ
- Объектный файл
- ВЫКЛ (формат файла)
- Формат перемещаемого объектного модуля
- STL (формат файла)
- PLY (формат файла) — это альтернативный формат файла, предлагающий большую гибкость, чем большинство для стереолитографии . приложений
Ссылки
[ редактировать ]- ^ Имя подтипа носителя: obj
- ^ «Как включить информацию о цвете вершин в файлы .OBJ?» . Обмен стеками разработки игр . Проверено 8 октября 2014 г.
- ^ Название подтипа носителя: mtl
- ^ «Формат файла библиотеки шаблонов материалов Wavefront (MTL)» . Библиотека Конгресса . 4 октября 2019 г.
- ^ «Файлы MTL — определения материалов для файлов OBJ» . People.sc.fsu.edu. 14 июня 2004 г. Проверено 26 ноября 2010 г.
- ^ «Информация о формате файла Wavefront .mtl — GRIPES and GRUMBLES — Wings — Wings3D — Официальный форум разработчиков — Доска объявлений» . Nendowingsmirai.yuku.com. Июль 2002 года . Проверено 26 ноября 2010 г.
- ^ Рэми, Дайан (1995). «Формат материала MTL (Lightwave, OBJ)» . Алиас-Вэйвфронт, Инк . Проверено 17 мая 2020 г.
- ^ «Бен Хьюстон | Расширение Wavefront MTL для физического рендеринга» . benhouston3d.com .
- ^ «Возможность определять текстуру RMA в MTL OBJ. Автор: MattFiler · Pull Request #39 · microsoft/DirectXMesh» . Гитхаб .