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
OBJ
Un formato di mesh 3D in testo semplice che legge qualsiasi programma di modellazione.
OBJ
OBJ è 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 spostare dati fra programmi e la modifica.
L’estensione è .obj e il nome per esteso è Wavefront Object. Contano entrambi meno di ciò che il file può contenere, ed è di questo che parla il resto della pagina.
Wavefront Technologies lo ha pubblicato nel 1992.
A un formato rimasto leggibile così a lungo si può affidare qualcosa che vuoi ritrovare fra dieci anni.
È 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.
OBJ 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.
Blender, MeshLab e Maya 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.
OBJ è 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.
L’OBJ è il minimo comune denominatore del 3D dal 1992. Ogni programma di modellazione, ogni motore di gioco, ogni renderer e ogni visualizzatore online lo importa, cosa non vera per nessun altro formato di mesh, e sopravvive solo su questo — la specifica ha trent’anni, manca di funzioni che tutto il resto ha, e nulla di ciò conta quando la domanda è se l’altra persona può aprire il file.
È testo semplice, l’altra metà dell’attrattiva. Un vertice è una riga che inizia con v seguita da tre numeri; una faccia è una riga che inizia con f seguita dai vertici che unisce. Si può aprire un modello in un editor di testo e capirlo, il che per un formato 3D è abbastanza insolito da valere la pena dirlo.
Un OBJ contiene geometria e nient’altro. Colori, materiali e texture vivono in un file .mtl separato che l’OBJ nomina nelle sue prime righe, e le immagini delle texture sono ancora file separati, nominati dall’MTL.
Quindi un modello è davvero una cartella: un .obj, un .mtl, e quante che siano immagini. Inviare solo il .obj — cosa che la gente fa costantemente, perché è il file col nome riconoscibile — fa sì che il destinatario veda geometria grigia senza texture. È di gran lunga il problema più comune del formato, e la correzione è inviare tutto o zippare la cartella.
Una texture è un’immagine piatta, e il modello deve dire quale parte di quell’immagine appartiene a quale parte della superficie. Sono le coordinate UV — un secondo insieme di numeri, una coppia per vertice, che mappa la mesh sull’immagine.
Sono memorizzate nell’OBJ, quindi sopravvivono al viaggio anche quando i materiali no. Vale la pena saperlo quando un modello arriva senza texture: se le UV sono intatte, riattaccare una texture è un lavoro di due minuti in qualunque programma di modellazione. Se il file è stato esportato senza, qualcuno deve srotolare di nuovo la mesh, ed è vero lavoro.
I numeri in un OBJ non hanno una dimensione allegata. Un cubo di dieci unità potrebbe essere dieci millimetri, dieci centimetri o dieci metri, e il file non lo dice — ogni programma applica la propria assunzione all’importazione, motivo per cui un modello arriva microscopico oppure grande come un edificio.
L’orientamento è la stessa storia. Alcuni software trattano Y come alto, alcuni trattano Z, e il formato non prende posizione, quindi i modelli arrivano regolarmente sdraiati su un fianco. Entrambi i problemi si risolvono in pochi secondi scalando e ruotando all’importazione, ed entrambi vale la pena controllarli prima che qualcosa venga misurato o stampato.
Memorizzare ogni coordinata come testo decimale costa un bel po’ di spazio. La stessa mesh come STL o PLY binario è tipicamente da tre a cinque volte più piccola, e una scansione dettagliata esportata come OBJ può arrivare a centinaia di megabyte.
Comprime anche estremamente bene, per la stessa ragione — un OBJ zippato è una frazione della propria dimensione, dato che il testo decimale è enormemente ridondante. Per trasferire o archiviare un modello, zippare è quasi gratis ed elimina gran parte dell’obiezione al formato.
Nessuna animazione, nessun rigging o ossa, nessuna gerarchia di scena, nessuna camera o luce, e nessun modello di materiale moderno — il formato MTL descrive un approccio di shading dei primi anni novanta, quindi le mappe di metallicità e rugosità non hanno una casa propria e passano per convenzione piuttosto che per specifica.
È il motivo per cui esiste il glTF e per cui le pipeline di gioco lo usano invece. L’OBJ serve a consegnare una forma statica da un programma all’altro, e lo fa meglio di qualunque altra cosa. Per un personaggio con rig, una scena animata, o materiali fisicamente basati, è il file sbagliato.
Gli slicer accettano l’OBJ, e la geometria converte in STL in modo pulito dato che l’STL è un sottoinsieme rigoroso di ciò che l’OBJ può esprimere — triangoli e nient’altro. Ciò che conta è se la mesh è a tenuta stagna: ogni bordo condiviso esattamente da due facce, nessun buco, nessuna normale invertita.
I modelli costruiti per il rendering spesso non lo sono. Una superficie senza spessore appare perfetta in un viewport ed è non stampabile, perché uno slicer non può decidere cosa sia dentro di essa. Passare il file attraverso uno strumento di riparazione prima della stampa ne cattura la maggior parte, ed è più veloce che scoprire il problema dopo quattro ore sulla stampante.
| Estensione | .obj |
|---|---|
| Tipo di media | model/obj |
| Pubblicato da | Wavefront Technologies |
| Prima pubblicazione | 1992 |
I colori e le texture non sono nell’OBJ. Vivono in un file .mtl accompagnatore che l’OBJ nomina, e le immagini delle texture sono ancora file separati. Inviare solo il .obj dà al destinatario geometria nuda — inviate l’intera cartella o zippatela.
Quasi ogni programma 3D lo fa: Blender, MeshLab, il Visualizzatore 3D di Windows, e la maggior parte dei visualizzatori online. È anche testo semplice, quindi un editor di testo mostra i vertici e le facce grezzi se volete vedere cosa c’è dentro.
Il formato non ha unità. Un cubo di dieci unità potrebbe essere dieci millimetri o dieci metri, e ogni programma applica la propria assunzione. Scalare all’importazione risolve tutto — e vale la pena controllarlo prima di misurare o stampare qualunque cosa.
Alcuni software trattano Y come asse verticale e alcuni trattano Z, e il formato non prende posizione. Ruotare all’importazione è tutta la correzione, e la maggior parte degli importatori offre un’impostazione degli assi proprio per questo.
L’OBJ può portare coordinate texture, materiali e poligoni di qualunque forma; l’STL porta triangoli e nient’altro. L’STL è il formato di stampa, l’OBJ quello di interscambio. Convertire OBJ in STL scarta l’aspetto e conserva la forma.
No. Contiene una singola mesh statica — nessun osso, nessun rigging, nessuna gerarchia di scena, nessuna camera o luce. Per modelli animati o con rig, il glTF è il formato che li porta.