Cookies de estadística y publicidad
Usamos cookies de estadística y de publicidad, y ambas van a Google. Si rechazas, para ti no cambia nada visible.Ir a la página de privacidad
OBJ
Un formato de malla 3D en texto plano que lee cualquier programa de modelado.
OBJ
OBJ es un formato de texto plano que se abre en cualquier editor. Guarda formas y coordenadas en lugar de píxeles, así que se mantiene nítido a cualquier tamaño: un logotipo llevado al tamaño de una valla publicitaria no pierde nada. Se usa para mover datos entre programas y la edición.
La extensión es .obj y el nombre completo, Wavefront Object. Ambos importan menos que lo que el archivo puede contener, y de eso trata el resto de esta página.
Wavefront Technologies lo publicó en 1992.
A un formato que lleva tanto tiempo siendo legible se le puede confiar algo que quieras recuperar dentro de diez años.
Está publicada entera, así que cualquiera puede implementarla leyendo el documento en vez de a base de inspeccionar archivos. Por eso aparece en tantos programas, y por eso los archivos escritos hace veinte años siguen abriéndose hoy. Publicada no quiere decir libre de regalías: cuando un formato envuelve un códec, la licencia de las patentes es un asunto aparte que la norma no resuelve.
OBJ guarda su contenido exactamente. Volver a guardarlo no cambia nada, así que puedes abrirlo, editarlo y guardarlo tantas veces como quieras sin acumular daño; eso es lo que lo convierte en un formato de trabajo y no de entrega.
Blender, MeshLab y Maya lo leen, y también la mayoría de programas del mismo tipo.
Cuando un archivo no se abre, el formato rara vez es el problema: lo más habitual es que el programa sea anterior al formato. Convertir a algo más antiguo es la salida fiable, y para eso está el resto de este sitio.
Ningún navegador lo lee.
Ese es el motivo más frecuente para convertirlo: no que el formato sea malo, sino que el sitio donde quieres mostrar el archivo no sabe leerlo.
OBJ está pensado para abrirse y cambiarse. Guarda el archivo en este formato mientras el trabajo siga en marcha y exporta desde él cada vez que haga falta una copia terminada.
OBJ es el mínimo común denominador del 3D desde 1992. Lo importan todos los programas de modelado, todos los motores de juego, todos los motores de render y todos los visores en línea, cosa que no es cierta de ningún otro formato de malla, y sobrevive solo con eso: la especificación tiene más de treinta años, le faltan funciones que cualquier otro tiene, y nada de eso importa cuando la pregunta es si la otra persona podrá abrir el archivo.
Es texto plano, que es la otra mitad del atractivo. Un vértice es una línea que empieza por `v` seguida de tres números; una cara es una línea que empieza por `f` seguida de los vértices que une. Puedes abrir un modelo en un editor de texto y entenderlo, lo cual en un formato 3D es lo bastante raro como para mencionarlo.
Un OBJ contiene geometría y nada más. Los colores, los materiales y las texturas viven en un archivo `.mtl` aparte que el OBJ nombra en sus primeras líneas, y las imágenes de textura son a su vez archivos independientes, nombrados por el MTL.
Así que un modelo es en realidad una carpeta: un `.obj`, un `.mtl` y tantas imágenes como haga falta. Envía solo el `.obj` —cosa que se hace constantemente, porque es el archivo con el nombre reconocible— y quien lo reciba verá geometría gris sin texturizar. Es con diferencia el problema más frecuente del formato, y la solución es enviarlo todo o comprimir la carpeta.
Una textura es una imagen plana, y el modelo tiene que decir qué parte de esa imagen corresponde a qué parte de la superficie. Eso son las coordenadas UV: un segundo juego de números, un par por vértice, que proyecta la malla sobre el dibujo.
Se guardan dentro del propio OBJ, así que viajan con él aunque los materiales no lo hagan. Merece la pena saberlo cuando un modelo llega sin textura: si las UV están intactas, volver a enganchar una imagen es cosa de dos minutos en cualquier programa de modelado. Si se exportó sin ellas, alguien tiene que desplegar la malla otra vez, y eso ya es trabajo de verdad.
Los números de un OBJ no llevan dimensión pegada. Un cubo de diez unidades de lado pueden ser diez milímetros, diez centímetros o diez metros, y el archivo no lo dice: cada programa aplica su propia suposición al importar, y por eso un modelo llega o microscópico o del tamaño de un edificio.
Con la orientación pasa lo mismo. Hay software que trata la Y como vertical y software que trata la Z, y el formato no toma partido, de modo que los modelos llegan tumbados de lado con toda normalidad. Los dos problemas se arreglan en segundos escalando y rotando al importar, y los dos conviene comprobarlos antes de medir o de imprimir nada.
Guardar cada coordenada como texto decimal cuesta muchísimo espacio. La misma malla en STL o PLY binarios ocupa entre tres y cinco veces menos, y un escaneo detallado exportado como OBJ puede irse a cientos de megabytes.
También se comprime extraordinariamente bien, por el mismo motivo: un OBJ dentro de un ZIP se queda en una fracción de su tamaño, porque el texto decimal es enormemente redundante. Para transferir o archivar un modelo, comprimirlo sale casi gratis y quita buena parte de la objeción al formato.
Ni animación, ni esqueleto, ni jerarquía de escena, ni cámaras o luces, ni un modelo de material moderno: el formato MTL describe un planteamiento de sombreado de principios de los noventa, así que los mapas de metalicidad y rugosidad no tienen sitio propio y se pasan por convención en lugar de por especificación.
Por eso existe glTF y por eso las cadenas de producción de videojuegos lo usan en su lugar. OBJ sirve para pasar una forma estática de un programa a otro, y eso lo hace mejor que nadie. Para un personaje con esqueleto, una escena animada o materiales físicamente basados, es el archivo equivocado.
Los laminadores aceptan OBJ, y la geometría pasa a STL sin problemas porque STL es un subconjunto estricto de lo que OBJ sabe expresar: triángulos y nada más. Lo que importa es si la malla es estanca —cada arista compartida por exactamente dos caras, sin agujeros y sin normales invertidas.
Los modelos hechos para renderizar con frecuencia no lo son. Una superficie sin grosor se ve perfecta en el visor y es imposible de imprimir, porque el laminador no puede decidir qué queda dentro. Pasar el archivo por una herramienta de reparación antes de imprimir atrapa la mayoría de estos casos, y es más rápido que descubrir el problema después de cuatro horas de impresora.
La geometría, y muy poco más. El conversor lleva vértices y triángulos de un formato a otro, con las transformaciones de los nodos horneadas ya en las coordenadas de los vértices, de modo que un modelo colocado varias veces en una escena vuelve con cada copia fijada en su posición. Materiales, colores, texturas, coordenadas UV, normales, cámaras, luces, animación y la jerarquía de la escena no se llevan en ninguna dirección, ni siquiera entre dos formatos que sabrían guardarlos.
Los detalles concretos merecen decirse. Hacia STL y PLY, todas las mallas del archivo se fusionan en una sola y los nombres se pierden; el STL se escribe siempre binario y el PLY siempre en texto. Un glTF que apunte a un `.bin` externo se rechaza con un aviso que sugiere convertir el GLB en su lugar, la compresión Draco se rechaza también, y de las primitivas solo se leen los triángulos: las tiras, los abanicos, las líneas y los puntos se saltan. Los polígonos se triangulan en abanico, que es correcto en caras convexas y no lo es en cóncavas. Todo el proceso ocurre dentro de tu navegador, con un tope de 100 MB por archivo y sin que la malla se suba a ninguna parte.
| Extensión | .obj |
|---|---|
| Tipo de medio | model/obj |
| Publicado por | Wavefront Technologies |
| Primera publicación | 1992 |