OBJ

O que é um arquivo OBJ?

Um formato de malha 3D em texto puro que qualquer programa de modelagem lê.

O que é OBJ

OBJ é um formato de texto puro que abre em qualquer editor. Ele guarda formas e coordenadas em vez de pixels, então continua nítido em qualquer tamanho — uma logomarca levada ao tamanho de um outdoor não perde nada. Ele é usado para mover dados entre programas e a edição.

A extensão é .obj e o nome por extenso é Wavefront Object. Os dois importam menos do que aquilo que o arquivo consegue carregar, e é disso que trata o resto desta página.

De onde vem OBJ

A Wavefront Technologies publicou o formato em 1992.

A um formato que se manteve legível por tanto tempo dá para confiar algo que você quer de volta daqui a dez anos.

A especificação é pública

Ela está publicada por inteiro, então dá para implementá-la a partir do documento em vez de por observação — é por isso que o formato aparece em tantos programas e por isso que arquivos escritos há vinte anos ainda abrem. Especificação publicada não é o mesmo que livre de royalties: quando o formato embrulha um codec, o licenciamento das patentes é uma questão à parte, que a norma não resolve.

Nada é jogado fora

OBJ guarda o conteúdo exatamente. Salvar de novo não muda nada, então dá para abrir, editar e salvar quantas vezes você quiser sem acumular estrago — e é isso que faz dele um formato de trabalho e não de entrega.

O que abre OBJ

Blender, MeshLab e Maya leem esse formato, e a maioria dos programas do mesmo tipo também.

Quando um arquivo não abre, o formato raramente é o problema — mais comum é o programa ser mais antigo que ele. Converter para algo mais antigo é o caminho confiável, e é para isso que serve o resto deste site.

Abrir no navegador

Nenhum navegador lê o formato.

Esse é de longe o motivo mais comum para convertê-lo: não que o formato seja ruim, mas que o lugar onde você quer mostrar o arquivo não consegue lê-lo.

É um formato de trabalho

OBJ foi feito para ser aberto e alterado. Mantenha o arquivo nesse formato enquanto o trabalho estiver em andamento e exporte a partir dele sempre que precisar de uma cópia pronta.

O formato que tudo consegue ler

OBJ é o menor denominador comum do 3D desde 1992. Todo programa de modelagem, toda engine de jogo, todo visualizador online importa isso, o que não é verdade para nenhum outro formato de malha, e ele sobrevive só por isso.

É texto simples, que é a outra metade do apelo. Um vértice é uma linha começando com v seguida de três números; uma face é uma linha começando com f seguida dos vértices que ela une. Dá pra abrir um modelo num editor de texto e entender.

O arquivo MTL, e por que seu modelo chegou cinza

Um OBJ contém geometria e nada mais. Cores, materiais e texturas vivem num arquivo .mtl separado que o OBJ nomeia nas primeiras linhas, e as imagens de textura são arquivos separados de novo, nomeados pelo MTL.

Então um modelo é na verdade uma pasta: um .obj, um .mtl, e quantos arquivos de imagem existirem. Enviar só o .obj — o que as pessoas fazem constantemente — mostra ao destinatário geometria cinza sem textura.

Coordenadas UV decidem como uma textura se encaixa

Uma textura é uma imagem plana, e o modelo precisa dizer qual parte dessa imagem pertence a qual parte da superfície. Essas são coordenadas UV — um segundo conjunto de números, um par por vértice.

Elas são guardadas no OBJ, então sobrevivem à viagem mesmo quando os materiais não sobrevivem. Vale saber quando um modelo chega sem textura: se as UVs estão intactas, reanexar uma textura é trabalho de dois minutos em qualquer programa de modelagem.

Não há unidades, e não há acordo sobre qual eixo é para cima

Os números num OBJ não têm dimensão anexada. Um cubo de dez unidades de lado pode ser dez milímetros, dez centímetros ou dez metros, e o arquivo não diz — cada programa aplica sua própria suposição na importação.

Orientação é a mesma história. Alguns softwares tratam Y como para cima, alguns tratam Z, e o formato não toma posição, então modelos rotineiramente chegam deitados de lado. Os dois problemas se resolvem em segundos ao escalar e rotacionar na importação.

Texto é legível e grande

Guardar cada coordenada como texto decimal custa bastante espaço. A mesma malha como STL ou PLY binário é tipicamente de três a cinco vezes menor, e um escaneamento detalhado exportado como OBJ pode chegar a centenas de megabytes.

Também comprime extremamente bem, pelo mesmo motivo — um OBJ compactado é uma fração do próprio tamanho, já que texto decimal é enormemente redundante. Para transferir ou arquivar um modelo, compactar é quase de graça.

O que o OBJ não consegue carregar

Sem animação, sem esqueleto ou ossos, sem hierarquia de cena, sem câmeras ou luzes, e sem modelo de material moderno — o formato MTL descreve uma abordagem de sombreamento do início dos anos 1990.

É por isso que o glTF existe e por que pipelines de jogos o usam em vez disso. OBJ é para entregar uma forma estática de um programa para outro, e faz isso melhor que qualquer coisa. Para um personagem articulado ou uma cena animada, é o arquivo errado.

Preparando um OBJ para impressão

Fatiadores aceitam OBJ, e a geometria converte para STL de forma limpa já que STL é um subconjunto estrito do que o OBJ consegue expressar. O que importa é se a malha é estanque: toda aresta compartilhada por exatamente duas faces, sem buracos.

Modelos construídos para renderização frequentemente não são. Uma superfície sem espessura fica perfeita num visualizador e é impossível de imprimir, porque um fatiador não consegue decidir o que está dentro. Rodar o arquivo por uma ferramenta de reparo antes de imprimir pega a maior parte disso.

Os dados, num lugar só

Identificadores e procedência do formato OBJ.
Extensão.obj
Tipo de mídiamodel/obj
Publicado porWavefront Technologies
Primeira publicação1992