Articulo de referencia

Archivo Wavefront .obj

[https://www.iana.org/assignments/media-types/model/obj Media subtype name: obj] "},"type code":{"wt":""},"uniform type":{"wt":""},"magic":{"wt":""},"owner":{"wt":"[[Wavefront T...

OBJ (o .OBJ) es un formato de archivo de definición de geometría desarrollado originalmente por Wavefront Technologies para el paquete de animación Advanced Visualizer . Es un formato de archivo 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 únicamente la geometría 3D: la posición de cada vértice , la coordenada UV de cada vértice de textura, las normales de los vértices y las caras que componen cada polígono, definidas como una lista de vértices y vértices de textura. Por defecto, los vértices se almacenan en sentido contrario a las agujas del reloj, 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.

Formato de archivo

Todo lo que sigue al carácter de almohadilla (#) es un comentario.

# Este es un comentario.

Un archivo OBJ puede contener datos de vértices, atributos de curvas/superficies de forma libre, elementos, declaraciones de cuerpos de curvas/superficies de forma libre, conectividad entre superficies de forma libre, agrupación e información de atributos de visualización/renderizado. Los elementos más comunes son los vértices geométricos, las coordenadas de textura, las normales de los vértices y las caras poligonales.

# Lista de vértices geométricos, con coordenadas (x, y, z, [w]), w es opcional y por defecto es 1.0. v 0,123 0,234 0,345 1,0 v ... ... # Lista de coordenadas de textura, en coordenadas (u, [v, w]), que variarán entre 0 y 1. v, w son opcionales y por defecto son 0. vt 0.500 1 [0] vt ... ... # Lista de normales de vértice en formato (x,y,z); las normales podrían no ser vectores unitarios . vn 0,707 0,000 0,707 vn ... ... # Vértices del espacio de parámetros en forma (u, [v, w]); enunciado de geometría de forma libre (ver más abajo) vp 0,310000 3,210000 2,100000 vicepresidente... ... # Elemento de cara poligonal (ver abajo) 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 ... ... # Elemento de línea (ver abajo) l 5 8 1 2 4 9

vértice geométrico

Un vértice se especifica mediante una línea que comienza con la letra v. A continuación, se indican las coordenadas (x,y,z[,w]). W es opcional y su valor predeterminado es 1.0. W escala el punto. El punto (x,y,z,w) corresponde al punto (x/w,y/w,z/w). Se utiliza un sistema de coordenadas diestro para especificar las ubicaciones de las coordenadas. Algunas aplicaciones admiten colores para los vértices, colocando valores de rojo, verde y azul después de xy y z (esto impide especificar w). Los valores de color van de 0 a 1. [ 2 ]

vértices del espacio de parámetros

Una declaración de geometría de forma libre se puede especificar en una línea que comience con la cadena vp. Defina puntos en el espacio de parámetros de una curva o superficie. uSolo se requiere para los puntos de la curva, uy vpara los puntos de la superficie y los puntos de control de las curvas de recorte no racionales, y u, vy w(peso) para los puntos de control de las curvas de recorte racionales.

Elementos faciales

Las caras se definen mediante listas de índices de vértice, textura y normal en el formato índice_vértice/índice_textura/índice_normal, donde cada índice comienza en 1 y aumenta según el orden en que se definió el elemento referenciado. Los polígonos, como los cuadriláteros, pueden definirse utilizando 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 las superficies NURBS .

Índices de vértices

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 al final de la lista de vértices, donde -1 se refiere al último elemento.

Cada cara puede contener tres o más vértices.

f v1 v2 v3 ...

Índices de coordenadas de textura de vértice

Opcionalmente, se pueden usar índices de coordenadas de textura para especificar las coordenadas de textura al definir una cara. Para agregar un índice de coordenada de textura a un índice de vértice al definir una cara, se debe colocar una barra diagonal inmediatamente después del índice del vértice y luego el índice de coordenada de textura. No se permiten espacios antes ni después de la barra diagonal. Un índice de coordenada 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.

f v1/vt1 v2/vt2 v3/vt3 ...

índices normales de vértice

Opcionalmente, se pueden usar índices normales para especificar vectores normales para los 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 diagonal después del índice de coordenadas de textura y luego 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...

Índices de normales de vértice sin índices de coordenadas de textura

Como las coordenadas de textura son opcionales, se puede definir la geometría sin ellas, pero hay que poner dos barras diagonales después del índice del vértice antes de poner el índice de la normal.

f v1//vn1 v2//vn2 v3//vn3 ...

Elementos de línea

Los registros que comienzan con la letra "l" (l minúscula) especifican el orden de los vértices que forman una polilínea.

l v1 v2 v3 v4 v5 v6 ...

Otros formatos geométricos

Los archivos OBJ admiten superficies de orden superior mediante varios tipos de interpolación, como Taylor y B-splines [ 3 ], aunque la compatibilidad con estas funciones en lectores de archivos de terceros dista mucho de ser universal. Los archivos OBJ tampoco admiten jerarquías de malla ni ningún tipo de animación o deformación, como el skinning de vértices o la transformación de malla.

Materiales de referencia

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 material con nombre.

mtllib [nombre de archivo .mtl externo] ...

Esta etiqueta especifica el nombre del material para el 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 con nombre y los grupos de polígonos se especifican mediante las siguientes etiquetas.

o [nombre del objeto] ... g [nombre del grupo] ...

El sombreado uniforme en los polígonos se habilita mediante grupos de suavizado.

s 1 ... # El sombreado suave también se puede desactivar. se apaga ...

Índices relativos y absolutos

Los archivos OBJ, debido a su estructura de lista, pueden referenciar vértices, normales, etc., ya sea por su posición absoluta (1 representa el primer vértice definido, N el enésimo) o por su posición relativa (-1 representa el último vértice definido). Sin embargo, no todos los programas admiten este último método, y, a la inversa, algunos programas solo escriben de esta forma (debido a la comodidad de agregar elementos sin necesidad de recalcular los desplazamientos de los vértices, etc.), lo que puede generar incompatibilidades ocasionales.

Biblioteca de plantillas de Material Design

El formato de biblioteca de plantillas de materiales (MTL) o formato de archivo .MTL es un formato de archivo complementario de .OBJ, también definido por Wavefront Technologies , que describe las propiedades de sombreado de superficie (material) de los 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 ahí, 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 renderizado por computadora , y de acuerdo con el modelo de reflexión de Phong . El estándar cuenta con un amplio soporte entre diferentes paquetes de software, lo que lo convierte en un formato útil para el intercambio de materiales.

El formato MTL, aunque todavía se usa ampliamente, está obsoleto y no es totalmente compatible con tecnologías más recientes como los mapas especulares y los mapas de paralaje . Sin embargo, debido a la naturaleza abierta e intuitiva del formato, estas funciones se pueden agregar fácilmente con un generador de archivos MTL personalizado.

El formato MTL define varios formatos. [ 6 ] [ 7 ]

Materiales básicos

Un único .mtlarchivo puede definir varios materiales. Los materiales se definen uno tras otro en el archivo, cada uno comenzando con el newmtlcomando:

# define un material llamado 'Colored' nuevomtl de color

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.

# blanco Ka 1.000 1.000 1.000

De manera similar, el color difuso se declara usando Kd.

# blanco Kd 1.000 1.000 1.000

El color especular se declara usando Ks, y se pondera usando el exponente especularNs .

# negro (apagado) Ks 0,000 0,000 0,000 # varía entre 0 y 1000 Ns 10.000

Los materiales pueden ser transparentes . Esto se conoce como disolución . 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 opacidad total, al igual que un valor de 0.0 para "Tr". La disolución funciona con todos los modelos de iluminación.

# algunas implementaciones usan 'd' d 0,9 # Otros usan 'Tr' (invertido: Tr = 1 - d) Tr 0.1

Los materiales transparentes pueden tener adicionalmente un color de filtro de transmisión, especificado con "Tf".

# Color del filtro de transmisión (usando RGB) Tf 1.0 0.5 0.5 # Color del filtro de transmisión (usando CIEXYZ): los valores de y y z son opcionales y se asume que son iguales a x si se omiten. Tf xyz 1.0 0.5 0.5 # Color del filtro de transmisión a partir 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 en su superficie. Esto también se conoce como índice de refracción .

# densidad óptica Ni 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. Al aumentar la densidad óptica, aumenta la desviación. El vidrio tiene un índice de refracción de aproximadamente 1,5. Valores inferiores a 1,0 producen resultados extraños y no se recomiendan. [ 8 ]

Existen varios modelos de iluminación disponibles para cada material. Cabe destacar que no es necesario configurar un modelo de iluminación transparente para lograr la transparencia con "d" o "Tr", y en el uso actual, los modelos de iluminación a menudo no se especifican, incluso con materiales transparentes. Los modelos de iluminación se enumeran a continuación:

0. Color activado y ambiente desactivado. 1. Color encendido y ambiente encendido 2. Resaltar en 3. Reflexión y trazado de rayos 4. Transparencia: Cristal activado, Reflexión: Trazado de rayos activado 5. Reflexión: Fresnel activado y trazado de rayos activado. 6. Transparencia: Refracción activada, Reflexión: Fresnel desactivado y Trazado de rayos activado. 7. Transparencia: Refracción activada, Reflexión: Fresnel activada y Trazado de rayos activado 8. Reflexión activada y trazado de rayos desactivado. 9. Transparencia: Cristal activado, Reflexión: Trazado de rayos desactivado 10. Proyecta sombras sobre superficies invisibles.
Ilustración 2

Mapas de texturas

Los materiales texturizados utilizan las mismas propiedades que las descritas anteriormente y, además, definen mapas de texturas . A continuación, se muestra un ejemplo de un archivo de material común. Consulte la referencia completa del formato de archivo de Wavefront para obtener más detalles.

newmtl texturizado Ka 1.000 1.000 1.000 Kd 1.000 1.000 1.000 Ks 0,000 0,000 0,000 d 1.0 Ilustración 2 # el mapa de texturas ambientales mapa_Ka lemur.tga # el mapa de textura difusa (la mayoría de las veces será el mismo que el # mapa de texturas ambientales) mapa_Kd lémur.tga # mapa de textura de color especular mapa_Ks lémur.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) bump lemur_bump.tga # mapa de desplazamiento mostrar lémur_disp.tga # Textura de calcomanía de plantilla (por defecto, se utiliza el canal 'mate' de la imagen) calcomanía lemur_plantilla.tga

Las declaraciones de mapas de texturas también pueden tener parámetros opcionales (consulte la especificación completa ).

 # origen de la textura (1,1,1) map_Ka -o 1 1 1 ambient.tga # mapa de reflexión esférica nubes esféricas de tipo refl.tga

Opciones de textura

-blendu on | off # establece la mezcla de texturas horizontales (activada por defecto) -blendv on | off # establece la mezcla de texturas verticales (activada por defecto) -boost float_value # aumenta la nitidez del mip-map -mm valor_base valor_ganancia # modifica los valores del mapa de texturas (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 resolution # resolución de textura a crear -clamp on | off # renderiza solo los texeles en el rango limitado de 0 a 1 (desactivado por defecto) # Cuando se liberan las restricciones, las texturas se repiten en toda la superficie, # cuando se limita, solo los texeles que caen dentro del rango 0-1 # rango se renderiza. -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,

# indica que se utilice el canal rojo de bumpmap.tga como mapa de relieve bump -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 utiliza un mapa cúbico, el archivo de textura para cada cube_front | cube_back | # el lado del cubo se especifica por separado cubo_izquierdo | cubo_derecho 

Modificaciones específicas del proveedor

Debido a la facilidad para analizar los archivos y a la difusión no oficial del formato de archivo, estos pueden contener modificaciones específicas del proveedor.

Según las especificaciones, las opciones deberían preceder al nombre del archivo de textura. Sin embargo, al menos un proveedor genera archivos con las opciones al final.

# multiplicador de incremento de 0,2 bump texbump.tga -bm 0.2

Renderizado basado en la física

Los creadores de la herramienta de edición y modelado 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: [ 9 ]

Pr/map_Pr # rugosidad Pm/map_Pm # metálico Ps/map_Ps # brillo Espesor de la capa transparente de Pc # Rugosidad de la capa transparente de PCR # Ke/map_Ke # emisivo aniso # anisotropía anisor # rotación de anisotropía norma # mapa normal (los componentes RGB representan los componentes XYZ de la normal de la superficie) 

Otras extensiones propuestas provienen del kit de herramientas DirectXMesh para el motor DirectX de Microsoft , que permite definir el material RMA precompilado de un modelo. [ 10 ]

map_RMA # Material RMA (rugosidad, metalicidad, oclusión ambiental) map_ORM # definición alternativa de map_RMA 

Véase también

Referencias

  1. Nombre del subtipo de medio: obj
  2. "¿Cómo puedo incluir información de color de vértice en archivos .OBJ?" . Game Development Stack Exchange . Archivado del original el 14-10-2014 . Recuperado el 08-10-2014 .
  3. "Wavefront OBJ: Resumen de la Enciclopedia de Formatos de Archivos Gráficos" . www.fileformat.info . Archivado del original el 14 de enero de 2025. Consultado el 13 de febrero de 2025 .
  4. "Nombre del subtipo de medio: mtl" . Archivado del original el 12 de abril de 2021. Consultado el 28 de abril de 2021 .
  5. "Formato de archivo de la biblioteca de plantillas de material de frente de onda (MTL)" . Biblioteca del Congreso . 4 de octubre de 2019. Archivado del original el 12 de abril de 2021. Consultado el 29 de abril de 2021 .
  6. "Archivos MTL - Definiciones de materiales para archivos OBJ" . People.sc.fsu.edu. 14 de junio de 2004. Archivado del original el 13 de junio de 2010. Consultado el 26 de noviembre de 2010 .
  7. "Información sobre el formato de archivo Wavefront .mtl - QUEJAS y QUEJAS - Wings - Wings3D - Foro oficial de desarrollo - Tablero de mensajes" . Nendowingsmirai.yuku.com. Julio de 2002. Archivado del original el 18 de julio de 2011. Consultado el 26 de noviembre de 2010 .
  8. Ramey, Diane (1995). "Formato de material MTL (Lightwave, OBJ)" . Alias-Wavefront, Inc. Archivado del original el 12 de noviembre de 2016. Recuperado el 17 de mayo de 2020 .
  9. "Ben Houston | Ampliando Wavefront MTL para renderizado basado en la física" . benhouston3d.com .
  10. "Capacidad para definir textura RMA en MTL de OBJ. por MattFiler · Solicitud de extracción n.° 39 · microsoft/DirectXMesh" . GitHub .
  • Apéndice B1. Archivos de objeto (.obj), Manual del Visualizador Avanzado
  • Especificación Mtl
  • Herramientas, bibliotecas y archivos de ejemplo
  • FileFormat.Info: Resumen del formato de archivo OBJ de Wavefront