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
Defold supporta l’elaborazione automatica delle texture e la compressione dei dati delle immagini (negli atlas, nelle sorgenti di tile, nelle cubemap e nelle texture autonome utilizzate per modelli, GUI ecc.).
Esistono due tipi di compressione: la compressione software delle immagini e la compressione hardware delle texture.
La compressione software (come PNG e JPEG) riduce lo spazio occupato su disco dalle risorse immagine. Questo riduce le dimensioni del bundle finale. Tuttavia, i file immagine devono essere decompressi quando vengono caricati in memoria, quindi un’immagine che occupa poco spazio su disco può comunque richiedere molta memoria.
Anche la compressione hardware delle texture riduce lo spazio occupato su disco dalle risorse immagine. A differenza della compressione software, però, riduce anche la memoria occupata dalle texture. Questo è possibile perché l’hardware grafico è in grado di gestire direttamente le texture compresse, senza doverle prima decomprimere.
L’elaborazione delle texture si configura tramite un apposito file di profili delle texture. In questo file crei profili che specificano quali formati compressi e quale tipo di compressione utilizzare quando si creano bundle per una determinata piattaforma. I profili vengono poi associati a schemi di percorso corrispondenti, consentendo di controllare con precisione quali file del progetto comprimere e come farlo.
Poiché tutti i metodi di compressione hardware delle texture disponibili comportano una perdita di dati, nelle texture compariranno degli artefatti. Questi artefatti dipendono molto dall’aspetto del materiale di partenza e dal metodo di compressione utilizzato. Prova il materiale di partenza e sperimenta per ottenere i risultati migliori. Una ricerca su Google può esserti utile.
Puoi scegliere quale compressione software delle immagini applicare ai dati finali delle texture (compressi o grezzi) negli archivi del bundle. Defold supporta i formati di compressione Basis Universal e ASTC.
La compressione è un’operazione che richiede molte risorse e molto tempo e può causare tempi di build molto lunghi, a seconda del numero di immagini delle texture da comprimere, dei formati delle texture scelti e del tipo di compressione software.
Basis Universal (o, in breve, BasisU) comprime l’immagine in un formato intermedio che viene transcodificato durante l’esecuzione in un formato hardware adatto alla GPU del dispositivo in uso. Il formato Basis Universal offre un’elevata qualità, ma comporta una perdita di dati. Tutte le immagini vengono inoltre compresse con LZ4 per ridurre ulteriormente le dimensioni dei file quando vengono memorizzate nell’archivio del gioco.
ASTC è un formato di compressione delle texture flessibile ed efficiente, sviluppato da ARM e standardizzato dal Khronos Group. Offre un’ampia gamma di dimensioni dei blocchi e di quantità di bit per texel, consentendo agli sviluppatori di bilanciare efficacemente la qualità delle immagini e l’utilizzo della memoria. ASTC supporta blocchi di varie dimensioni, da 4×4 a 12×12 texel, corrispondenti a quantità di bit che vanno da 8 bit per texel fino a 0,89 bit per texel. Questa flessibilità permette di controllare con precisione il compromesso tra la qualità delle texture e lo spazio di archiviazione necessario.
ASTC supporta blocchi di varie dimensioni, da 4×4 a 12×12 texel, corrispondenti a quantità di bit che vanno da 8 bit per texel fino a 0,89 bit per texel. Questa flessibilità permette di controllare con precisione il compromesso tra la qualità delle texture e lo spazio di archiviazione necessario. La tabella seguente mostra le dimensioni dei blocchi supportate e le corrispondenti quantità di bit:
| Dimensione del blocco (larghezza x altezza) | Bit 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 |
Sebbene ASTC offra ottimi risultati, non tutte le schede grafiche lo supportano. Ecco un breve elenco dei dispositivi supportati, suddivisi per produttore:
| Produttore della GPU | Supporto |
|---|---|
| ARM (Mali) | Tutte le GPU ARM Mali che supportano OpenGL ES 3.2 o Vulkan supportano ASTC. |
| Qualcomm (Adreno) | Le GPU Adreno che supportano OpenGL ES 3.2 o Vulkan supportano ASTC. |
| Apple | Le GPU Apple a partire dal chip A8 supportano ASTC. |
| NVIDIA | Il supporto di ASTC riguarda soprattutto le GPU mobili (ad esempio i chip basati su Tegra). |
| AMD (Radeon) | Le GPU AMD che supportano Vulkan generalmente supportano ASTC via software. |
| Intel (integrate) | ASTC è supportato via software nelle GPU Intel moderne. |
Ogni progetto contiene un file .texture_profiles specifico con la configurazione da utilizzare per comprimere le texture. Per impostazione predefinita, questo file è builtins/graphics/default.texture_profiles e contiene una configurazione che associa ogni risorsa texture a un profilo che utilizza RGBA senza compressione hardware delle texture e con la compressione predefinita dei file tramite ZLib.
Per aggiungere la compressione delle texture:


Per applicare la compressione delle texture nelle build dall’editor, seleziona File ▸ Preferences... e spunta Enable Texture Compression nella scheda General. Per le build eseguite con Bob, passa --texture-compression. Le impostazioni del profilo, come dimensioni delle immagini e mipmap, si applicano anche quando la compressione è disabilitata.

