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
Qui converti GLTF in OBJ gratis e senza account: trascina il file qui sopra e in un paio di secondi il risultato è pronto da scaricare. La conversione avviene dentro il tuo browser, quindi il file non viene mai caricato. Funziona allo stesso modo su Windows, macOS e Linux e anche su iPhone e Android, e continua a funzionare anche se stacchi la connessione.
Fino a 100 file alla volta. Formati diversi insieme non sono un problema.
Vengono convertiti uno dopo l’altro e scaricati insieme in uno ZIP.
GLTF in OBJ
Entrambi i formati sono testo, e quella somiglianza è ingannevole. Aprire un .gltf dà un documento JSON in cui i dati dei vertici sono una stringa base64 su un buffer, affettati da offset di byte registrati nelle viste di buffer, interpretati dagli accessor che dichiarano un tipo di componente e un tipo di elemento. Quattro indirezioni stanno tra il file e una coordinata, e leggerne una a mano è davvero tedioso.
Un OBJ non ha nulla di tutto ciò. Una riga che inizia con v è un vertice e i tre numeri dopo sono le sue coordinate. Una riga che inizia con f è un triangolo e i tre numeri dopo sono indici nell’elenco dei vertici. Questa è l’intera grammatica di cui si ha bisogno per la geometria, ed è il motivo per cui OBJ ha sopravvissuto a ogni formato progettato per sostituirlo ogni volta che il compito è ispezione anziché rendering.
Una singola riga di commento in cima che nomina lo scrittore, poi, per mesh: una riga o che porta il nome del mesh dal glTF, una serie di righe v, e una serie di righe f. Nient’altro appare — nessuna coordinata di texture vt, nessuna normale vn, nessun gruppo di smoothing s, nessun usemtl, nessun mtllib, e nessun separatore di righe vuote per far inciampare uno splitter ingenuo.
Questo rende il parser che si scriverebbe per esso di circa sei righe, e rende strumenti come wc, grep e awk utili direttamente. Contare le righe f dà il conteggio dei triangoli; contare le righe v dà il conteggio dei vertici. Se si sta scrivendo qualcosa che consuma questo output, notare che i numeri sono stampati con la formattazione float di default di JavaScript, quindi si vedranno sia 1 sia 1.0000001 nello stesso file e si dovrebbe parsare anziché pattern-matchare.
Gli indici delle facce OBJ partono da uno. Corrono anche in modo continuo attraverso il file anziché ripartire da ciascun gruppo o, che è il dettaglio che la maggior parte dei parser scritti a mano sbaglia. Il convertitore tiene uno scarto di vertici in esecuzione mentre scrive ciascun mesh e lo aggiunge a ogni indice in quel mesh.
Se si sta rileggendo il file, la regola è: accumulare il conteggio delle righe v viste finora, e sottrarre uno per ottenere un indice a base zero. Gli indici negativi sono legali in OBJ e contano all’indietro dal vertice più recente — questo scrittore non li emette mai, sebbene il lettore sulle pagine inverse li accetti, perché molti esportatori li usano.
Un albero di nodi glTF può collocare un mesh ovunque attraverso una catena di matrici, e può collocare lo stesso mesh in diversi posti contemporaneamente. OBJ non ha un grafo di scena e nessuna instancing, quindi la conversione risolve l’albero: ciascuna matrice di nodo è moltiplicata per il suo genitore, e la matrice mondo è applicata a ogni vertice prima che sia scritto.
La conseguenza pratica per chiunque misuri il risultato è buona — i numeri che si leggono sono dove la geometria effettivamente si trova, non dove sarebbe prima di una trasformazione. La conseguenza per la dimensione del file è che le istanze ripetute diventano dati di vertici ripetuti. Un glTF che colloca un bullone quaranta volte produce quaranta gruppi di forma identica in quaranta posizioni diverse.
Materiali, texture, immagini, sampler, coordinate UV, normali, tangenti, colori di vertice, morph target, skin, canali e sampler di animazione, camere, luci, e qualsiasi estensione il file dichiari. Nessuno di essi è letto e nessuno è scritto.
OBJ potrebbe in principio portare le UV e le normali, e un MTL separato potrebbe portare un riferimento di materiale. Questo convertitore non scrive né l’uno né l’altro, perché sposta la geometria tra sei formati e inventare un file di materiale da dati che non ha mai estratto sarebbe peggio che lasciarlo fuori. Se servono le coordinate di texture preservate, questa non è la strada e gltf-transform lo è.
Le primitive glTF dichiarano una modalità. La modalità 4 è una lista di triangoli ed è l’unica letta; punti, linee, line loop, line strip, triangle strip e triangle fan sono saltati. Un file che contiene solo geometria a linee termina con un messaggio che nessuna geometria a triangoli è stata trovata, il che è più utile di un OBJ vuoto.
La geometria compressa con Draco si ferma con un messaggio che nomina Draco, perché il decoder per KHR_draco_mesh_compression non è distribuito qui. Se il glTF viene da una pipeline di export ottimizzata per la dimensione questo è la ragione più probabile per cui non convertirà, e ri-esportare senza Draco è un singolo flag in ogni strumento che lo applica.
Corrispondono esattamente, per mesh. Nulla viene unito su questo percorso: l’accessor POSITION è decodificato elemento per elemento in righe v nello stesso ordine, e l’accessor degli indici diventa voci f che puntano ad esse. Il passaggio di unione che collassa le coordinate coincidenti gira quando si leggono STL e OBJ, dove i vertici non condivisi sono la norma, e non è applicato a un glTF che ha già un buffer di indici.
Questo rende il conteggio un controllo utilizzabile — se lo strumento ha riportato 48.213 vertici e l’OBJ ha 48.213 righe v, nulla è stato saltato. Significa anche che i vertici coincidenti sopravvivono. Gli esportatori dividono un vertice ovunque due facce abbiano bisogno di UV o normali diverse, e quei duplicati arrivano come righe v separate a coordinate identiche, quindi una superficie chiusa può riportare bordi di confine lungo le sue cuciture. Se l’analisi dipende dall’adiacenza, unire per distanza prima di eseguirla.
Una coordinata float32 è quattro byte in un buffer glTF. Lo stesso numero scritto come testo decimale è tipicamente da otto a diciotto caratteri più un separatore, quindi l’OBJ è diverse volte più grande della porzione di geometria del glTF anche dopo che l’inflazione base64 è stata considerata. Un modello da un milione di triangoli è un file di testo grande e vale la pena aspettarselo.
La precisione è preservata anziché troncata: i valori sono stampati alla precisione di cui JavaScript ha bisogno per fare il round-trip del float, quindi nulla viene silenziosamente arrotondato in uscita. L’unico arrotondamento nella pipeline è la chiave a sei decimali usata per la saldatura, e quella decide quali vertici sono lo stesso vertice, non quali sono le loro coordinate.
Se si sta per renderizzare il modello, tenere il glTF. Tutto ciò che lo rende degno di essere guardato — i materiali, le texture, l’animazione — sta nelle parti che questa conversione scarta, e ogni visualizzatore moderno lo legge direttamente.
Convertire quando il modello è dato anziché asset: quando serve un conteggio di triangoli di cui ci si fida, una bounding box che si è misurata da soli, un diff tra due export della stessa parte, o un input per un codice che si è scritto. È una ragione stretta e una reale, ed è l’unica per cui questa pagina è scritta.
| GLTF | OBJ | |
|---|---|---|
| Nome completo | GL Transmission Format | Oggetto Wavefront |
| Estensione del file | .gltf | .obj |
| Tipo di media | model/gltf+json | model/obj |
| Prima pubblicazione | 2015 | 1992 |
| Pubblicato da | Khronos Group | Wavefront Technologies |
| Specifica | glTF 2.0 | — |
| Licenza | Standard aperto | Standard aperto |
| Situazione attuale | Attuale | Attuale |
| Si apre nel browser | Nessun browser | Nessun browser |
| Valutato al suo posto | GLB | PLY, STL |
Blender legge sia GLTF sia OBJ, quindi puoi confrontare il risultato con l'originale senza un secondo programma.
I due puntano a lavori diversi: GLTF a il web e consegnare un file finito, OBJ a spostare dati fra programmi e la modifica. Vale la pena valutarlo prima, perché il motivo per cui esiste uno è di solito il motivo per cui l'altro risulta scomodo.
GLTF è il formato di Khronos Group, pubblicato nel 2015. È descritto in glTF 2.0, e vale la pena conoscerlo se il file deve sopravvivere allo strumento che lo ha scritto.
OBJ viene da Wavefront Technologies e risale al 1992. Blender, MeshLab e Maya lo leggono.
OBJ è stato pubblicato nel 1992 e GLTF nel 2015. Il più vecchio è in genere il file più sicuro da consegnare; il più recente fa lo stesso lavoro con meno byte.
No. Questa conversione avviene interamente nel tuo browser, quindi il file non esce dal tuo dispositivo. Puoi controllarlo da solo: apri la scheda di rete degli strumenti per sviluppatori e converti qualcosa. Vedrai la pagina stessa e le richieste di statistica e di pubblicità con cui questo servizio si paga, e nemmeno una che porti il tuo file.
Sì. Senza account, senza filigrana e senza una quota giornaliera da consumare: gira sulla tua macchina, quindi puoi tornare quante volte vuoi. Il browser lavora file fino a 100 MB, 100 per volta.
GLTF e OBJ descrivono il contenuto in modi radicalmente diversi. La conversione è quindi una ricostruzione e non una copia: fedele, ma non identica byte per byte. Solo la geometria. Materiali, colori, texture e animazione non passano, e un modello collocato più volte torna con ogni copia fissata nella propria posizione.
Per la conversione no: avviene nel browser che hai già aperto. Per aprire il risultato ti serve poi il programma con cui il tuo dispositivo mostra di solito Wavefront Object.