Any3DAny3D
·Any3D Team

Do Blender à Produção: Um Passo a Passo de Compressão Ponta a Ponta

3d-compressionpipelinetexture-compressionvertex-compressiongltf

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 inicialValor
Arquivo-fonte do Blender~120MB (incluindo alto polígono não exportado)
GLB exportado (float32 + PNG)~50MB
Contagem de vértices~180k
Mapas6 × 4096×4096 (albedo, normal, roughness, metallic, AO, emissive)
Uso de VRAM (6 totalmente descomprimidas)~520MB
ObjetivoArquivo ≤ 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: Automatic ou JPEG (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:

FerramentaForteFracoBom para
gltf-transformVersátil, texturas+vértices de uma vez; tem API, scriptávelTaxa máxima abaixo de ferramentas dedicadasFerramenta principal recomendada para a maioria dos cenários
gltfpackEspecialista em compressão de vértices, MeshOpt nativoCompressão de texturas fracaVértices densos, controle refinado de MeshOpt
toktxFerramenta de textura mais profissional, mais parâmetrosApenas texturas, não modelos inteirosAjuste fino de uma única textura
gltf-pipelineVeterana, suporta DracoManutenção inativa, poucas funcionalidadesProjetos legados existentes com Draco
Ferramentas online (gltf.report)Zero instalaçãoNão para automação/em loteExperimentos, 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
EtapaTamanho do arquivoVRAMMudança
Linha de base50MB~520MB
Passo 1 desduplicação45MB~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.

EtapaTamanho do arquivoVRAMMudança
Passo 145MB~520MB
Passo 2 + MeshOpt30MB~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.

EtapaTamanho do arquivoVRAMMudança
Passo 230MB~520MB
Passo 3 + KTX26MB~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.

EtapaTamanho do arquivoVRAMMudança
Passo 36MB~70MB
Passo 4 + simplify 0.54.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):

EtapaTamanho do arquivoVRAMRedução acumulada
Linha de base (float32 + PNG)50MB~520MB
+ desduplicação e fusão45MB~520MB-10%
+ vértices MeshOpt30MB~520MB-40%
+ texturas KTX26MB~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 --srgb em 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-ratio definido 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 fallback do KHR_texture_basisu como 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

ComponenteProporçãoFerramenta de otimização
Mapas de textura70-85%KTX2 (maior ganho)
Dados de vértices10-20%MeshOpt / quantização / Draco
Dados de animação0-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árioRecomendação
Zero dependências, mais simplesQuantização simples (KHR_mesh_quantization)
Equilibrado, primeiro para webMeshOpt
Taxa máxima, pode esperar decodificaçãoDraco
Mini Programa / sensível ao pacoteQuantização simples / MeshOpt; evite Draco

Seleção de compressão de texturas

Tipo de mapaCodificação recomendada
albedo / emissive (cor)KTX2 ETC1S
normal / roughness / metallic / AO (dados)KTX2 UASTC
Web desktop, buscando velocidade de downloadWebP / 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

PlataformaTexturaVértice
Web desktopWebP / KTX2MeshOpt
Web mobileKTX2 obrigatórioMeshOpt
VRKTX2 obrigatórioMeshOpt + LOD
Mini ProgramaKTX2 / WebPMeshOpt / quantização
Cena grandeKTX2 obrigatórioMeshOpt + Draco + LOD

Recapitulação da série

Seis artigos concluídos; encadeados, eles formam uma cadeia completa:

  1. Por que tão pesado: defina a composição do tamanho e a verdade sobre VRAM
  2. As três armas da compressão de vértices: princípios e escolha de quantização, MeshOpt, Draco
  3. O problema de VRAM das texturas: por que PNG/JPG são condenáveis aos olhos da GPU
  4. KTX2 na prática: seleção ETC1S/UASTC, cadeia de ferramentas, carregamento no engine
  5. Guia de seleção: framework de decisão por plataforma/cenário
  6. 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.

Apoie-nos