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
GLTF
El formato 3D para la web. Geometría, material y animación en un solo archivo JSON.
GLTF
GLTF 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 la web y entregar un archivo terminado.
La extensión es .gltf y el nombre completo, GL Transmission Format. Ambos importan menos que lo que el archivo puede contener, y de eso trata el resto de esta página.
Khronos Group lo publicó en 2015. La especificación es glTF 2.0.
La edad interesa por un motivo práctico: cuanto más antiguo es un formato, más programas han tenido tiempo de aprenderlo.
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.
GLTF 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.
GLTF puede guardar una animación en lugar de una sola imagen fija. Conviene saberlo antes de convertir: un destino que solo admite un fotograma se queda con el primero y descarta el resto, casi siempre sin decirlo.
Blender, three.js y Babylon.js 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.
GLTF 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.
Los demás formatos 3D de esta web son o formatos de intercambio entre programas de modelado o formatos de captura de escáneres. glTF no es ninguna de las dos cosas: el Khronos Group lo diseñó en 2015 para enviar una escena ya terminada a un motor de dibujo, en una forma que una tarjeta gráfica puede aprovechar casi directamente.
Eso es lo que querían decir sus autores al llamarlo el JPEG del 3D. Nadie edita un JPEG en un estudio fotográfico; es lo que sale al final. glTF guarda geometría, materiales, texturas, animaciones, cámaras y luces ordenados de manera que un visor pueda cargarlos y dibujarlos con el mínimo trabajo intermedio.
Un archivo .gltf es JSON, y es legible: ábrelo y verás la jerarquía de nodos, las definiciones de material y los canales de animación en campos con nombre. Esa legibilidad es una ventaja real cuando algo se ve mal y hay que averiguar por qué.
Lo que el JSON no contiene es el volumen. Las posiciones de los vértices, las normales, las coordenadas de textura y los fotogramas clave de la animación viven en un búfer binario aparte, normalmente un archivo .bin al lado, y las texturas son PNG o JPEG corrientes referenciados por ruta. Un modelo es por tanto una carpeta y no un archivo, que es exactamente el problema que GLB existe para resolver.
glTF usa un modelo de material metálico-rugosidad: cada superficie declara cuánto tiene de metal, cuánto de rugosa, su color base y, opcionalmente, mapas de normales, de oclusión y de emisión. Todos los motores modernos entienden ese vocabulario, así que el mismo modelo se ve igual en un navegador, en un motor de videojuego, en el visor de realidad aumentada de un móvil y en un configurador de producto.
Es la diferencia más marcada con OBJ, cuyo archivo MTL compañero describe un modelo de sombreado de principios de los noventa, sin ningún sitio donde poner la rugosidad ni el carácter metálico. Un modelo exportado a OBJ pierde su descripción de materiales en cualquier sentido útil; exportado a glTF la conserva, y por eso la conversión merece la pena siempre que el modelo vaya a algún sitio donde se dibuje en lugar de editarse.
glTF transporta animación esquelética: una jerarquía de articulaciones, los pesos que atan la malla a ellas y canales con fotogramas clave de traslación, rotación y escala. También lleva objetivos de deformación para expresiones faciales y mezclas de forma.
Nada más de uso común en la web hace eso. OBJ no tiene animación en absoluto, STL y PLY tampoco, y FBX tiene de sobra pero es propietario y no está documentado. Si un modelo tiene que moverse en una página web, glTF no es una de las opciones: es la opción.
En los visores web, lo primero: three.js, Babylon.js y el elemento model-viewer aceptan glTF de forma nativa, y la inmensa mayoría del 3D que hay en páginas web es un glTF por debajo. Los configuradores de producto y los visores de comercio electrónico son la aplicación comercial.
Después, la realidad aumentada en Android, que lo usa directamente a través de Scene Viewer, y las bibliotecas de recursos, Sketchfab, Poly Haven o los propios modelos de ejemplo de Khronos, que publican en él porque es el formato que funciona en todas partes sin conversión. Blender, Unity, Unreal, Godot, Substance y Cinema 4D lo importan y lo exportan.
La especificación tiene un mecanismo de extensión definido, y dos importan en la práctica. Draco comprime la geometría, a menudo hasta una quinta o una décima parte de su tamaño, lo que en una página web es la diferencia entre una carga instantánea y una espera visible. KTX2 con Basis Universal hace lo mismo con las texturas y además permite que la tarjeta gráfica las mantenga comprimidas en memoria.
La trampa es que una extensión que el visor no implemente deja el archivo inservible allí. Los glTF comprimidos con Draco fallan al abrirse en algunas herramientas antiguas, así que es una optimización del momento de la entrega y no algo que aplicar al original de trabajo. Guarda la versión sin comprimir y comprime al salir.
El conversor de esta web trabaja sobre un modelo interno que guarda dónde están los triángulos y el nombre de cada malla, y nada más. No hay ningún sitio donde poner un color, una coordenada de textura, una normal o un fotograma clave, así que al convertir un glTF se quedan fuera los materiales, las texturas y sus UV, las normales, los colores por vértice, las cámaras, las luces, la animación, el esqueleto, los objetivos de deformación y el propio grafo de escena. Las transformaciones de los nodos no se pierden: se hornean en las coordenadas de los vértices.
Hay tres negativas explícitas que conviene conocer de antemano, porque aparecen como un error y no como un resultado peor. Un .gltf que apunte a un .bin externo se rechaza, con un mensaje que te dice que conviertas el GLB en su lugar, porque el archivo suelto no lleva la geometría dentro. La compresión Draco se rechaza. Y solo se leen las primitivas de triángulos: las tiras, los abanicos, las líneas y los puntos se omiten. Cuando aquí se escribe un .gltf, el búfer se incrusta como URI de datos en base64, de modo que el resultado es un único archivo autónomo.
Desde OBJ, STL o PLY hacia glTF la geometría llega limpia y los materiales sencillamente no existían para llegar: una malla desnuda llega como malla desnuda, y para que parezca algo hay que asignarle materiales después.
Hacia OBJ o STL espera una pérdida proporcional a lo que el glTF llevaba encima, y con dos detalles concretos del conversor: STL y PLY funden todas las mallas en una sola y pierden los nombres, el STL se escribe siempre en binario y el PLY siempre en texto. Los polígonos con más de tres lados se triangulan en abanico, que es correcto en caras convexas y no lo es en las cóncavas. Baja de formato solo cuando algo lo exija de verdad: una impresora 3D para el STL, una herramienta de modelado antigua para el OBJ.
| Extensión | .gltf |
|---|---|
| Tipo de medio | model/gltf+json |
| Publicado por | Khronos Group |
| Primera publicación | 2015 |
| Especificación | glTF 2.0 |
Blender lo importa, igual que Unity, Unreal, Godot y la mayoría de las herramientas de modelado. Para echarle un vistazo rápido sirven el visor 3D de Windows y muchos visores web. Recuerda que un .gltf suele necesitar su .bin y sus texturas al lado.
El empaquetado. Un .gltf es JSON que referencia un búfer binario y unos archivos de textura aparte, así que el modelo es una carpeta. Un .glb mete todo eso en un único archivo binario. El contenido es el mismo; GLB es lo que se envía. Eso sí, pasar aquí de uno a otro no es un reempaquetado: el conversor solo transporta la geometría, así que también en esa dirección se quedan fuera los materiales, las texturas y la animación.
Las texturas son archivos aparte referenciados por ruta y no viajaron con el JSON, el mismo fallo que enviar un OBJ sin su MTL. Usa GLB, que empaqueta todo en un archivo, o manda la carpeta entera.
OBJ es un formato de intercambio entre programas de modelado y sus materiales describen un sombreado de principios de los noventa. glTF es un formato de entrega con materiales basados en física, animación, esqueleto y jerarquía de escena, ordenado para que un motor lo dibuje casi directamente.
Sí: animación esquelética con articulaciones y pesos, transformaciones con fotogramas clave y objetivos de deformación para expresiones faciales. Nada más de uso común en la web la lleva, porque OBJ, STL y PLY no tienen animación alguna.
Aquí no: los archivos con Draco se rechazan de forma explícita, igual que un .gltf que apunte a un .bin externo, para el que el mensaje te pide convertir el GLB. Descomprime el modelo con las herramientas de glTF o parte del GLB sin comprimir.