This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
O Defold suporta processamento automático de texturas e compressão de dados de imagem (em Atlas, Tile sources, Cubemaps e texturas independentes usadas para modelos, GUI etc).
Há dois tipos de compressão: compressão de imagem por software e compressão de textura por hardware.
Compressão por software (como PNG e JPEG) reduz o tamanho de armazenamento dos recursos de imagem. Isso torna o tamanho final do bundle menor. No entanto, os arquivos de imagem precisam ser descomprimidos ao serem lidos para a memória; portanto, mesmo que uma imagem seja pequena em disco, ela pode ter um grande uso de memória.
Compressão de textura por hardware também reduz o tamanho de armazenamento dos recursos de imagem. Mas, ao contrário da compressão por software, ela reduz o uso de memória das texturas. Isso acontece porque o hardware gráfico consegue gerenciar diretamente texturas comprimidas sem precisar descomprimi-las antes.
O processamento de texturas é configurado por meio de um perfil de textura específico. Nesse arquivo, você cria profiles que expressam quais formato(s) e tipo comprimidos devem ser usados ao criar bundles para uma plataforma específica. Profiles são então vinculados a patterns de caminhos de arquivo correspondentes, permitindo controle refinado sobre quais arquivos no seu projeto devem ser comprimidos e exatamente como.
Como toda compressão de textura por hardware disponível é com perdas, você terá artefatos nos dados de textura. Esses artefatos dependem muito da aparência do material de origem e do método de compressão usado. Você deve testar seu material de origem e experimentar para obter os melhores resultados. O Google é seu amigo aqui.
Você pode selecionar qual compressão de imagem por software será aplicada aos dados finais da textura (comprimidos ou brutos) nos arquivos de bundle. O Defold suporta os formatos de compressão Basis Universal e ASTC.
Compressão é uma operação intensiva em recursos e demorada, que pode causar tempos de build muito longos dependendo do número de imagens de textura a comprimir e também dos formatos de textura e do tipo de compressão por software escolhidos.
Basis Universal (ou BasisU, abreviado) comprime a imagem em um formato intermediário que é transcodificado em tempo de execução para um formato de hardware apropriado para a GPU do dispositivo atual. O formato Basis Universal é de alta qualidade, mas com perdas. Todas as imagens também são comprimidas usando LZ4 para reduzir ainda mais o tamanho de arquivo quando armazenadas no arquivo do jogo.
ASTC é um formato de compressão de textura flexível e eficiente desenvolvido pela ARM e padronizado pelo Khronos Group. Ele oferece uma ampla variedade de tamanhos de bloco e taxas de bits, permitindo que desenvolvedores equilibrem qualidade de imagem e uso de memória de forma eficiente. ASTC suporta vários tamanhos de bloco, de 4×4 a 12×12 texels, correspondendo a taxas de bits que vão de 8 bits por texel até 0.89 bits por texel. Essa flexibilidade permite controle refinado da troca entre qualidade da textura e requisitos de armazenamento.
ASTC suporta vários tamanhos de bloco, de 4×4 a 12×12 texels, correspondendo a taxas de bits que vão de 8 bits por texel até 0.89 bits por texel. Essa flexibilidade permite controle refinado da troca entre qualidade da textura e requisitos de armazenamento. A tabela a seguir mostra os tamanhos de bloco suportados e suas taxas de bits correspondentes:
| Block Size (width x height) | Bits per pixel |
|---|---|
| 4x4 | 8.00 |
| 5x4 | 6.40 |
| 5x5 | 5.12 |
| 6x5 | 4.27 |
| 6x6 | 3.56 |
| 8x5 | 3.20 |
| 8x6 | 2.67 |
| 10x5 | 2.56 |
| 10x6 | 2.13 |
| 8x8 | 2.00 |
| 10x8 | 1.60 |
| 10x10 | 1.28 |
| 12x10 | 1.07 |
| 12x12 | 0.89 |
Embora ASTC ofereça ótimos resultados, ele não é suportado por todas as placas gráficas. Aqui está uma pequena lista de dispositivos suportados por fornecedor:
| GPU vendor | Support |
|---|---|
| ARM (Mali) | Todas as GPUs ARM Mali com suporte a OpenGL ES 3.2 ou Vulkan suportam ASTC. |
| Qualcomm (Adreno) | GPUs Adreno com suporte a OpenGL ES 3.2 ou Vulkan suportam ASTC. |
| Apple | GPUs Apple desde o chip A8 suportam ASTC. |
| NVIDIA | O suporte a ASTC é principalmente para GPUs móveis (por exemplo, chips baseados em Tegra). |
| AMD (Radeon) | GPUs AMD com suporte a Vulkan geralmente suportam ASTC via software. |
| Intel (Integrated) | ASTC é suportado em GPUs Intel modernas via software. |
Cada projeto contém um arquivo .texture_profiles específico que contém a configuração usada ao comprimir texturas. Por padrão, esse arquivo é builtins/graphics/default.texture_profiles e tem uma configuração que corresponde a todos os recursos de textura para um perfil usando RGBA, sem compressão de textura por hardware e usando a compressão de arquivo ZLib padrão.
Para adicionar compressão de textura:


