Kris

Plataformas Diferentes, Destinos Diferentes: Guia de Seleção de Esquemas de Compressão

Compressão 3DCompressão de texturaCompressão de vérticesOtimizaçãoPipeline

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:

  1. Plataforma/Dispositivo: PC desktop, navegador móvel, headset VR, mini-apps — as capacidades variam drasticamente
  2. Forma de uso: é uma exibição única (página de produto de e-commerce) ou uma imersão prolongada (jogo de VR)
  3. 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árioEsquema de TexturaEsquema de VérticesGargalo PrincipalJustificativa Chave
Web Desktop (navegador PC)KTX2 ou WebPMeshOpt / QuantizaçãoVelocidade de downloadVRAM folgada, foco em arquivo pequeno e carga rápida
Web Mobile (navegador celular)KTX2 (obrigatório)MeshOptMemória de vídeoVRAM do celular é limitada, texturas precisam de compressão em blocos
WebXR / Headset VRKTX2 (obrigatório)MeshOpt + LODVRAM + taxa de quadrosVRAM estourada causa crash, queda de quadros causa enjoo
Mini-apps (WeChat, etc.)KTX2 / WebPMeshOpt / Quantização puraTamanho do pacote + compatibilidadePacote limitado, evitar decodificadores pesados
Exibição de produto e-commerceWebP (leve) / KTX2 (detalhado)MeshOptVelocidade da primeira telaExige carregamento instantâneo, trocar volume por velocidade
Cenas grandes / Gêmeo DigitalKTX2 (obrigatório)MeshOpt + Draco + LODVRAM + draw callsMuitas 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:

FormatoTamanho do arquivoUso de VRAMVelocidade de uploadCompatibilidadeQualidade de imagemCenário de uso
PNGGrandeGrande (após descompressão)LentaAmplaSem perdasPrecisa de valores numéricos precisos/transparência, ou como fallback para plataformas antigas
JPGMuito pequenoGrande (após descompressão)LentaAmplaCom perdasTexturas de cor, prioridade em transmissão de rede
WebPMuito pequenoGrande (após descompressão)LentaRazoavelmente amplaAltaWeb desktop, busca por velocidade de download
AVIFAinda menorGrande (após descompressão)LentaProgressivaAltaNovas plataformas, compressão extrema
KTX2 (ETC1S)PequenoMuito pequenoRápidaRequer transcodificaçãoMédia (cor suficiente)Texturas de cor, mobile/VR
KTX2 (UASTC)MédioPequenoRápidaRequer transcodificaçãoAltaTexturas 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 ModeloPrioridade de InvestimentoMotivo
Personagem/Produto PBR (muitas texturas)Compressão de texturasTexturas representam 80%+ do volume; investir em vértices tem retorno baixo
Modelo CAD/Escaneado (vértices densos, poucas texturas)Compressão de vérticesVértices são o volume principal
Personagem animado (ossos + skin)Invista nos dois, mas priorize vértices além do DracoDados de animação também ocupam volume; Draco tem suporte fraco para animação
Arquitetura/Cena (grande, texturas médias)Texturas + LODTexturas 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âmetroFunçãoPadrão
--texture-compress basisuComprime texturas para KTX2 (seleção automática ETC1S/UASTC)Desligado
--meshoptAtiva compressão MeshOpt para vérticesDesligado
--simplifySimplificação geométrica (reduz vértices, com perdas)Desligado
--weldMescla vértices duplicadosLigado
--pruneRemove nós/materiais não utilizadosLigado

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 optimize de 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.

Apoie-nos