OBJ (o .OBJ) es un formato de archivo de definición de geometría desarrollado inicialmente por Wavefront Technologies para su paquete de animación Advanced Visualizer . El formato de archivo es abierto y ha sido adoptado por otros proveedores de aplicaciones de gráficos 3D.
El formato de archivo OBJ es un formato de datos simple que representa la geometría 3D únicamente, es decir, la posición de cada vértice , la posición UV de cada vértice de coordenadas de textura, las normales de los vértices y las caras que forman cada polígono definido como una lista de vértices y vértices de textura. Los vértices se almacenan en sentido antihorario de forma predeterminada, lo que hace innecesaria la declaración explícita de las normales de las caras. Las coordenadas OBJ no tienen unidades, pero los archivos OBJ pueden contener información de escala en una línea de comentario legible para humanos.
Cualquier cosa que siga a un carácter almohadilla (#) es un comentario.
# esto es un comentario
Un archivo OBJ puede contener datos de vértices, atributos de curvas o superficies de forma libre, elementos, declaraciones de cuerpos de curvas o superficies de forma libre, conectividad entre superficies de forma libre, información de atributos de agrupación y visualización o renderización. Los elementos más comunes son vértices geométricos, coordenadas de textura, normales de vértices y caras poligonales:
# Lista de vértices geométricos, con coordenadas (x, y, z, [w]), w es opcional y el valor predeterminado es 1.0.en 0,123 0,234 0,345 1,0v......# Lista de coordenadas de textura, en coordenadas (u, [v, w]), estas variarán entre 0 y 1. v, w son opcionales y el valor predeterminado es 0.ver 0,500 1 [0]ver ......# Lista de normales de vértices en forma (x,y,z); las normales pueden no ser vectores unitarios .en 0,707 0,000 0,707en ......# Vértices del espacio de parámetros en formato (u, [v, w]); declaración de geometría de forma libre (ver a continuación)vicepresidente 0,310000 3,210000 2,100000vicepresidente......# Elemento de cara poligonal (ver más abajo)el 1 2 33/1 4/2 5/36/4/1 3/5/3 7/6/57//1 8//2 9//3a......# Elemento de línea (ver más abajo)el 5 8 1 2 4 9
Un vértice se especifica mediante una línea que comienza con la letra v
. A continuación, se incluyen las coordenadas (x, y, z [, w]). W es opcional y el valor predeterminado es 1.0. Se utiliza un sistema de coordenadas de la derecha para especificar las ubicaciones de las coordenadas. Algunas aplicaciones admiten colores de vértice, colocando valores de rojo, verde y azul después de xy y z (esto impide especificar w). Los valores de color varían de 0 a 1. [2]
Se puede especificar una declaración de geometría de forma librevp
en una línea que comience con la cadena . Define puntos en el espacio de parámetros de una curva o superficie. u
solo se requiere para puntos de curva, u
y v
para puntos de superficie y puntos de control de curvas de recorte no racionales, y u
, v
y w
(peso) para puntos de control de curvas de recorte racionales.
Las caras se definen mediante listas de índices de vértice, textura y normal en el formato índice_vértice/índice_textura/índice_normal, en el que cada índice comienza en 1 y aumenta según el orden en el que se definió el elemento al que se hace referencia. Los polígonos, como los cuadriláteros, se pueden definir mediante el uso de más de tres índices.
Los archivos OBJ también admiten geometría de forma libre que utiliza curvas y superficies para definir objetos, como superficies NURBS .
Un índice de vértice válido coincide con los elementos de vértice correspondientes de una lista de vértices definida previamente. Si un índice es positivo, se refiere al desplazamiento en esa lista de vértices, comenzando en 1. Si un índice es negativo, se refiere relativamente al final de la lista de vértices, -1 se refiere al último elemento.
Cada cara puede contener tres o más vértices.
....
Opcionalmente, se pueden utilizar índices de coordenadas de textura para especificar las coordenadas de textura al definir una cara. Para agregar un índice de coordenadas de textura a un índice de vértice al definir una cara, se debe colocar una barra inmediatamente después del índice de vértice y luego colocar el índice de coordenadas de textura. No se permiten espacios antes o después de la barra. Un índice de coordenadas de textura válido comienza en 1 y coincide con el elemento correspondiente en la lista de coordenadas de textura definida previamente. Cada cara puede contener tres o más elementos.
y v1/vt1 v2/vt2 v3/vt3 ...
Opcionalmente, se pueden utilizar índices normales para especificar vectores normales para vértices al definir una cara. Para agregar un índice normal a un índice de vértice al definir una cara, se debe colocar una segunda barra después del índice de coordenadas de textura y luego colocar el índice normal. Un índice normal válido comienza en 1 y coincide con el elemento correspondiente en la lista de normales definida previamente. Cada cara puede contener tres o más elementos.
v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3...
Como las coordenadas de textura son opcionales, se puede definir la geometría sin ellas, pero se deben colocar dos barras después del índice del vértice antes de colocar el índice normal.
y v1//vn1 v2//vn2 v3//vn3 ...
Los registros que comienzan con la letra "l" (L minúscula) especifican el orden de los vértices que forman una polilínea.
yo v1 v2 v3 v4 v5 v6 ...
Los archivos Obj admiten superficies de orden superior mediante distintos tipos de interpolación, como Taylor y B-splines, aunque la compatibilidad con esas funciones en lectores de archivos de terceros está lejos de ser universal. Los archivos Obj tampoco admiten jerarquías de mallas ni ningún tipo de animación o deformación, como el recubrimiento de vértices o la transformación de mallas.
Los materiales que describen los aspectos visuales de los polígonos se almacenan en archivos .mtl externos. Se puede hacer referencia a más de un archivo de material MTL externo desde el archivo OBJ. El archivo .mtl puede contener una o más definiciones de materiales con nombre.
mtllib [nombre de archivo .mtl externo]...
Esta etiqueta especifica el nombre del material del elemento que la sigue. El nombre del material coincide con una definición de material con nombre en un archivo .mtl externo.
usemtl [nombre del material]...
Los objetos nombrados y los grupos de polígonos se especifican mediante las siguientes etiquetas.
o [nombre del objeto] ... g [nombre del grupo] ...
El sombreado suave en los polígonos se habilita mediante grupos de suavizado.
el 1 ... # El sombreado suave también se puede desactivar. está apagado ...
Los archivos OBJ, debido a su estructura de lista, pueden hacer referencia a vértices, normales, etc., ya sea por su posición absoluta (1 representa el primer vértice definido, N representa el vértice N definido) o por su posición relativa (-1 representa el último vértice definido). Sin embargo, no todo el software admite este último enfoque y, a la inversa, algunos programas escriben solo la última forma (debido a la conveniencia de agregar elementos sin necesidad de recalcular los desplazamientos de los vértices, etc.), lo que genera incompatibilidades ocasionales.
El formato de biblioteca de plantillas de materiales (MTL) o formato de archivo .MTL es un formato de archivo complementario a .OBJ, también definido por Wavefront Technologies , que describe las propiedades de sombreado de superficies (materiales) de objetos dentro de uno o más archivos .OBJ. Un archivo .OBJ hace referencia a uno o más archivos .MTL (llamados "bibliotecas de materiales") y, a partir de allí, hace referencia a una o más descripciones de materiales por nombre. Los archivos .MTL son texto ASCII que definen las propiedades de reflexión de la luz de una superficie para fines de renderización por computadora y de acuerdo con el modelo de reflexión Phong . El estándar tiene un amplio soporte entre diferentes paquetes de software de computadora, lo que lo convierte en un formato útil para el intercambio de materiales.
El formato MTL, aunque todavía se utiliza ampliamente, está desactualizado y no es totalmente compatible con tecnologías posteriores, como mapas especulares y mapas de paralaje . Sin embargo, debido a la naturaleza abierta e intuitiva del formato, estos pueden agregarse fácilmente con un generador de archivos MTL personalizado.
El formato MTL define varios formatos. [5] [6]
Un único .mtl
archivo puede definir varios materiales. Los materiales se definen uno tras otro en el archivo y cada uno comienza con el newmtl
comando:
# define un material llamado 'Coloreado'newmtl Coloreado
El color ambiental del material se declara mediante Ka
. Las definiciones de color están en RGB, donde el valor de cada canal está entre 0 y 1.
# blanco1.000 1.000 1.000
De manera similar, el color difuso se declara utilizando Kd
.
# blanco1.000 1.000 1.000
El color especular se declara utilizando Ks
y se pondera utilizando el exponente especular Ns
.
# negro (apagado)Ks 0,000 0,000 0,000# varía entre 0 y 100010.000 ns
Los materiales pueden ser transparentes . Esto se conoce como " disolver ". A diferencia de la transparencia real, el resultado no depende del grosor del objeto. Un valor de 1,0 para "d" ( disolver ) es el valor predeterminado y significa que es completamente opaco, al igual que un valor de 0,0 para "Tr". La disolución funciona en todos los modelos de iluminación.
# algunas implementaciones usan 'd'0,9# otros usan 'Tr' (invertido: Tr = 1 - d)Tr0.1
Los materiales transparentes pueden tener además un color de filtro de transmisión, especificado con "Tf".
# Filtro de transmisión de color (usando RGB)Tf 1,0 0,5 0,5# Color del filtro de transmisión (usando CIEXYZ): los valores y y z son opcionales y se supone que son iguales a x si se omitenTfxyz 1.0 0.5 0.5# Filtro de transmisión de color del archivo de curva espectral (no se usa comúnmente)Tf espectral <nombre de archivo>.rfl <factor opcional>
Un material también puede tener una densidad óptica para su superficie. Esto también se conoce como índice de refracción .
# densidad ópticaNi 1,45000
Los valores pueden oscilar entre 0,001 y 10. Un valor de 1,0 significa que la luz no se desvía al atravesar un objeto. Si aumenta la densidad óptica, aumenta la cantidad de desvío. El vidrio tiene un índice de refracción de aproximadamente 1,5. Los valores inferiores a 1,0 producen resultados extraños y no se recomiendan. [7]
Hay varios modelos de iluminación disponibles por material. Tenga en cuenta que no es necesario establecer un modelo de iluminación transparente para lograr transparencia con "d" o "Tr" y, en el uso moderno, los modelos de iluminación a menudo no se especifican, incluso con materiales transparentes. Los modelos de iluminación se enumeran de la siguiente manera:
0. Color activado y ambiente desactivado1. Color activado y ambiente activado2. Resaltar en3. Reflexión sobre y trazado de rayos sobre4. Transparencia: Vidrio activado, Reflexión: Trazado de rayos activado5. Reflexión: Fresnel activado y trazado de rayos activado6. Transparencia: Refracción activada, Reflexión: Fresnel desactivado y Trazado de rayos activado7. Transparencia: Refracción activada, Reflexión: Fresnel activada y Trazado de rayos activado8. Reflexión sobre y trazado de rayos sobre9. Transparencia: vidrio activado, reflexión: trazado de rayos desactivado10. Proyecta sombras sobre superficies invisibles.
Ilum 2
Los materiales texturizados utilizan las mismas propiedades que las anteriores y, además, definen mapas de textura . A continuación, se muestra un ejemplo de un archivo de material común. Consulte la referencia completa del formato de archivo Wavefront para obtener más detalles.
newmtl texturizado 1.000 1.000 1.000 1.000 1.000 1.000 Ks 0,000 0,000 0,000 el 1.0 Ilum 2 # el mapa de textura ambiental mapa_Ka lemur.tga # el mapa de textura difusa (la mayoría de las veces, será el mismo que el # mapa de textura ambiental) Mapa_Kd lemur.tga # mapa de textura de color especular Mapa_Ks lemur.tga # componente de resaltado especular mapa_Ns lemur_spec.tga # el mapa de textura alfa mapa_d lemur_alpha.tga # Algunas implementaciones usan 'map_bump' en lugar de 'bump' a continuación mapa_bump lemur_bump.tga # mapa de relieve (que por defecto utiliza el canal de luminancia de la imagen) golpe lemur_bump.tga # mapa de desplazamiento Disp lémur_disp.tga # Textura de calcomanía de plantilla (predeterminada en el canal 'mate' de la imagen) calcomanía lemur_stencil.tga
Las declaraciones del mapa de textura también pueden tener parámetros de opción (ver especificación completa).
# origen de la textura (1,1,1) map_Ka -o 1 1 1 ambiente.tga # mapa de reflexión esférica Nubes esféricas de tipo refl.tga
-blendu on | off # establece la combinación de texturas horizontales (predeterminado activado)-blendv on | off # establece la combinación de texturas verticales (predeterminado activado)-boost float_value # mejora la nitidez del mapa mip-mm valor_base valor_ganancia # modificar valores del mapa de textura (predeterminado 0 1) # valor_base = brillo, valor_ganancia = contraste-ou [v [w]] # Desplazamiento de origen (predeterminado 0 0 0)-su [v [w]] # Escala (predeterminado 1 1 1)-tu [v [w]] # Turbulencia (predeterminado 0 0 0)-texres resolución # resolución de textura a crear-clamp on | off # solo renderiza texels en el rango restringido 0-1 (desactivado por defecto) # Cuando no están sujetas, las texturas se repiten en toda la superficie, # cuando se sujeta, solo los texels que caen dentro del 0-1 # Se representan los rangos.-bm mult_value # multiplicador de relieve (solo para mapas de relieve)-imfchan r | g | b | m | l | z # especifica qué canal del archivo se utiliza para # crea una textura escalar o de relieve. r:rojo, g:verde, # b:azul, m:mate, l:luminancia, z:profundidad z.. # (el valor predeterminado para bump es 'l' y para decal es 'm')
Por ejemplo,
# dice que se use el canal rojo de bumpmap.tga como el mapa de relievebump-imfchan r bumpmap.tga
Para mapas de reflexión ...
-type sphere # especifica una esfera para un mapa de reflexión "refl" -type cube_top | cube_bottom | # cuando se usa un mapa de cubo, el archivo de textura para cada cube_front | cube_back | # el lado del cubo se especifica por separado cubo_izquierda | cubo_derecha
Debido a la facilidad de análisis de los archivos y la difusión no oficial del formato de archivo, los archivos pueden contener modificaciones específicas del proveedor.
Según la especificación, se supone que las opciones deben preceder al nombre del archivo de textura. Sin embargo, al menos un proveedor genera archivos con opciones al final.
# multiplicador de bump de 0,2golpe texbump.tga -bm 0.2
Los creadores de la herramienta de modelado y edición 3D en línea, Clara.io , propusieron extender el formato MTL para permitir la especificación de mapas y parámetros de renderizado basado en la física (PBR). Esta extensión fue adoptada posteriormente por Blender y TinyObjLoader. Los mapas y parámetros PBR de la extensión son: [8]
Pr/map_Pr # rugosidadPm/map_Pm # metálicoPs/map_Ps # brilloPc # espesor de capa transparentePcr # rugosidad de la capa transparenteKe/map_Ke # emisivoaniso # anisotropíaanisor # rotación de anisotropíanorma # mapa normal (los componentes RGB representan componentes XYZ de la normal de la superficie)
Otras extensiones propuestas provienen del kit de herramientas DirectXMesh para el motor DirectX de Microsoft , lo que permite definir el material RMA precompilado de un modelo. [9]
map_RMA # Material RMA (rugosidad, metalicidad, oclusión ambiental)map_ORM # definición alternativa de map_RMA