Formato PKM e ETC: Guia Completo
PKM é um formato de contêiner simples para texturas compactadas em ETC, amplamente utilizado nas plataformas Android e OpenGL ES. Este artigo fornece um guia completo para compreender a estrutura do formato PKM, as versões de compactação ETC/ETC2 e como usá-los de maneira eficaz.
O que é o formato PKM?
PKM (abreviação de 'PoKeMon', nomeado por Ericsson) é um formato de contêiner simples projetado especificamente para armazenar dados de textura compactados em ETC. Ao contrário de formatos complexos como KTX ou DDS, o PKM possui uma estrutura mínima com apenas um cabeçalho de 16 bytes seguido por dados de imagem compactados.
O formato foi criado para fornecer uma maneira leve de armazenar e carregar texturas compactadas em ETC em dispositivos móveis. Sua simplicidade facilita a implementação e a análise, praticamente sem nenhuma sobrecarga além dos próprios dados de textura compactados.
Estrutura do arquivo PKM
- Cabeçalho de 16 bytes: número mágico (PKM), versão, formato, dimensões
- Dados de textura compactados: blocos ETC/ETC2 brutos
Versões de compressão ETC
Existem duas versões principais de compactação ETC, cada uma com recursos diferentes:
ETC1 (compressão de textura Ericsson 1)
O padrão ETC original, suportando apenas canais de cores RGB com taxa de compressão fixa de 4:1. Amplamente suportado em dispositivos Android desde OpenGL ES 2.0.
Apoiar: Todos os dispositivos OpenGL ES 2.0+
Taxa de compressão: 4:1 fixo (4 bits por pixel)
ETC2 (compressão de textura Ericsson 2)
Sucessor aprimorado do ETC1, adicionando suporte RGBA com múltiplas opções de formato. Fornece melhor qualidade e suporte ao canal alfa, mantendo a compatibilidade com versões anteriores.
Apoiar: OpenGL ES 3.0+, Vulkan
Taxa de compressão: 4:1 a 8:1 dependendo do formato
Variantes de formato PKM
PKM pode conter diferentes tipos de formato ETC:
ETC1 RGB
Formato original, somente RGB, sem canal alfa
ETC2 RGB
Compressão RGB aprimorada com melhor qualidade que ETC1
ETC2 RGBA
Suporte RGBA completo com compactação 8:1 (8 bits por pixel)
ETC2 RGB + Punch-through Alfa
RGB com alfa de 1 bit, mantendo compactação 4:1
Vantagens do PKM/ETC
Suporte universal para Android
O ETC1 tem suporte garantido em todos os dispositivos Android, tornando-o o formato de compactação mais portátil para desenvolvimento Android.
Taxa de compressão fixa
Uso de memória previsível com taxas de compactação consistentes de 4:1 ou 8:1, simplificando os cálculos de orçamento de memória.
Boa relação qualidade/tamanho
O ETC2 oferece excelente qualidade visual para a maioria dos tipos de textura, comparável a formatos de desktop como DXT/BCn.
Decodificação de hardware
Descompressão direta da GPU sem sobrecarga de CPU durante a renderização, permitindo amostragem de textura eficiente.
Limitações e considerações
Limites de qualidade ETC1
O ETC1 pode mostrar artefatos visíveis em texturas com detalhes de alta frequência ou gradientes suaves. Considere usar ETC2 para obter melhor qualidade.
Sem Alfa em ETC1
ETC1 não oferece suporte a canais alfa. Você precisa usar ETC2 RGBA ou armazenar alfa separadamente se for direcionado a dispositivos OpenGL ES 2.0.
Recursos avançados limitados
PKM não oferece suporte a mipmaps, cubemaps ou arrays de textura. Use os formatos KTX ou KTX2 para esses recursos avançados.
Como usar o formato PKM
Usar arquivos PKM em seus projetos é simples:
Codificação para PKM
- Carregue sua imagem PNG/JPG (deve ter dimensões de potência de 2 ou múltiplo de 4)
- Escolha entre ETC1 RGB ou ETC2 RGB/RGBA com base em suas necessidades
- Baixe o arquivo .pkm gerado e integre-o ao seu projeto
Decodificando arquivos PKM
- Carregue seu arquivo .pkm para verificar seu conteúdo
- Visualize a textura descompactada e verifique a qualidade
- Exporte para PNG se precisar editar ou inspecionar a textura
Melhores Práticas
- Use ETC1 RGB para máxima compatibilidade em todos os dispositivos Android (OpenGL ES 2.0+)
- Prefira ETC2 RGBA ao direcionar dispositivos modernos (OpenGL ES 3.0+) que precisam de canais alfa
- Certifique-se de que as dimensões da textura sejam múltiplos de 4 (ETC1) ou potência de 2 para obter melhor qualidade
- Para texturas que exigem alfa em dispositivos mais antigos, considere usar texturas separadas em tons de cinza
- Teste texturas compactadas em dispositivos de destino reais - a percepção de qualidade varia de acordo com o tipo de conteúdo
Conclusão
PKM com compactação ETC/ETC2 é a escolha padrão para desenvolvimento Android e OpenGL ES móvel. Seu suporte universal, desempenho previsível e boa qualidade o tornam um excelente padrão para compactação de texturas móveis.
Nossas ferramentas online de codificação e decodificação PKM facilitam o trabalho com texturas compactadas ETC sem a instalação de ferramentas de linha de comando ou SDKs. Esteja você criando novas texturas ou inspecionando as existentes, essas ferramentas ajudam a otimizar seu pipeline de gráficos móveis.
Leituras adicionais e referências
Saiba mais sobre os formatos ETC e PKM:
- Compressão de Textura ETC (Khronos) - Especificação oficial do OpenGL ES e documentação do formato ETC
- Compressão de textura Ericsson (Wikipedia) - História e detalhes técnicos dos algoritmos de compressão ETC
- Gráficos Android: compactação de textura - Guia oficial do Android para formatos de compactação de textura
- Especificação de formato de arquivo PKM - Especificação técnica para formato de contêiner PKM