La sezione Path Settings del file di profili delle texture contiene un elenco di schemi di percorso e indica quale profilo utilizzare per elaborare le risorse il cui percorso corrisponde a ciascuno schema. I percorsi sono espressi come schemi “Ant Glob” (consulta la documentazione per i dettagli). Gli schemi possono utilizzare i seguenti caratteri jolly:
*sprite*.png corrisponde ai file sprite.png, sprite1.png e sprite_with_a_long_name.png.?sprite?.png corrisponde ai file sprite1.png, spriteA.png ma non a sprite.png o sprite_with_a_long_name.png.**/gui/** corrisponde a tutti i file nella directory /gui e in tutte le sue sottodirectory.
Questo esempio contiene due schemi di percorso e i profili corrispondenti.
/gui/**/*.atlas/gui o in una qualsiasi delle sue sottodirectory verranno elaborati secondo il profilo “gui_atlas”./**/*.atlasNota che il percorso più generico è inserito per ultimo. L’algoritmo di corrispondenza procede dall’alto verso il basso. Viene utilizzata la prima voce che corrisponde al percorso della risorsa. Un’espressione di percorso corrispondente situata più in basso nell’elenco non sostituisce mai la prima corrispondenza. Se i percorsi fossero stati inseriti nell’ordine inverso, ogni atlas sarebbe stato elaborato con il profilo “atlas”, compresi quelli nella directory /gui.
Le risorse texture che non corrispondono ad alcun percorso nel file di profili verranno compilate e ridimensionate alla potenza di 2 più vicina, ma per il resto rimarranno inalterate.
La sezione profiles del file di profili delle texture contiene un elenco di profili con un nome. Ogni profilo contiene una o più piattaforme, ciascuna descritta da un elenco di proprietà.