Você pode ativar e desativar o uso de perfis de textura nas preferências do editor. Selecione File ▸ Preferences.... A aba General contém a caixa de seleção Enable texture profiles.

A seção Path Settings do arquivo de perfis de textura contém uma lista de padrões de caminho e qual profile usar ao processar recursos que correspondem ao caminho. Os caminhos são expressos como padrões “Ant Glob” (veja a documentação para detalhes). Padrões podem ser expressos usando os seguintes curingas:
*sprite*.png corresponde aos arquivos sprite.png, sprite1.png e sprite_with_a_long_name.png.?sprite?.png corresponde aos arquivos sprite1.png, spriteA.png, mas não a sprite.png ou sprite_with_a_long_name.png.**/gui/** corresponde a todos os arquivos no diretório /gui e em todos os seus subdiretórios.
Este exemplo contém dois padrões de caminho e seus perfis correspondentes.
/gui/**/*.atlas/gui ou em qualquer um de seus subdiretórios serão processados de acordo com o perfil “gui_atlas”./**/*.atlasObserve que o caminho mais genérico é colocado por último. O algoritmo de correspondência funciona de cima para baixo. A primeira ocorrência que corresponde ao caminho do recurso será usada. Uma expressão de caminho correspondente mais abaixo na lista nunca sobrescreve a primeira correspondência. Se os caminhos tivessem sido colocados na ordem oposta, todo atlas teria sido processado com o perfil “atlas”, inclusive os do diretório /gui.
Recursos de textura que não correspondem a nenhum caminho no arquivo de perfis serão compilados e escalados para a potência de 2 mais próxima, mas fora isso serão deixados intactos.
A seção profiles do arquivo de perfis de textura contém uma lista de perfis nomeados. Cada perfil contém uma ou mais platforms, cada plataforma descrita por uma lista de propriedades.

