Converter OBJ para GLB

Aqui você converte OBJ para GLB de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. A conversão acontece dentro do seu próprio navegador, então o arquivo nunca é enviado. Funciona igual no Windows, no macOS e no Linux e também no iPhone e no Android, e continua funcionando mesmo se você cortar a conexão.

  • Onde roda No seu navegador. O arquivo nunca é enviado.
  • Reconstruído GLB funciona de um jeito diferente de OBJ. Não é a degradação gradual de um codec com perda: o que GLB consegue expressar é reproduzido fielmente, e o que não tem equivalente ali não sobrevive de jeito nenhum.
  • Limite de tamanho Até 100 MB por arquivo, de graça e sem conta.
  • Vale saber Só a geometria. Materiais, cores, texturas e animação não vão junto, e um modelo colocado várias vezes volta com cada cópia fixada na sua própria posição.

Até 100 arquivos de uma vez. Formatos misturados não são problema.

Por que um OBJ precisa virar GLB antes de ir para uma página

Nenhum navegador lê OBJ nativamente, e nenhum lê GLB nativamente também — abrir um .glb direto faz o navegador baixar o arquivo em vez de renderizar. O que muda é o ecossistema de biblioteca. As bibliotecas de visualização 3D mais usadas na web recebem um GLB como entrada principal e carregam num pedido só, enquanto o suporte a OBJ é um carregador secundário que também precisa do MTL e de cada textura como pedidos separados.

Então a pergunta prática não é qual formato o navegador entende, e sim qual formato a biblioteca que você vai usar espera. Para qualquer coisa publicada nos últimos anos essa resposta é GLB, e numa página de produto em que o modelo é o conteúdo, reduzir quatro ou cinco pedidos de rede para um só faz diferença mensurável num celular.

O MTL que o seu OBJ referencia nunca é aberto

Um arquivo OBJ não tem material dentro dele. Tem uma linha apontando para um arquivo .mtl ao lado, com material e caminhos de textura definidos ali, e linhas alternando entre as entradas desse arquivo. Este conversor lê só as linhas de vértice, grupo e face, e ignora o resto.

A consequência é inequívoca e vale planejar em cima dela: o seu GLB contém geometria e nome de grupo, e o visualizador desenha isso com o material padrão dele. Se o modelo devia aparecer com as texturas, o caminho é passar pelo Blender — importar o OBJ com o MTL junto, depois exportar como glTF binário, que empacota as imagens dentro do GLB. Esta página serve para o caso em que a forma é o produto final, não a aparência.

O que entra no GLB que o conversor monta

Um glTF 2.0 binário: cabeçalho curto, um bloco JSON, depois um bloco binário. Dentro do JSON, uma malha por grupo do OBJ, um nó por malha, uma cena listando todos, e por malha um acessor de posição em ponto flutuante e um acessor de índice.

Todo acessor de posição carrega o valor mínimo e máximo. Isso é uma exigência da especificação e também é a diferença prática entre um modelo que aparece ao carregar e um que não aparece — os visualizadores derivam a distância inicial da câmera a partir desses limites, e arquivos escritos sem eles são uma causa comum de cena aparentemente vazia.

Cada grupo do OBJ vira uma malha, e cada malha custa uma chamada de desenho

O leitor começa um grupo novo a cada linha de grupo do OBJ, e o gravador emite uma malha glTF por grupo, cada uma no seu próprio nó com sua própria primitiva. Um OBJ exportado de um CAD com um grupo por face pode carregar centenas de grupos, e o GLB vai fielmente conter centenas de malhas.

Numa página, isso é um custo real. Cada primitiva é uma chamada de desenho separada e uma vinculação de buffer de GPU separada, e algumas centenas delas num celular intermediário é onde a taxa de quadros despenca. Juntar objetos no Blender antes de exportar o OBJ, ou remover as linhas de grupo com um editor de texto se elas não carregam significado nenhum, é um ajuste de dois minutos que vale mais que a maior parte do que acontece depois.

Sombreamento plano, e por que o GLB parece um modelo de baixo poligono

Nenhum atributo de normal é escrito. A especificação do glTF é explícita sobre o que um visualizador deve então fazer: calcular normais de face planas. Então uma esfera que parecia lisa no software de modelagem renderiza no navegador com cada triângulo visível como uma faceta distinta, o que soa como um estilo de baixo poligono proposital e geralmente não é.

Há duas correções limpas. Na biblioteca de visualização, calcular as normais de vértice a partir da geometria carregada resolve isso, e funciona porque as posições são mescladas em seis casas decimais durante a conversão. Ou faça a passagem de normais no Blender antes de exportar glTF de lá, o que também traz os materiais junto.

Eixo para cima e escala: duas coisas que um OBJ nunca declara

O glTF fixa os dois. É orientado com Y para cima e a unidade linear é o metro. O OBJ não fixa nenhum dos dois: é uma lista de números sem cabeçalho, sem unidade e sem convenção de eixo, e cada aplicação que escreve um arquivo desses tem seu próprio hábito.

Nenhuma conversão é aplicada aqui, então um OBJ com eixo Z para cima produz um GLB cujo modelo fica deitado, e um OBJ desenhado em centímetros produz um duzentas vezes maior do que deveria. Os dois são triviais de corrigir uma vez que você sabe qual é o seu caso — uma rotação e uma escala uniforme — e os dois são invisíveis até você carregar o arquivo. Conferir a caixa delimitadora contra uma dimensão que você já conhece é o diagnóstico mais rápido.

