Plataformas Diferentes, Destinos Diferentes: Guia de Seleção de Esquemas de Compressão
Os 4 artigos anteriores abordaram as ferramentas de compressão de vértices e texturas. Mas saber usar uma ferramenta é uma coisa; qual usar e em qual cenário é outra. Este artigo responde exatamente essa pergunta — e, sempre que possível, para que você consiga decidir imediatamente após a leitura.
Ao terminar este artigo, você deverá conseguir responder: em qual plataforma meu projeto roda, o gargalo da primeira tela é download ou memória de vídeo (VRAM), e qual conjunto de soluções usar para texturas e vértices.
Primeiro, o Tom: Direcionado por Cenário, Não por Ferramenta
Este artigo tem apenas um princípio central, que também é o que esta série enfatiza repetidamente:
Não existe esquema de compressão "melhor", apenas o esquema que "melhor se adapta ao cenário".
Três variáveis influenciam a escolha:
- Plataforma/Dispositivo: PC desktop, navegador móvel, headset VR, mini-apps — as capacidades variam drasticamente
- Forma de uso: é uma exibição única (página de produto de e-commerce) ou uma imersão prolongada (jogo de VR)
- Gargalo principal: é a velocidade de download, a memória de vídeo insuficiente, ou a decodificação travando a primeira tela
Pense primeiro no gargalo e depois volte para escolher a ferramenta. A matriz abaixo consolida esse raciocínio.
Matriz de Decisão Central: Plataforma × Esquema Recomendado
Esta é a tabela mais importante do artigo. Dividida por plataforma, apresenta os esquemas recomendados para texturas e vértices, com suas justificativas.
| Plataforma / Cenário | Esquema de Textura | Esquema de Vértices | Gargalo Principal | Justificativa Chave |
|---|---|---|---|---|
| Web Desktop (navegador PC) | KTX2 ou WebP | MeshOpt / Quantização | Velocidade de download | VRAM folgada, foco em arquivo pequeno e carga rápida |
| Web Mobile (navegador celular) | KTX2 (obrigatório) | MeshOpt | Memória de vídeo | VRAM do celular é limitada, texturas precisam de compressão em blocos |
| WebXR / Headset VR | KTX2 (obrigatório) | MeshOpt + LOD | VRAM + taxa de quadros | VRAM estourada causa crash, queda de quadros causa enjoo |
| Mini-apps (WeChat, etc.) | KTX2 / WebP | MeshOpt / Quantização pura | Tamanho do pacote + compatibilidade | Pacote limitado, evitar decodificadores pesados |
| Exibição de produto e-commerce | WebP (leve) / KTX2 (detalhado) | MeshOpt | Velocidade da primeira tela | Exige carregamento instantâneo, trocar volume por velocidade |
| Cenas grandes / Gêmeo Digital | KTX2 (obrigatório) | MeshOpt + Draco + LOD | VRAM + draw calls | Muitas texturas, modelos grandes, compressão completa |
Alguns julgamentos que valem lembrar:
- Se a VRAM é o gargalo, KTX2 é obrigatório (mobile, VR, cenas grandes — todos se aplicam)
- Se a velocidade de download é o gargalo e a VRAM está folgada, WebP é suficiente (desktop, e-commerce)
- Em mini-apps, que são sensíveis ao tamanho do pacote, priorize MeshOpt em vez de Draco — decodificador menor, melhor compatibilidade
- Draco só é considerado para modelos muito grandes; para a grande maioria dos modelos de médio e pequeno porte, MeshOpt é mais equilibrado
Comparativo Completo de Formatos de Textura
Saber apenas "usar KTX2" não é suficiente. Em relação aos formatos de textura, vejamos todas as dimensões:
| Formato | Tamanho do arquivo | Uso de VRAM | Velocidade de upload | Compatibilidade | Qualidade de imagem | Cenário de uso |
|---|---|---|---|---|---|---|
| PNG | Grande | Grande (após descompressão) | Lenta | Ampla | Sem perdas | Precisa de valores numéricos precisos/transparência, ou como fallback para plataformas antigas |
| JPG | Muito pequeno | Grande (após descompressão) | Lenta | Ampla | Com perdas | Texturas de cor, prioridade em transmissão de rede |
| WebP | Muito pequeno | Grande (após descompressão) | Lenta | Razoavelmente ampla | Alta | Web desktop, busca por velocidade de download |
| AVIF | Ainda menor | Grande (após descompressão) | Lenta | Progressiva | Alta | Novas plataformas, compressão extrema |
| KTX2 (ETC1S) | Pequeno | Muito pequeno | Rápida | Requer transcodificação | Média (cor suficiente) | Texturas de cor, mobile/VR |
| KTX2 (UASTC) | Médio | Pequeno | Rápida | Requer transcodificação | Alta | Texturas de normais/dados |
Observe que as três primeiras linhas (PNG/JPG/WebP/AVIF) têm uso de VRAM "Alto" — não importa o quão pequeno seja o arquivo em disco, ao entrar na VRAM ele é descomprimido de volta para os pixels originais. Essa é a limitação fundamental dos formatos tradicionais.
Estratégia híbrida é comum: use KTX2 para as texturas de cor principais (garantindo VRAM) e use WebP para texturas secundárias (como um emissive pequeno) para simplificar. Não é necessário converter tudo para KTX2 — distribua conforme o gargalo.
Fluxograma de Decisão: Escolha Passo a Passo
A matriz é o resultado; o fluxograma mostra como chegar a esse resultado.
Onde seu projeto roda?
│
├─ Web Desktop (VRAM folgada)
│ └─ A primeira tela está lenta?
│ ├─ Lenta → WebP (ou AVIF) + MeshOpt [busca por velocidade de download]
│ └─ Não lenta, mas com muitos modelos → KTX2 + MeshOpt [deixe margem para o futuro]
│
├─ Web Mobile / VR / Cenas Grandes (VRAM apertada)
│ └─ Texturas: KTX2 obrigatório (ETC1S para cor, UASTC para dados)
│ └─ Malha de vértices superdensa?
│ ├─ Sim → + Draco [compressão extrema, aceite decodificação lenta]
│ └─ Não → + MeshOpt [equilibrado]
│
└─ Mini-apps / runtime limitado
└─ Sensível ao tamanho do pacote?
├─ Sensível → Quantização pura ou MeshOpt + WebP [decodificador zero/pequeno]
└─ Ok → MeshOpt + KTX2 [combinação padrão]
Compressão de Vértices vs Compressão de Texturas: Onde Investir?
Uma pergunta frequente: com orçamento limitado, o que otimizar primeiro? Depende da composição do modelo:
| Característica do Modelo | Prioridade de Investimento | Motivo |
|---|---|---|
| Personagem/Produto PBR (muitas texturas) | Compressão de texturas | Texturas representam 80%+ do volume; investir em vértices tem retorno baixo |
| Modelo CAD/Escaneado (vértices densos, poucas texturas) | Compressão de vértices | Vértices são o volume principal |
| Personagem animado (ossos + skin) | Invista nos dois, mas priorize vértices além do Draco | Dados de animação também ocupam volume; Draco tem suporte fraco para animação |
| Arquitetura/Cena (grande, texturas médias) | Texturas + LOD | Texturas economizam VRAM; LOD economiza draw calls |
Um ranking aproximado de retorno: Texturas KTX2 > Vértices MeshOpt/Quantização > Simplificação geométrica (LOD) > Vértices Draco. Comece pelo que tem maior retorno.
Estratégia Híbrida: Texturas Principais em KTX2, Secundárias em WebP
Nem toda textura merece ser convertida para KTX2. Um material PBR típico tem 5 a 6 texturas; converter todas para KTX2 é trabalhoso e, às vezes, desnecessário.
Divisão prática:
- KTX2 obrigatório: albedo (grande, cor), normal (sensível a precisão), roughness/metallic (afetam a iluminação)
- Pode usar WebP/JPG: emissive (geralmente pequeno), AO (média/baixa frequência), normal de detalhes (se houver)
Critério de decisão: a textura é grande? Tem detalhes de alta frequência? Será amostrada com frequência? Se sim para todos → KTX2; se não para todos → formato tradicional resolve.
Automação da Seleção: Tudo em Um Comando com gltf-transform
O comando optimize do gltf-transform é a solução ideal para a grande maioria dos cenários — ele identifica automaticamente o tipo de textura, comprime as texturas conforme a estratégia recomendada e opcionalmente processa os vértices.
# Instalação
npm install -g @gltf-transform/cli
# Otimização padrão: texturas KTX2 + vértices MeshOpt + remoção de redundâncias
gltf-transform optimize model.glb model-optimized.glb \
--texture-compress basisu \
--meshopt
Parâmetros:
| Parâmetro | Função | Padrão |
|---|---|---|
--texture-compress basisu | Comprime texturas para KTX2 (seleção automática ETC1S/UASTC) | Desligado |
--meshopt | Ativa compressão MeshOpt para vértices | Desligado |
--simplify | Simplificação geométrica (reduz vértices, com perdas) | Desligado |
--weld | Mescla vértices duplicados | Ligado |
--prune | Remove nós/materiais não utilizados | Ligado |
Uma combinação de "compressão pesada" adequada para mobile:
gltf-transform optimize model.glb model-mobile.glb \
--texture-compress basisu \
--meshopt \
--simplify --simplify-ratio 0.5 \
--prune --weld
Combinação "leve" para desktop (preserva detalhes, apenas comprime texturas e vértices):
gltf-transform optimize model.glb model-desktop.glb \
--texture-compress webp \
--meshopt
Não Quer Escrever Scripts? Use a Compressão Online do Any3D
Não quer instalar Node ou configurar um toolchain localmente? A compressão online do Any3D processa diretamente no navegador — selecione um GLB, ajuste os parâmetros visualmente conforme a plataforma (mobile/desktop/VR), e o modelo não é enviado para nenhum servidor (processamento 100% local), com exportação em um clique da versão comprimida. Por baixo dos panos, é a mesma base do gltf-transform, mas com zero curva de aprendizado. O próximo artigo sobre o pipeline completo vai conectar todos os passos.
Resumo em Uma Frase
- VRAM é o gargalo → KTX2, sem alternativa
- Download é o gargalo, VRAM folgada → WebP/AVIF também resolve
- Sensível ao tamanho do decodificador → MeshOpt > Quantização pura > Draco
- Modelo muito grande → aí sim considere Draco
- Em dúvida → rode
gltf-transform optimizede uma vez e ajuste se necessário
Próximos Passos
O framework de seleção está pronto. No artigo final: partindo de um modelo real, percorreremos todo o fluxo — exportação no Blender, compressão de texturas, compressão de vértices, carregamento no motor — com scripts completos e uma tabela de referência rápida da série.