OS_ID_GENERIC corresponde a todas as plataformas, OS_ID_WINDOWS corresponde a bundles-alvo Windows, OS_ID_IOS corresponde a bundles iOS e assim por diante. Observe que, se OS_ID_GENERIC for especificado, ele será incluído para todas as plataformas.Se duas configurações de caminho corresponderem ao mesmo arquivo e o caminho usar perfis diferentes com plataformas diferentes, ambos os perfis serão usados e duas texturas serão geradas.
Os Formats adicionados a um perfil têm as seguintes propriedades:
| Predefinição | Observação |
|---|---|
LOW |
Compressão mais rápida. Baixa qualidade de imagem |
MEDIUM |
Compressão padrão. Melhor qualidade de imagem |
HIGH |
Compressão mais lenta. Tamanho de arquivo menor |
HIGHEST |
Compressão lenta. Menor tamanho de arquivo |
Observe que o compressor uncompressed tem apenas um preset chamado uncompressed, o que significa que nenhuma compressão será aplicada às texturas.
Para ver a lista de compressores disponíveis, veja Compressors
Texturas de hardware gráfico podem ser processadas em dados sem compressão ou comprimidos com perdas, com vários números de canais e profundidades de bits. Compressão de hardware fixa significa que a imagem resultante terá tamanho fixo, independentemente do conteúdo da imagem. Isso significa que a perda de qualidade durante a compressão depende do conteúdo da textura original.
Como a transcodificação da compressão Basis Universal depende das capacidades da GPU do dispositivo, os formatos recomendados para uso com compressão Basis Universal são formatos genéricos como:
TEXTURE_FORMAT_RGB, TEXTURE_FORMAT_RGBA, TEXTURE_FORMAT_RGB_16BPP, TEXTURE_FORMAT_RGBA_16BPP, TEXTURE_FORMAT_LUMINANCE e TEXTURE_FORMAT_LUMINANCE_ALPHA.
O transcodificador Basis Universal suporta muitos formatos de saída, como ASTC4x4, BCx, ETC2, ETC1 e PVRTC1.
Os seguintes formatos de compressão com perdas são suportados atualmente:
| Formato | Compressão | Detalhes |
|---|---|---|
TEXTURE_FORMAT_RGB |
none | Cor de 3 canais. Alpha é descartado |
TEXTURE_FORMAT_RGBA |
none | Cor de 3 canais e alpha completo. |
TEXTURE_FORMAT_RGB_16BPP |
none | Cor de 3 canais. 5+6+5 bits. |
TEXTURE_FORMAT_RGBA_16BPP |
none | Cor de 3 canais e alpha completo. 4+4+4+4 bits. |
TEXTURE_FORMAT_LUMINANCE |
none | Escala de cinza de 1 canal, sem alpha. Canais RGB multiplicados em um. Alpha é descartado. |
TEXTURE_FORMAT_LUMINANCE_ALPHA |
none | Escala de cinza de 1 canal e alpha completo. Canais RGB multiplicados em um. |
Para ASTC, o número de canais sempre será 4 (RGB + alpha), e o próprio formato define o tamanho do bloco de compressão. Observe que esses formatos só são compatíveis com um compressor ASTC - qualquer outra combinação produzirá um erro de build.
TEXTURE_FORMAT_RGBA_ASTC_4X4
TEXTURE_FORMAT_RGBA_ASTC_5X4
TEXTURE_FORMAT_RGBA_ASTC_5X5
TEXTURE_FORMAT_RGBA_ASTC_6X5
TEXTURE_FORMAT_RGBA_ASTC_6X6
TEXTURE_FORMAT_RGBA_ASTC_8X5
TEXTURE_FORMAT_RGBA_ASTC_8X6
TEXTURE_FORMAT_RGBA_ASTC_8X8
TEXTURE_FORMAT_RGBA_ASTC_10X5
TEXTURE_FORMAT_RGBA_ASTC_10X6
TEXTURE_FORMAT_RGBA_ASTC_10X8
TEXTURE_FORMAT_RGBA_ASTC_10X10
TEXTURE_FORMAT_RGBA_ASTC_12X10
TEXTURE_FORMAT_RGBA_ASTC_12X12
Os seguintes compressores de textura são suportados por padrão. Os dados são descomprimidos quando o arquivo de textura é carregado na memória.
| Nome | Formatos | Observação |
|---|---|---|
Uncompressed |
Todos os formatos | Nenhuma compressão será aplicada. Padrão. |
BasisU |
Todos os formatos RGB/RGBA | Basis Universal de alta qualidade, compressão com perdas. Nível de qualidade menor resulta em tamanho menor. |
ASTC |
Todos os formatos ASTC | Compressão ASTC com perdas. Nível de qualidade menor resulta em tamanho menor. |
O Defold 1.9.7 refatorou o pipeline de compressores de textura para suportar compressores instaláveis, o que é o primeiro passo para permitir implementar um algoritmo de compressão de textura em uma extensão (como WEBP ou algo totalmente personalizado).
Para ajudar a entender melhor a saída, aqui está um exemplo. Observe que a qualidade da imagem, o tempo de compressão e o tamanho comprimido sempre dependem da imagem de entrada e podem variar.
Imagem base (1024x512):

| Predefinição | Tempo de compressão | Tempo relativo |
|---|---|---|
LOW |
0m0.143s | 0.5x |
MEDIUM |
0m0.294s | 1.0x |
HIGH |
0m1.764s | 6.0x |
HIGHEST |
0m1.109s | 3.8x |
A comparação é feita usando a ferramenta basisu (medindo o PSNR)
100 dB significa nenhuma perda de sinal (ou seja, é igual à imagem original).
| Predefinição | Sinal |
|---|---|
LOW |
Max: 34 Mean: 0.470 RMS: 1.088 PSNR: 47.399 dB |
MEDIUM |
Max: 35 Mean: 0.439 RMS: 1.061 PSNR: 47.620 dB |
HIGH |
Max: 37 Mean: 0.898 RMS: 1.606 PSNR: 44.018 dB |
HIGHEST |
Max: 51 Mean: 1.298 RMS: 2.478 PSNR: 40.249 dB |
O tamanho do arquivo original é 1572882 bytes.
| Predefinição | Tamanho de arquivo | Proporção |
|---|---|---|
LOW |
357225 | 22.71 % |
MEDIUM |
365548 | 23.24 % |
HIGH |
277186 | 17.62 % |
HIGHEST |
254380 | 16.17 % |
Aqui estão as imagens resultantes (recuperadas da codificação ASTC usando a ferramenta basisu)
LOW

MEDIUM

HIGH

HIGHEST
