Cookie di statistica e di pubblicità
Usiamo cookie di statistica e di pubblicità, entrambi inviati a Google. Rifiutare non cambia niente di quello che vedi.Leggi la pagina sulla privacy
GLTF
Il formato 3D per il web. Geometria, materiale e animazione in un unico file JSON.
GLTF
GLTF è un formato di testo semplice che si apre in qualsiasi editor. Conserva forme e coordinate invece che pixel, quindi resta nitido a qualsiasi dimensione: un logo portato alla misura di un cartellone non perde nulla. Si usa per il web e consegnare un file finito.
L’estensione è .gltf e il nome per esteso è GL Transmission Format. Contano entrambi meno di ciò che il file può contenere, ed è di questo che parla il resto della pagina.
Khronos Group lo ha pubblicato nel 2015. La specifica è glTF 2.0.
L’età serve saperla per un motivo pratico: più un formato è vecchio, più programmi hanno avuto tempo di impararlo.
È pubblicata per intero, quindi la si può implementare partendo dal documento invece che per osservazione: è per questo che il formato compare in così tanti programmi, ed è per questo che file scritti vent’anni fa si aprono ancora. Una specifica pubblicata però non è la stessa cosa di una esente da royalty: dove un formato incapsula un codec, le licenze sui brevetti restano una questione a parte che lo standard non risolve.
GLTF conserva il suo contenuto esattamente. Risalvarlo non cambia nulla, quindi puoi aprirlo, modificarlo e risalvarlo quante volte vuoi senza accumulare danni: è questo che ne fa un formato di lavoro e non di consegna.
GLTF può conservare un’animazione anziché una singola immagine ferma. Vale la pena saperlo prima di convertire: una destinazione che tiene un solo fotogramma si tiene il primo e lascia cadere il resto, di solito senza dirlo.
Blender, three.js e Babylon.js lo leggono, e così fanno quasi tutti i programmi dello stesso tipo.
Quando un file non si apre, il formato è raramente il problema: più spesso è il programma a essere più vecchio di lui. Convertire in qualcosa di più vecchio è la via d’uscita affidabile, ed è a questo che serve il resto di questo sito.
Nessun browser lo legge.
È di gran lunga il motivo più comune per convertirlo: non che il formato sia scadente, ma che il posto in cui vuoi mostrare il file non sappia leggerlo.
GLTF è pensato per essere aperto e modificato. Tieni il file in questo formato per tutto il tempo in cui il lavoro va avanti, ed esporta da lì ogni volta che serve una copia finita.
Gli altri formati 3D di questo sito sono formati di scambio fra programmi di modellazione oppure formati di cattura da scanner. Il glTF non è nessuna delle due cose: il Khronos Group lo ha progettato nel 2015 per inviare una scena già completa a un motore di rendering, in una forma che una scheda grafica può sfruttare quasi direttamente.
È quello che intendevano gli autori chiamandolo il JPEG del 3D. Nessuno modifica un JPEG in uno studio fotografico; è ciò che esce alla fine. Il glTF salva geometria, materiali, texture, animazioni, telecamere e luci ordinati in modo che un visualizzatore possa caricarli e disegnarli con il minimo lavoro intermedio.
Un file .gltf è JSON, ed è leggibile: apritelo e vedrete la gerarchia dei nodi, le definizioni dei materiali e i canali di animazione in campi con nome. Questa leggibilità è un vantaggio reale quando qualcosa appare sbagliato e serve capire perché.
Ciò che il JSON non contiene è il volume dei dati. Le posizioni dei vertici, le normali, le coordinate texture e i fotogrammi chiave dell’animazione vivono in un buffer binario separato, di solito un file .bin accanto, e le texture sono normali PNG o JPEG referenziati per percorso. Un modello è quindi una cartella e non un file, esattamente il problema che il GLB esiste per risolvere.
Il glTF usa un modello di materiale metallico-rugosità: ogni superficie dichiara quanto è metallica, quanto è rugosa, il suo colore base e, facoltativamente, mappe di normali, occlusione ed emissione. Tutti i motori moderni capiscono quel vocabolario, quindi lo stesso modello appare uguale in un browser, in un motore di videogiochi, nel visualizzatore di realtà aumentata di uno smartphone e in un configuratore di prodotto.
È la differenza più marcata rispetto all’OBJ, il cui file MTL compagno descrive un modello di ombreggiatura dei primi anni Novanta, senza alcun posto dove mettere rugosità o metallicità. Un modello esportato in OBJ perde la sua descrizione dei materiali in qualunque senso utile; esportato in glTF la conserva, ed è per questo che la conversione vale la pena ogni volta che il modello va da qualche parte dove viene disegnato invece che modificato.
Il glTF trasporta animazione scheletrica: una gerarchia di articolazioni, i pesi che legano la mesh a esse e canali con fotogrammi chiave di traslazione, rotazione e scala. Porta anche target di deformazione per espressioni facciali e blend shape.
Nient’altro di uso comune sul web fa questo. L’OBJ non ha alcuna animazione, STL e PLY nemmeno, e l’FBX ne ha in abbondanza ma è proprietario e non documentato. Se un modello deve muoversi in una pagina web, il glTF non è una delle opzioni: è l’opzione.
Nei visualizzatori web, prima di tutto: three.js, Babylon.js e l’elemento model-viewer accettano glTF nativamente, e la stragrande maggioranza del 3D presente sul web è un glTF sotto la superficie. I configuratori di prodotto e i visualizzatori e-commerce sono l’applicazione commerciale.
Poi la realtà aumentata su Android, che lo usa direttamente tramite Scene Viewer, e le librerie di risorse, Sketchfab, Poly Haven o gli stessi modelli di esempio di Khronos, che pubblicano in questo formato perché funziona ovunque senza conversione. Blender, Unity, Unreal, Godot, Substance e Cinema 4D lo importano e lo esportano.
La specifica ha un meccanismo di estensione definito, e due contano nella pratica. Draco comprime la geometria, spesso fino a un quinto o un decimo della dimensione, il che su una pagina web è la differenza fra un caricamento istantaneo e un’attesa visibile. KTX2 con Basis Universal fa lo stesso con le texture e permette anche alla scheda grafica di mantenerle compresse in memoria.
Il tranello è che un’estensione non implementata dal visualizzatore rende il file inutilizzabile lì. I glTF compressi con Draco falliscono all’apertura in alcuni strumenti datati, quindi è un’ottimizzazione del momento della consegna e non qualcosa da applicare all’originale di lavoro. Conservate la versione non compressa e comprimete in uscita.
Il convertitore di questo sito lavora su un modello interno che salva dove stanno i triangoli e il nome di ciascuna mesh, e nient’altro. Non c’è alcun posto dove mettere un colore, una coordinata texture, una normale o un fotogramma chiave, quindi convertendo un glTF restano fuori materiali, texture e le loro UV, normali, colori per vertice, telecamere, luci, animazione, scheletro, target di deformazione e il grafo di scena stesso. Le trasformazioni dei nodi non si perdono: vengono cotte nelle coordinate dei vertici.
Ci sono tre rifiuti espliciti da conoscere in anticipo, perché compaiono come un errore e non come un risultato peggiore. Un .gltf che punta a un .bin esterno viene rifiutato, con un messaggio che suggerisce di convertire il GLB al suo posto, perché il file separato non porta dentro la geometria. La compressione Draco viene rifiutata. E vengono lette solo le primitive di triangoli: strisce, ventagli, linee e punti vengono saltati. Quando qui viene scritto un .gltf, il buffer viene incorporato come URI di dati in base64, così il risultato è un unico file autonomo.
Da OBJ, STL o PLY verso glTF la geometria arriva pulita e i materiali semplicemente non esistevano per arrivare: una mesh spoglia arriva come mesh spoglia, e perché sembri qualcosa bisogna assegnarle materiali in seguito.
Verso OBJ o STL aspettatevi una perdita proporzionale a ciò che il glTF portava sopra, con due dettagli concreti del convertitore: STL e PLY fondono tutte le mesh in una sola perdendo i nomi, l’STL viene scritto sempre in binario e il PLY sempre in testo. I poligoni con più di tre lati vengono triangolati a ventaglio, corretto sulle facce convesse e non su quelle concave. Scendete di formato solo quando qualcosa lo richiede davvero: una stampante 3D per l’STL, uno strumento di modellazione datato per l’OBJ.
| Estensione | .gltf |
|---|---|
| Tipo di media | model/gltf+json |
| Pubblicato da | Khronos Group |
| Prima pubblicazione | 2015 |
| Specifica | glTF 2.0 |