OS_ID_GENERIC corrisponde a tutte le piattaforme, OS_ID_WINDOWS ai bundle destinati a Windows, OS_ID_IOS ai bundle iOS e così via. Nota che, se specifichi OS_ID_GENERIC, verrà incluso per tutte le piattaforme.Se due impostazioni dei percorsi corrispondono allo stesso file e i percorsi utilizzano profili diversi con piattaforme diverse, verranno utilizzati entrambi i profili e verranno generate due texture.
keep_ktx2_format: false). Gli altri tipi di immagini, come PNG e JPEG, continuano a usare Formats. Conservare un formato sorgente compresso richiede che la compressione delle texture sia abilitata. Consulta Texture sorgente KTX2 per i dettagli su elaborazione e compatibilità.Ogni voce Formats aggiunta a un profilo presenta le seguenti proprietà:
| Preimpostazione | Nota |
|---|---|
LOW |
Compressione più rapida. Qualità dell’immagine bassa |
MEDIUM |
Compressione predefinita. Qualità dell’immagine migliore |
HIGH |
Compressione più lenta. Dimensioni del file ridotte |
HIGHEST |
Compressione lenta. Dimensioni del file minime |
Nota che il compressore uncompressed dispone di una sola preimpostazione chiamata uncompressed, che indica che alle texture non verrà applicata alcuna compressione.
Per l’elenco dei compressori disponibili, consulta Compressori
I profili texture si applicano ai file .ktx2 autonomi e alle immagini KTX2 incorporate nei file glTF o GLB. Le impostazioni dei percorsi corrispondono al percorso dell’immagine sorgente, compresi percorsi virtuali come /models/robot.glb/images/0.ktx2 per le immagini incorporate. Posiziona un’impostazione specifica del percorso KTX2 prima dei pattern di corrispondenza più generali.
Seleziona il profilo e la piattaforma, quindi scegli come elaborare l’ingresso KTX2:
| Keep KTX2 Format | Output compilato quando la compressione delle texture è abilitata |
|---|---|
| Abilitata | ETC1S rimane ETC1S, UASTC rimane UASTC, BC7 rimane BC7 e i dati sorgente grezzi restano non compressi. Le alternative Formats della piattaforma vengono ignorate per gli ingressi KTX2. |
| Disabilitata (predefinita) | Le immagini sorgente vengono decodificate e codificate usando Format, Compressor e Compressor Preset del profilo, anche quando la codifica scelta coincide con quella sorgente. |
Per esempio, questo profilo seleziona le sorgenti KTX2, ne conserva il formato e le mipmap e disabilita la premoltiplicazione dell’alpha:
path_settings { path: "**/*.ktx2" profile: "KTX2" }
profiles {
name: "KTX2"
platforms {
os: OS_ID_GENERIC
mipmaps: true
premultiply_alpha: false
keep_ktx2_format: true
}
}
Unisci queste voci al file dei profili texture assegnato in game.project e abilita la compressione delle texture per la build. Con la compressione disabilitata o senza un profilo corrispondente, le sorgenti KTX2 producono output non compresso.
Keep KTX2 Format riutilizza i livelli sorgente codificati quando possibile. Le modifiche all’orientamento, alla premoltiplicazione dell’alpha, alle dimensioni dell’immagine o alle mipmap possono richiedere la decodifica e una nuova codifica nello stesso formato. Le normali texture glTF KTX2 richiedono solitamente l’inversione Y di Defold, quindi conservare il formato non garantisce il riutilizzo dei dati codificati. Una nuova codifica può introdurre ulteriori perdite di qualità anche quando questa opzione è abilitata.
Assicurati che il formato sorgente conservato sia supportato dai dispositivi di destinazione. L’opzione non aggiunge decodificatori a runtime né supporto per formati GPU. Se un formato sorgente non è adatto a una destinazione, disabilita l’opzione per quella piattaforma e scegli formati di uscita e impostazioni di compressione compatibili.
Le texture per l’hardware grafico possono essere elaborate in dati non compressi o compressi con perdita di dati, con numeri di canali e profondità di bit diversi. La compressione hardware a dimensione fissa produce un’immagine di dimensioni fisse, indipendentemente dal contenuto. Ciò significa che la perdita di qualità durante la compressione dipende dal contenuto della texture originale.
Poiché la transcodifica della compressione Basis Universal dipende dalle funzionalità della GPU del dispositivo, i formati consigliati per l’uso con la compressione Basis Universal sono quelli generici, come:
TEXTURE_FORMAT_RGB, TEXTURE_FORMAT_RGBA, TEXTURE_FORMAT_RGB_16BPP, TEXTURE_FORMAT_RGBA_16BPP, TEXTURE_FORMAT_LUMINANCE e TEXTURE_FORMAT_LUMINANCE_ALPHA.
Il transcodificatore Basis Universal supporta molti formati di output, come ASTC4x4, BCx, ETC2, ETC1 e PVRTC1.
Attualmente sono supportati i seguenti formati di compressione con perdita di dati:
| Formato | Compressione | Dettagli |
|---|---|---|
TEXTURE_FORMAT_RGB |
nessuna | Colore a 3 canali. Il canale alfa viene scartato |
TEXTURE_FORMAT_RGBA |
nessuna | Colore a 3 canali e canale alfa completo. |
TEXTURE_FORMAT_RGB_16BPP |
nessuna | Colore a 3 canali. 5+6+5 bit. |
TEXTURE_FORMAT_RGBA_16BPP |
nessuna | Colore a 3 canali e canale alfa completo. 4+4+4+4 bit. |
TEXTURE_FORMAT_LUMINANCE |
nessuna | Scala di grigi a 1 canale, senza alfa. I canali RGB vengono moltiplicati per ottenere un unico canale. Il canale alfa viene scartato. |
TEXTURE_FORMAT_LUMINANCE_ALPHA |
nessuna | Scala di grigi a 1 canale e canale alfa completo. I canali RGB vengono moltiplicati per ottenere un unico canale. |
Per ASTC, il numero di canali è sempre 4 (RGB + alfa) e il formato stesso definisce le dimensioni del blocco di compressione. Nota che questi formati sono compatibili soltanto con un compressore ASTC: qualsiasi altra combinazione produrrà un errore di 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
I seguenti compressori di texture sono supportati per impostazione predefinita. I dati vengono decompressi quando il file della texture viene caricato in memoria.
| Nome | Formati | Nota |
|---|---|---|
Uncompressed |
Tutti i formati | Non viene applicata alcuna compressione. Impostazione predefinita. |
BasisU |
Tutti i formati RGB/RGBA | Compressione Basis Universal di alta qualità, con perdita di dati. Un livello di qualità inferiore produce dimensioni minori. |
ASTC |
Tutti i formati ASTC | Compressione ASTC con perdita di dati. Un livello di qualità inferiore produce dimensioni minori. |
Defold supporta compressori installabili nella pipeline di compressione delle texture. Ciò consente di implementare in un’estensione un algoritmo di compressione delle texture, come WEBP o un algoritmo completamente personalizzato.
Per comprendere meglio il risultato, ecco un esempio. Nota che la qualità dell’immagine, il tempo di compressione e le dimensioni dopo la compressione dipendono sempre dall’immagine di partenza e possono variare.
Immagine di partenza (1024x512):

| Preimpostazione | Tempo di compressione | Tempo relativo |
|---|---|---|
LOW |
0m0.143s | 0.5x |
MEDIUM |
0m0.294s | 1.0x |
HIGH |
0m1.764s | 6.0x |
HIGHEST |
0m1.109s | 3.8x |
Il confronto viene eseguito con lo strumento basisu (misurando il PSNR)
100 dB significa che non c’è alcuna perdita di segnale (cioè l’immagine è identica all’originale).
| Preimpostazione | Segnale |
|---|---|
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 |
Le dimensioni del file originale sono 1572882 byte.
| Preimpostazione | Dimensioni dei file | Rapporto |
|---|---|---|
LOW |
357225 | 22.71 % |
MEDIUM |
365548 | 23.24 % |
HIGH |
277186 | 17.62 % |
HIGHEST |
254380 | 16.17 % |
Ecco le immagini risultanti (ottenute dalla codifica ASTC tramite lo strumento basisu)
LOW

MEDIUM

HIGH

HIGHEST
