Do Blender à Produção: Um Passo a Passo de Compressão Ponta a Ponta
Até aqui na série, ferramentas, princípios e seleção já foram cobertos. Neste artigo final, juntamos tudo em um fluxo executável: partindo de um modelo real do Blender, comprima passo a passo, registrando tamanho do arquivo, VRAM e tempo de carregamento a cada etapa, e veja se é possível reduzir de um pesado de 50MB a um modelo de 5MB que abre instantaneamente no celular.
Leitor-alvo: quem já leu os cinco anteriores e está pronto para realmente fazer. Sem novos conceitos aqui—apenas fluxos, comandos e scripts copiáveis.
Ponto de partida: um modelo PBR real
Usamos um modelo de exibição de e-commerce muito típico como amostra: um modelo de produto de alto detalhe com mapas PBR completos.
| Métrica inicial | Valor |
|---|---|
| Arquivo-fonte do Blender | ~120MB (incluindo alto polígono não exportado) |
| GLB exportado (float32 + PNG) | ~50MB |
| Contagem de vértices | ~180k |
| Mapas | 6 × 4096×4096 (albedo, normal, roughness, metallic, AO, emissive) |
| Uso de VRAM (6 totalmente descomprimidas) | ~520MB |
| Objetivo | Arquivo ≤ 5MB, VRAM controlável, abertura instantânea no mobile |
Um arquivo de 50MB e 520MB de VRAM—este modelo com certeza trava no celular. Vamos passo a passo.
Passo 0: exportar corretamente do Blender
O primeiro gate da compressão é na verdade a exportação; muita gente falha aqui.
Configurações-chave ao exportar glTF do Blender:
- Formato:
glTF Binary (.glb)(arquivo único, fácil de transferir) - Geometria: marque
Normals,Tangents(normal maps PBR precisam de tangentes) - UV: certifique-se de que está exportado (ativado por padrão)
- Texturas:
AutomaticouJPEG(o formato de textura aqui não importa; vamos recomprimir depois—mas certifique-se de que estão sendo exportadas) - Compressão: não marque a compressão de malhas embutida do Blender; vamos usar ferramentas mais especializadas
- Transformação:
+Y Up(padrão glTF) - Dados: marque apenas o que precisa (não exporte animação, câmeras, luzes se não precisar, para reduzir o tamanho)
Após a exportação, model.glb: 50MB, 6 mapas PNG, vértices float32. Essa é nossa linha de base.
A primeira armadilha comum está aqui: o Blender por padrão exporta malhas não utilizadas e objetos auxiliares ocultos também. Antes de exportar, execute
File > Clean Up > Purge Orphans, e no outliner selecione apenas os objetos a exportar.
O fluxo ponta a ponta, visão geral
Desenhe toda a linha para ter um mapa mental:
Arquivo-fonte do Blender
│ exportar .glb (float32 + PNG) 50MB
▼
[1] Desduplicar + fundir vértices duplicados (gltf-transform) ~45MB
│
[2] Compressão de vértices: MeshOpt (gltfpack / gltf-transform) ~30MB
│
[3] Compressão de texturas: PNG → KTX2 (ETC1S/UASTC) ~6MB
│
[4] (opcional) Simplificação geométrica LOD (simplify) ~4-5MB
▼
Modelo final-modelo-final.glb ~5MB
│
Carregamento no engine (Three.js / Babylon.js) → transcodificação em tempo real → envio
Os números de cada etapa são acompanhados ao vivo nas tabelas abaixo.
Cadeia de ferramentas: qual escolher
Há várias ferramentas de compressão; aqui está uma comparação para você não escolher errado:
| Ferramenta | Forte | Fraco | Bom para |
|---|---|---|---|
| gltf-transform | Versátil, texturas+vértices de uma vez; tem API, scriptável | Taxa máxima abaixo de ferramentas dedicadas | Ferramenta principal recomendada para a maioria dos cenários |
| gltfpack | Especialista em compressão de vértices, MeshOpt nativo | Compressão de texturas fraca | Vértices densos, controle refinado de MeshOpt |
| toktx | Ferramenta de textura mais profissional, mais parâmetros | Apenas texturas, não modelos inteiros | Ajuste fino de uma única textura |
| gltf-pipeline | Veterana, suporta Draco | Manutenção inativa, poucas funcionalidades | Projetos legados existentes com Draco |
| Ferramentas online (gltf.report) | Zero instalação | Não para automação/em lote | Experimentos, tarefas pontuais |
Recomendação principal: execute todo o fluxo com gltf-transform; use gltfpack para detalhes de vértices e toktx para ajuste de textura individual conforme necessário. Todas as etapas abaixo são baseadas no gltf-transform.
Passo 1: desduplicar + fundir
Modelos frequentemente têm vértices duplicados, nós não utilizados e materiais. Limpe uma vez primeiro.
gltf-transform optimize model.glb step1.glb --weld --prune
| Etapa | Tamanho do arquivo | VRAM | Mudança |
|---|---|---|---|
| Linha de base | 50MB | ~520MB | — |
| Passo 1 desduplicação | 45MB | ~520MB | -5MB (VRAM inalterada, porque as texturas ainda estão lá) |
VRAM quase não mudou—como esperado. A desduplicação economiza principalmente vértices e estrutura; texturas são os pesados da VRAM.
Passo 2: compressão de vértices MeshOpt
gltf-transform optimize step1.glb step2.glb --meshopt --weld --prune
--meshopt quantiza vértices para 16 bits e aplica a codificação lossless MeshOpt, adicionando automaticamente a extensão EXT_meshopt_compression.
| Etapa | Tamanho do arquivo | VRAM | Mudança |
|---|---|---|---|
| Passo 1 | 45MB | ~520MB | — |
| Passo 2 + MeshOpt | 30MB | ~520MB | -15MB (parte dos vértices) |
VRAM ainda ~520MB? Correto—porque vértices são uma pequena parcela da VRAM (10-20%); cortá-los tem impacto limitado na VRAM. O verdadeiro monstro da VRAM são as texturas, tratadas a seguir.
Passo 3: compressão de texturas PNG → KTX2
Esta etapa tem o melhor ROI.
gltf-transform optimize step2.glb step3.glb \
--texture-compress basisu \
--meshopt --weld --prune
--texture-compress basisu detecta automaticamente cada mapa: mapas de cores (albedo, emissive) → ETC1S; mapas de dados (normal, roughness, metallic, AO) → UASTC.
| Etapa | Tamanho do arquivo | VRAM | Mudança |
|---|---|---|---|
| Passo 2 | 30MB | ~520MB | — |
| Passo 3 + KTX2 | 6MB | ~70MB | -24MB arquivo / -450MB VRAM |
Esta etapa é o ponto de virada de todo o fluxo:
- Arquivo cai de 30MB para 6MB
- VRAM cai de 520MB para ~70MB—porque as seis mapas de 4096 passam de "pixels brutos descomprimidos" para "comprimidas por blocos", cada uma de ~87MB para ~11-14MB
VRAM cai uma ordem de grandeza—essa é a chave para funcionar no mobile.
Passo 4: (opcional) simplificação geométrica
Se você quer algo ainda menor e a cena permite reduzir a precisão dos vértices, adicione simplificação geométrica.
gltf-transform optimize step3.glb final.glb \
--texture-compress basisu \
--meshopt \
--simplify --simplify-ratio 0.5 \
--weld --prune
--simplify-ratio 0.5 significa manter cerca de 50% dos vértices.
| Etapa | Tamanho do arquivo | VRAM | Mudança |
|---|---|---|---|
| Passo 3 | 6MB | ~70MB | — |
| Passo 4 + simplify 0.5 | 4.5MB | ~70MB | -1.5MB (VRAM aproximadamente inalterada) |
A simplificação economiza principalmente tamanho do arquivo; o impacto na VRAM é pequeno. O custo é redução de detalhes do modelo—visível em close-ups. Páginas de produtos e-commerce geralmente não devem simplificar demais; edifícios/cenas grandes são um excelente caso de uso.
Tabela de acompanhamento completa dos efeitos
Empilhe as quatro etapas para o panorama completo (baseado na amostra acima; os números são ilustrativos de magnitude):
| Etapa | Tamanho do arquivo | VRAM | Redução acumulada |
|---|---|---|---|
| Linha de base (float32 + PNG) | 50MB | ~520MB | — |
| + desduplicação e fusão | 45MB | ~520MB | -10% |
| + vértices MeshOpt | 30MB | ~520MB | -40% |
| + texturas KTX2 | 6MB | ~70MB | -88% arquivo / -87% VRAM |
| + simplificação geométrica (0.5) | 4.5MB | ~70MB | -91% arquivo |
Conclusão: a compressão de texturas entrega a grande maioria das ganhos de tamanho e VRAM. Compressão de vértices é a cereja do bolo; compressão de texturas é o salvamento. Isso corresponde totalmente ao tema do primeiro artigo—texturas são 80% do tamanho, então otimizá-las tem o maior retorno.
Versão em um comando: compressão preguiçosa de uma vez
Se você não quer fazer passo a passo, faça todas as otimizações de uma vez:
gltf-transform optimize model.glb model-final.glb \
--texture-compress basisu \
--meshopt \
--simplify --simplify-ratio 0.5 \
--weld --prune
Este único comando = desduplicação + fusão + vértices MeshOpt + texturas KTX2 + simplificação geométrica. É suficiente para 90% dos cenários; o passo a passo é principalmente para entender e ajustar.
Não quer configurar um ambiente? Use o compressor online da Any3D
Executar este fluxo gltf-transform localmente significa instalar Node, configurar uma cadeia de ferramentas e memorizar flags. O ferramenta de compressão online da Any3D elimina tudo isso:
- Sem scripts para baixar, sem ambiente para instalar—basta abrir a página
- Seu modelo nunca toca um servidor—tudo é processado localmente no seu navegador
- Configuração visual—ajuste texturas KTX2, vértices MeshOpt e simplificação geométrica com controles deslizantes e pré-visualização ao vivo
- Um clique, múltiplas versões—exporte saídas comprimidas para mobile / desktop / VR
Escolha um GLB, selecione a plataforma alvo, clique uma vez e pronto. O mesmo motor por baixo do capô (gltf-transform), mas sem barreira—sem necessidade de terminal.
FAQ de armadilhas comuns
Modelo fica preto / texturas não aparecem após compressão
- 99% é espaço de cores: um mapa de cores não recebeu sRGB. No Three.js,
texture.colorSpace = THREE.SRGBColorSpace. - Esqueceu
--srgbem mapas de cores com toktx.
Iluminação fica errada após comprimir normais
- Normal map usou ETC1S; mude para UASTC.
- Normal é estilo DirectX (canal verde para baixo); o engine quer estilo OpenGL, então inverta o canal G.
Carregamento mobile trava no primeiro carregamento
- Verifique se você está carregando o decoder wasm do Draco (requisição extra). Prefira MeshOpt no mobile.
- Caminho do transcodificador KTX2 mal configurado; transcodificação falha e cai para decodificação CPU.
Arquivo comprimido ficou maior
- O mapa é pequeno demais (< 128px); KTX2 não vale a pena—compressão por blocos tem sobrecarga fixa.
- O modelo já foi comprimido uma vez; uma segunda passagem não traz ganho (até negativo).
Modelo se parte após simplificação
--simplify-ratiodefinido baixo demais; aumente para 0.7-0.8.- Simplificação é amigável com superfícies rígidas (maquinário, arquitetura) e propensa a quebrar curvas orgânicas (personagens).
KTX2 falha em alguns navegadores
- Safari antigo / WebView antigo não suportam. Forneça um fallback PNG/WebP, ou use o campo
fallbackdoKHR_texture_basisucomo rede de segurança.
Resumo da série
A essência de todos os seis artigos condensada em uma tabela—favoritem.
Composição do tamanho
| Componente | Proporção | Ferramenta de otimização |
|---|---|---|
| Mapas de textura | 70-85% | KTX2 (maior ganho) |
| Dados de vértices | 10-20% | MeshOpt / quantização / Draco |
| Dados de animação | 0-15% | Reduzir quadros-chave / comprimir |
| Outros | < 2% | Desduplicação |
Fórmula de VRAM
VRAM formato tradicional = largura * altura * 4 bytes * 1.333 (com mipmaps)
VRAM KTX2 comprimido por blocos ≈ acima / 4 (ETC1S) ou / 2 (UASTC)
Seleção de compressão de vértices
| Cenário | Recomendação |
|---|---|
| Zero dependências, mais simples | Quantização simples (KHR_mesh_quantization) |
| Equilibrado, primeiro para web | MeshOpt |
| Taxa máxima, pode esperar decodificação | Draco |
| Mini Programa / sensível ao pacote | Quantização simples / MeshOpt; evite Draco |
Seleção de compressão de texturas
| Tipo de mapa | Codificação recomendada |
|---|---|
| albedo / emissive (cor) | KTX2 ETC1S |
| normal / roughness / metallic / AO (dados) | KTX2 UASTC |
| Web desktop, buscando velocidade de download | WebP / AVIF |
| Mapas pequenos (< 128px) | Mantenha PNG, não use KTX2 |
Comando de uma vez
# Full optimization (texture + vertex + simplify)
gltf-transform optimize model.glb model-final.glb \
--texture-compress basisu --meshopt \
--simplify --simplify-ratio 0.5 --weld --prune
Resumo por plataforma
| Plataforma | Textura | Vértice |
|---|---|---|
| Web desktop | WebP / KTX2 | MeshOpt |
| Web mobile | KTX2 obrigatório | MeshOpt |
| VR | KTX2 obrigatório | MeshOpt + LOD |
| Mini Programa | KTX2 / WebP | MeshOpt / quantização |
| Cena grande | KTX2 obrigatório | MeshOpt + Draco + LOD |
Recapitulação da série
Seis artigos concluídos; encadeados, eles formam uma cadeia completa:
- Por que tão pesado: defina a composição do tamanho e a verdade sobre VRAM
- As três armas da compressão de vértices: princípios e escolha de quantização, MeshOpt, Draco
- O problema de VRAM das texturas: por que PNG/JPG são condenáveis aos olhos da GPU
- KTX2 na prática: seleção ETC1S/UASTC, cadeia de ferramentas, carregamento no engine
- Guia de seleção: framework de decisão por plataforma/cenário
- Este artigo: fluxo ponta a ponta, do Blender à produção
O cerne é uma frase: pense no gargalo primeiro (download/VRAM/taxa de quadros), depois escolha ferramentas; compressão de texturas tem o maior retorno, compressão de vértices é a cereja do bolo; plataformas diferentes têm destinos diferentes—não aplique uma regra universal.
Seguindo o script e o resumo deste artigo, levar seu modelo de 50MB para 5MB e a VRAM de 520MB para 70MB deve ser um caminho reproduzível. O resto é apenas fazer.