O que o leitor de OBJ faz antes de o GLB ser escrito

Faces com mais de três cantos são trianguladas em leque a partir do primeiro canto, o que é correto para quadriláteros convexos, o caso comum nesses arquivos, e pode produzir triângulos sobrepostos numa face côncava. Índices negativos, que contam para trás a partir do vértice mais recente, são resolvidos enquanto o arquivo é lido, porque o significado deles depende da posição no arquivo.

As posições são então soldadas: combinadas em seis casas decimais, então uma coordenada que aparece em vinte triângulos é guardada uma vez e referenciada vinte vezes. Isso reduz o tamanho do buffer e dá ao navegador uma malha cuja adjacência é real, o que é o que permite calcular normais suaves em vez do mesmo resultado plano.

O tamanho do GLB, e como deixá-lo menor

Doze bytes por vértice para posições e doze bytes por triângulo para índices, mais um cabeçalho JSON pequeno. Um modelo de duzentos mil triângulos com cem mil vértices fica em torno de alguns megabytes, e nada disso é comprimido. Os índices usam sempre o tipo de quatro bytes, mesmo quando dois bastariam para uma malha pequena.

Se esse número é grande demais para a página, as respostas ficam antes e depois desta ferramenta, não nela: decime a malha num programa de modelagem primeiro, e rode uma ferramenta de compressão de glTF depois — lembrando que isso exige que o navegador carregue um decodificador compatível, um custo próprio numa página que mostra um modelo só.

Quando um OBJ ainda não está pronto para a web

Se o modelo precisa das texturas, converta passando pelo Blender para o MTL e as imagens virem junto. Se o modelo tem meio milhão de triângulos, decime antes de converter em vez de publicar e torcer. Se você precisa que pareça liso, trate as normais no visualizador ou no exportador, porque este caminho não vai entregar isso.

O que esta página faz bem é o caso honesto do meio: um OBJ limpo de uma peça, um adereço ou uma digitalização que precisa aparecer numa página como forma, num arquivo só, sem subir o modelo para ninguém. Essa conversão roda inteiramente no seu navegador, sem motor para baixar e com um teto de 100 MB, e produz um arquivo que qualquer visualizador web atual aceita.

Como converter OBJ para GLB

  1. Solte o seu arquivo OBJ nesta página, ou clique para escolher um.
  2. Escolha GLB como destino. A conversão acontece no seu navegador e o arquivo não é enviado.
  3. Baixe o arquivo GLB pronto.

OBJ ou GLB: o que muda

OBJ comparado com GLB
OBJGLB
Nome completoObjeto WavefrontBinary glTF
Extensão do arquivo.obj.glb
Tipo de mídiamodel/objmodel/gltf-binary
Publicado pela primeira vez19922016
Publicado porWavefront TechnologiesKhronos Group
EspecificaçãoglTF 2.0
LicençaPadrão abertoPadrão aberto
Situação hojeAtualAtual
Abre no navegadorNenhum navegadorNenhum navegador
Considerado no lugarGLTF, PLY, STLGLTF

Abrir o resultado

Blender lê tanto OBJ quanto GLB, então dá para comparar o resultado com o original sem um segundo programa.

Para que serve cada formato

Os dois miram trabalhos diferentes: OBJ em mover dados entre programas e a edição, GLB em a web e entregar um arquivo pronto. Vale pesar isso antes, porque o motivo de um existir costuma ser o motivo de o outro ser incômodo.

GLB vem da Khronos Group é de 2016, descrito em glTF 2.0. Blender, three.js e Babylon.js leem o formato.

OBJ foi publicado em 1992 e GLB em 2016. O mais antigo costuma ser o arquivo mais seguro para entregar; o mais novo faz o mesmo com menos bytes.

De OBJ para GLB: perguntas frequentes

Meu arquivo OBJ é enviado para algum lugar?

Não. Esta conversão acontece inteiramente no seu navegador, então o arquivo não sai do seu aparelho. Você mesmo pode conferir: abra a aba de rede das ferramentas de desenvolvedor e converta alguma coisa. Você verá a própria página e as requisições de estatística e de publicidade com que este serviço é pago, e nenhuma que leve o seu arquivo.

Converter OBJ para GLB é grátis?

É. Sem conta, sem marca d’água e sem cota diária para gastar: roda no seu próprio aparelho, então você pode voltar quantas vezes quiser. O navegador processa arquivos de até 100 MB, 100 por vez.

Perde qualidade ao converter OBJ para GLB?

OBJ e GLB descrevem o conteúdo de maneiras radicalmente diferentes. A conversão é, portanto, uma reconstrução e não uma cópia: fiel, mas não idêntica byte a byte. Só a geometria. Materiais, cores, texturas e animação não vão junto, e um modelo colocado várias vezes volta com cada cópia fixada na sua própria posição.

Preciso instalar alguma coisa para abrir um arquivo GLB?

Para a conversão, não: ela acontece no navegador que você já tem aberto. Para abrir o resultado você precisa depois do programa com que o seu aparelho normalmente exibe Binary glTF.

Mais sobre esses formatos