Cookies para estatística e publicidade
Usamos cookies de estatística e de publicidade, ambos enviados ao Google. Recusar não muda nada do que você vê.Ler a página de privacidade
Aqui você converte GLTF para OBJ 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.
Até 100 arquivos de uma vez. Formatos misturados não são problema.
Eles são convertidos um após o outro e baixados juntos em um ZIP.
GLTF para OBJ
Os dois formatos são texto, e essa semelhança engana. Abrir um `.gltf` mostra um documento JSON em que o dado de vértice é uma string em base64 dentro de um buffer, fatiada por deslocamentos de byte registrados em buffer views, interpretada por acessores que declaram um tipo de componente e um tipo de elemento. São quatro camadas de indireção entre o arquivo e uma coordenada, e ler uma delas à mão é trabalhoso de verdade.
Um OBJ não tem nada disso. Uma linha começando com v é um vértice, e os três números depois dela são as coordenadas. Uma linha começando com f é um triângulo, e os três números depois dela são índices na lista de vértices. É essa a gramática inteira que você precisa para a geometria, e é por isso que o OBJ sobrevive a todo formato desenhado para substituí-lo sempre que a tarefa é inspecionar em vez de renderizar.
Uma linha de comentário no topo nomeando o gerador, e depois, por malha: uma linha o com o nome da malha vindo do glTF, uma sequência de linhas v, e uma sequência de linhas f. Nada além disso aparece — sem coordenadas de textura vt, sem normais vn, sem grupos de suavização, sem referência a material.
Isso torna o analisador que você precisaria escrever bem curto, e torna ferramentas de linha de comando comuns diretamente úteis: contar linhas f dá o número de triângulos, contar linhas v dá o número de vértices. Os números são impressos na formatação padrão de ponto flutuante do JavaScript, então você vai ver tanto 1 quanto 1.0000001 no mesmo arquivo — interprete como número, não por padrão de texto.
Índices de face no OBJ começam em um. Eles também são contados de forma contínua pelo arquivo inteiro, em vez de reiniciar a cada grupo o, que é o detalhe que a maioria dos analisadores escritos à mão erra. O conversor mantém uma contagem corrente de vértices enquanto escreve cada malha e soma essa contagem a cada índice daquela malha.
Se você está lendo o arquivo de volta, a regra é: acumule a contagem de linhas v vistas até ali, e subtraia um para chegar ao índice de base zero. Índices negativos são válidos em OBJ e contam para trás a partir do vértice mais recente — este gerador nunca os produz, embora o leitor usado nas páginas de conversão no sentido inverso os aceite, porque muitos exportadores por aí usam esse recurso.
Uma árvore de nós de um glTF pode posicionar uma malha em qualquer lugar por uma cadeia de matrizes, e pode posicionar a mesma malha em vários lugares ao mesmo tempo. O OBJ não tem grafo de cena nem instanciação, então a conversão resolve a árvore inteira: cada matriz de nó é multiplicada pela do pai, e a matriz de mundo resultante é aplicada a cada vértice antes de ser escrito.
A consequência prática para quem vai medir o resultado é boa — os números que você lê são onde a geometria de fato está, não onde estaria antes de uma transformação. A consequência para o tamanho do arquivo é que instâncias repetidas viram dado de vértice repetido: um glTF que posiciona um parafuso quarenta vezes gera quarenta grupos de forma idêntica em quarenta posições diferentes.
Materiais, texturas, imagens, amostradores, coordenadas de UV, normais, tangentes, cor por vértice, alvos de morfagem, esqueletos, canais de animação, câmeras, luzes e qualquer extensão que o arquivo declare. Nada disso é lido, nada disso é escrito.
O formato OBJ poderia em princípio carregar UVs e normais, e um arquivo MTL separado poderia carregar uma referência de material. Este conversor não escreve nenhum dos dois, porque move geometria entre seis formatos diferentes, e inventar um arquivo de material a partir de dado que nunca foi extraído seria pior do que simplesmente deixar de fora.
Primitivas de um glTF declaram um modo de desenho, e só o modo de lista de triângulos é lido; pontos, linhas, faixas de linha, faixas de triângulo e leques de triângulo são ignorados. Um arquivo contendo só geometria de linha termina com uma mensagem dizendo que nenhuma geometria de triângulo foi encontrada, o que é mais útil que devolver um OBJ vazio sem explicação.
Geometria comprimida com Draco para na mesma etapa, com uma mensagem nomeando o Draco, porque o decodificador para essa extensão não está incluído aqui. Se o seu glTF veio de um pipeline de exportação otimizado para tamanho, essa costuma ser a razão de não converter, e reexportar sem Draco costuma ser uma opção só de marcar em qualquer ferramenta que o aplica.
Elas batem exatamente, por malha. Nada é mesclado nesse caminho: o acessor de posição é decodificado elemento por elemento em linhas v, na mesma ordem, e o acessor de índice vira entradas f apontando para eles. A etapa de mesclagem que junta coordenadas coincidentes roda ao ler STL e OBJ, onde vértice não compartilhado é a norma, e não se aplica a um glTF que já tem seu próprio buffer de índice.
Isso torna a contagem uma verificação útil — se sua ferramenta relatou 48.213 vértices e o OBJ tem 48.213 linhas v, nada foi pulado. Também significa que vértices coincidentes sobrevivem: exportadores costumam duplicar um vértice sempre que duas faces precisam de UVs ou normais diferentes, e essas duplicatas chegam como linhas v separadas em coordenadas idênticas, então uma superfície fechada pode reportar bordas de contorno ao longo de suas costuras.
Uma coordenada em ponto flutuante de 32 bits ocupa quatro bytes num buffer do glTF. O mesmo número escrito como texto decimal costuma ocupar de oito a dezoito caracteres mais um separador, então o OBJ fica várias vezes maior que a porção de geometria do glTF, mesmo já contando a inflação do base64. Um modelo com um milhão de triângulos vira um arquivo de texto grande, e vale esperar por isso.
A precisão é preservada, não truncada: os valores são impressos na precisão que o JavaScript precisa para reconstruir o mesmo número em ponto flutuante, então nada é arredondado silenciosamente na saída. O único arredondamento no processo é a chave de seis casas decimais usada para soldar vértices, e ela decide quais vértices são o mesmo vértice, não qual é a coordenada deles.
Se você vai renderizar o modelo, guarde o glTF. Tudo que faz valer a pena olhar para ele — os materiais, as texturas, a animação — está nas partes que esta conversão descarta, e qualquer visualizador atual lê o glTF direto.
Converta quando o modelo é dado, não peça visual: quando você precisa de uma contagem de triângulos confiável, de uma caixa delimitadora medida por conta própria, de uma comparação entre duas exportações da mesma peça, ou de uma entrada para um código que você escreveu. É um motivo estreito e real, e é o único para o qual esta página foi escrita.
| GLTF | OBJ | |
|---|---|---|
| Nome completo | GL Transmission Format | Objeto Wavefront |
| Extensão do arquivo | .gltf | .obj |
| Tipo de mídia | model/gltf+json | model/obj |
| Publicado pela primeira vez | 2015 | 1992 |
| Publicado por | Khronos Group | Wavefront Technologies |
| Especificação | glTF 2.0 | — |
| Licença | Padrão aberto | Padrão aberto |
| Situação hoje | Atual | Atual |
| Abre no navegador | Nenhum navegador | Nenhum navegador |
| Considerado no lugar | GLB | PLY, STL |
Blender lê tanto GLTF quanto OBJ, então dá para comparar o resultado com o original sem um segundo programa.
Os dois miram trabalhos diferentes: GLTF em a web e entregar um arquivo pronto, OBJ em mover dados entre programas e a edição. Vale pesar isso antes, porque o motivo de um existir costuma ser o motivo de o outro ser incômodo.
GLTF é o formato da Khronos Group, publicado em 2015. Está descrito em glTF 2.0, e vale conhecer se o arquivo precisa sobreviver à ferramenta que o escreveu.
OBJ vem da Wavefront Technologies é de 1992. Blender, MeshLab e Maya leem o formato.
OBJ foi publicado em 1992 e GLTF em 2015. O mais antigo costuma ser o arquivo mais seguro para entregar; o mais novo faz o mesmo com menos bytes.
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.
É. 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.
GLTF e OBJ 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.
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 Wavefront Object.