OBJ

Che cos’è un file OBJ?

Un formato di mesh 3D in testo semplice che legge qualsiasi programma di modellazione.

Che cos’è 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.

Da dove viene OBJ

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.

La specifica è pubblica

È 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.

Non si butta via niente

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.

Che cosa apre OBJ

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.

Aprirlo nel browser

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.

È un formato di lavoro

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.

Il formato che tutto sa leggere

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.

Il file MTL, e perché il vostro modello è arrivato grigio

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.

Le coordinate UV decidono come atterra una texture

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.

Non ci sono unità, e nessun accordo su quale direzione sia in alto

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.

Il testo è leggibile e grande

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.

Cosa l’OBJ non può portare

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.

Preparare un OBJ per la stampa

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.

I dati, in un posto solo

Identificativi e provenienza del formato OBJ.
Estensione.obj
Tipo di mediamodel/obj
Pubblicato daWavefront Technologies
Prima pubblicazione1992

File OBJ: domande frequenti

Perché il mio modello OBJ è grigio e senza texture?

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.

Come si apre un file OBJ?

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.

Perché il mio modello si importa della dimensione sbagliata?

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.

Perché il mio modello è sdraiato su un fianco?

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.

Qual è la differenza fra OBJ e STL?

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.

Un file OBJ può contenere animazione?

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.