O que acontece quando você comprime um arquivo GLB?
Comprimir um GLB significa recodificar as texturas e a geometria para que o mesmo modelo ocupe menos bytes. A maior parte da economia vem das texturas: nos oito modelos de exemplo da Khronos que medimos, as imagens eram a maior parte de todos os arquivos que tinham alguma textura. Este compressor GLB reduz essas imagens, limpa a geometria e grava um novo .glb, tudo no seu navegador.
Um GLB menor carrega mais rápido em uma página de produto, cabe nos limites de upload de plataformas e marketplaces 3D e usa menos memória nos celulares. Para isso, nada na forma, nos materiais ou nas animações do modelo precisa mudar.
Para onde vão os bytes de um GLB
Um GLB guarda três tipos de dados: texturas (as imagens que envolvem o modelo), geometria (posições dos vértices, normais e listas de triângulos) e animação. As texturas ficam armazenadas como arquivos de imagem completos dentro do GLB, muitas vezes PNGs de 2048 × 2048, e é por isso que um modelo com só algumas centenas de triângulos ainda pode pesar 8 MB. Abra seu arquivo no visualizador GLB para ver a divisão dele antes de comprimi-lo.
Limpeza sem perdas x compressão com perdas
Algumas etapas não mudam nada que dê para ver: remover dados duplicados, descartar materiais e texturas que ninguém usa e mesclar vértices exatamente iguais. As maiores economias vêm de etapas com perdas: texturas menores, texturas recodificadas como WebP ou JPEG e posições de vértices armazenadas com menos bits. Com perdas não quer dizer visivelmente pior, mas é a parte que vale conferir, e é para isso que serve o seletor "Antes / Depois".
Como comprimir um arquivo GLB em 3 passos
Solte seu .glb ou .gltf
Clique em "Escolher arquivo 3D" ou solte um .glb na área de visualização. Para um .gltf, selecione-o junto com o .bin e os arquivos de textura, ou solte a pasta inteira; o resultado é sempre um único .glb. O painel lista cada textura com seu tamanho, formato e bytes.
Escolha Web, Compatível ou Personalizada
A Web gera o menor arquivo para navegadores, a Compatível mantém o arquivo livre de extensões novas e a Personalizada permite escolher o tamanho, o formato e a qualidade das texturas. A tabela de texturas mostra no que cada textura vai se transformar antes de você clicar em qualquer coisa.
Compare e baixe
Clique em "Comprimir GLB". Quando terminar, a área de visualização passa para "Depois" com a câmera onde você a deixou; pressione B ou use o seletor "Antes / Depois" para comparar e, por fim, clique em "Baixar .glb comprimido".
Escolha um .glb, ou um .gltf com os arquivos dele.
Escolha a predefinição de acordo com o destino do modelo.
Compare "Antes" e "Depois" e baixe o resultado.
Texturas: para onde vai a maior parte dos bytes
Cada textura de um GLB é um arquivo de imagem completo, e a GPU o descompacta em pixels brutos assim que o modelo aparece na tela: uma textura de 2048 × 2048 ocupa cerca de 16 MB de memória de vídeo, sem contar os mipmaps, por menor que fosse o PNG. Por isso, quando você comprime um GLB, as configurações de textura decidem tanto o tamanho do download quanto o peso do modelo na hora de exibi-lo.
Redimensionar texturas: 4096, 2048, 1024 ou 512?
Reduzir pela metade a largura e a altura de uma textura deixa um quarto dos pixels. Em uma página web, onde o modelo costuma ocupar só parte da tela, 1024 px bastam para a maioria dos produtos; vale manter 2048 px em imagens de destaque e closes, e 512 px servem para objetos pequenos de cena. Este compressor GLB só reduz as texturas, nunca as amplia, e mantém as proporções delas. Para redimensionar uma única textura manualmente, use o redimensionador de imagens.
WebP x PNG x JPEG dentro de um GLB
PNG e JPEG fazem parte do próprio glTF, então todo app que abre arquivos GLB consegue lê-los. O WebP costuma gerar os menores arquivos, mas um GLB que o usa declara a extensão EXT_texture_webp, e o app que for abri-lo precisa ser compatível com ela. O JPEG não armazena transparência, então esta ferramenta mantém uma textura como PNG sempre que os pixels dela não são totalmente opacos. Para as vantagens e desvantagens de cada formato em geral, veja PNG para WebP.
Mapas de normais pedem uma compressão mais suave
Um mapa de normais guarda direções da superfície nas cores, e os artefatos em blocos deixados pela compressão com perdas aparecem como erros de iluminação, e não como ruído de cor. As duas predefinições dão aos mapas de normais um piso de qualidade mais alto (0,9). O WebP e o JPEG também armazenam a cor em resolução reduzida, o que custa um pouco de precisão nos mapas de normais e nas texturas que guardam rugosidade, metalicidade e oclusão em canais separados. Se essa precisão importa, escolha Personalizada e mantenha o formato original.
Texturas com transparência
Folhas, decalques e vidro costumam depender de um canal alfa. O WebP o preserva; o JPEG não consegue, então uma textura transparente que iria para JPEG é salva como PNG. Nas nossas medições, Lantern e ToyCar mantiveram, cada um, uma ou duas texturas em PNG por esse motivo.
Compressão de geometria: meshopt, quantização e Draco
A geometria costuma ser a parte menor de um GLB, mas em malhas densas, escaneamentos e personagens animados ela pode ocupar a maior parte do arquivo. A predefinição Web a comprime com meshopt; as outras predefinições mantêm a codificação como está e só fazem a limpeza.
O que a compressão meshopt faz
O meshopt primeiro reordena vértices e triângulos para que dados vizinhos fiquem juntos, depois armazena posições, normais e coordenadas de textura como inteiros pequenos em vez de floats de 32 bits (a quantização, declarada como KHR_mesh_quantization) e, por fim, compacta o resultado com EXT_meshopt_compression. A decodificação no navegador é muito rápida, e three.js, model-viewer e Babylon.js leem esse formato.
Mesclagem de vértices e remoção de duplicatas
Os exportadores muitas vezes gravam o mesmo vértice várias vezes, duplicam accessors inteiros ou deixam para trás materiais e texturas que nada usa. Mesclar vértices idênticos e eliminar dados não usados é um processo sem perdas que roda em todas as predefinições; sozinho, ele economizou 32% no pequeno modelo Fox.
Por que modelos Draco mantêm a geometria
Draco é outra extensão de compressão de geometria, muitas vezes mais eficiente que o meshopt. Gravar Draco de novo exige o codificador dele, e decodificar a geometria e armazená-la sem Draco deixou uma malha de teste de 4 a 13 vezes maior. Por isso, quando um GLB já usa Draco, esta ferramenta recodifica só as texturas e deixa todos os outros bytes, incluindo a geometria Draco, exatamente como estavam. O cartão de resultado avisa quando isso acontece.
Qual predefinição escolher?
Antes de comprimir seu GLB, pense em para onde o modelo vai depois: a predefinição certa depende disso, porque as configurações mais enxutas usam extensões glTF que nem todo app lê. A nota abaixo das predefinições lista as extensões que as configurações atuais vão adicionar.
Para visualizadores web: three.js, model-viewer, Babylon.js
Escolha Web. Ela reduz as texturas para no máximo 1024 px, salva-as como WebP e comprime a geometria com meshopt. Visualizadores no navegador e motores baseados em three.js ou Babylon.js leem as três extensões que ela usa, e os arquivos são os menores que esta ferramenta gera: de 48% a 98,8% menores nos exemplos da Khronos.
Para Blender, Unity e visualizadores de desktop
Escolha Compatível. Ela mantém as texturas em até 2048 px, grava as opacas como JPEG e as transparentes como PNG, e não adiciona nenhuma extensão. Ferramentas de desktop e importadores de motores de jogos têm suporte irregular a WebP e meshopt, então um arquivo sem eles é a escolha segura quando você não controla o software do outro lado.
Quando usar a Personalizada
Use a Personalizada para manter as texturas no tamanho original, manter o formato original em mapas de dados que exigem precisão, aumentar ou diminuir a qualidade ou desativar o meshopt. A tabela de texturas é atualizada a cada configuração que você altera, para você ver o que vai acontecer antes de comprimir.
Resultados reais com modelos de exemplo da Khronos
Para mostrar quanto você pode esperar, usamos esta página para comprimir arquivos GLB do acervo Khronos glTF Sample Assets: oito originais, no Chrome, em um computador de mesa. Com a predefinição Web, os oito arquivos ficaram, em média, 86% menores e, na mediana, 96% menores; a maior economia foi a do Avocado, de 7,73 MB para 0,09 MB, porque as três texturas PNG de 2048 × 2048 dele eram quase o arquivo inteiro. Cada modelo levou cerca de um segundo.
A Compatível economiza menos, já que mantém as texturas em 2048 px e evita o WebP, mas ainda assim reduziu quatro dos oito modelos em 83% a 93%. Os modelos que menos economizaram são os que têm mais geometria (o ToyCar tem cerca de 109.000 triângulos) ou texturas com transparência, que continuam em PNG.
Medições: original x Web x Compatível
| Modelo | Original | Predefinição Web | Predefinição Compatível |
|---|---|---|---|
| Avocado | 7,73 MB | 0,09 MB (−98,8%) | 0,57 MB (−92,6%) |
| WaterBottle | 8,55 MB | 0,12 MB (−98,6%) | 0,88 MB (−89,7%) |
| BoomBox | 10,12 MB | 0,22 MB (−97,8%) | 1,12 MB (−89,0%) |
| Corset | 12,87 MB | 0,51 MB (−96,0%) | 2,15 MB (−83,3%) |
| Lantern | 9,12 MB | 0,36 MB (−96,0%) | 5,49 MB (−39,8%) |
| SheenChair | 3,93 MB | 0,97 MB (−75,3%) | 1,72 MB (−56,3%) |
| ToyCar | 5,17 MB | 1,30 MB (−74,9%) | 3,92 MB (−24,2%) |
| Fox | 0,16 MB | 0,08 MB (−48,0%) | 0,11 MB (−31,9%) |
A compressão vai estragar meu modelo?
Comprimir um GLB muda a forma como os dados são armazenados, não o que o modelo é. Malhas, materiais, nomes de nós, animações e outros recursos do glTF são preservados; o que vale conferir são as extensões que o novo arquivo exige e a aparência das texturas de perto.
Extensões que o resultado pode exigir
A predefinição Web pode adicionar EXT_texture_webp, EXT_meshopt_compression e KHR_mesh_quantization, marcadas como obrigatórias para que um app que não consiga lê-las avise em vez de mostrar um modelo quebrado. A Compatível não adiciona nenhuma. Um GLB que já usava outras extensões as mantém; se esta ferramenta não reconhecer alguma delas, ela passa a recodificar apenas as texturas, para que nada que ela não entenda seja reescrito.
Animações, esqueletos e alvos de morph
Animações, personagens com esqueleto e alvos de morph passam pela compressão sem problemas. O meshopt também comprime os quadros-chave das animações, e a quantização mantém precisão suficiente para modelos de tamanho normal; em cenas muito grandes ou em modelos de engenharia medidos em milímetros, compare o resultado com o aramado ativado ou desative o meshopt na predefinição Personalizada.
Texturas KTX2 ficam como estão
Texturas já armazenadas como KTX2 (KHR_texture_basisu) são comprimidas para a GPU e ocupam pouca memória. Esta ferramenta as mantém inalteradas em vez de transformá-las de volta em imagens comuns.
Por que seu GLB continua grande depois da compressão
Se você comprime um GLB e a economia é pequena, o painel geralmente mostra o motivo. O arquivo pode já estar comprimido: texturas que já são imagens WebP ou JPEG pequenas raramente encolhem mais, e a ferramenta mantém a textura original sempre que recodificá-la não a deixa menor. Se o resultado não ficar nem um pouco menor, não há nada para baixar, e isso é proposital.
Escaneamentos densos e fotogrametria
Objetos escaneados e modelos de fotogrametria costumam ter centenas de milhares ou milhões de triângulos, e aí é a geometria, não as texturas, que ocupa o arquivo. O meshopt ajuda, mas a solução de verdade é ter menos triângulos: simplifique a malha em um editor 3D, por exemplo com o modificador Decimate do Blender, e depois comprima o resultado aqui.
Comprimir .gltf com arquivos externos
Um .gltf guarda a geometria e as texturas em arquivos separados. Selecione todos eles, ou solte a pasta, e a ferramenta junta tudo em um único .glb comprimido. Um .gltf que usa Draco precisa ser exportado como .glb antes, porque os dados Draco só são mantidos inalterados dentro de um GLB.
O equivalente em linha de comando
Esta página roda a biblioteca de código aberto glTF Transform no seu navegador. Se você quer comprimir muitos arquivos em um pipeline de build, a ferramenta de linha de comando dela faz um trabalho parecido, por exemplo gltf-transform optimize input.glb output.glb --compress meshopt --texture-compress webp --texture-size 1024.
Seu modelo nunca sai do seu dispositivo
Muitos compressores GLB online enviam o arquivo para um servidor, e alguns limitam quantos arquivos você pode comprimir por semana. Aqui, todo o trabalho roda em um worker em segundo plano dentro da aba do navegador: o modelo é lido do seu disco, comprimido na memória e salvo direto como download. Isso importa para produtos ainda não lançados, trabalhos de clientes e qualquer coisa sob acordo de confidencialidade (NDA). Feche a aba e nada fica para trás. Para outras ferramentas que funcionam do mesmo jeito, veja todas as nossas ferramentas gratuitas.