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 unterstützt die automatische Verarbeitung von Texturen und die Komprimierung von Bilddaten (in Atlanten (Atlas), Kachelquellen (tile sources), Cubemaps und eigenständigen Texturen für Modelle, GUI usw.).
Es gibt zwei Arten der Komprimierung: Software-Bildkomprimierung und Hardware-Texturkomprimierung.
Software-Komprimierung (wie PNG und JPEG) verringert den Speicherplatzbedarf von Bildressourcen. Dadurch wird das fertige Bundle kleiner. Die Bilddateien müssen jedoch beim Einlesen in den Arbeitsspeicher dekomprimiert werden. Auch wenn ein Bild auf dem Datenträger klein ist, kann es daher viel Arbeitsspeicher belegen.
Hardware-Texturkomprimierung verringert ebenfalls den Speicherplatzbedarf von Bildressourcen. Anders als Software-Komprimierung verringert sie jedoch auch den Arbeitsspeicherbedarf von Texturen. Das liegt daran, dass die Grafikhardware komprimierte Texturen direkt verarbeiten kann, ohne sie zuvor dekomprimieren zu müssen.
Die Verarbeitung von Texturen wird über ein bestimmtes Texturprofil (texture profile) konfiguriert. In dieser Datei erstellst du Profile, die festlegen, welche Komprimierungsformate und welche Komprimierungsart beim Erstellen von Bundles für eine bestimmte Plattform verwendet werden sollen. Profile werden anschließend mit passenden Dateipfadmustern verknüpft. So kannst du genau steuern, welche Dateien in deinem Projekt komprimiert werden und wie dies geschieht.
Da alle verfügbaren Verfahren zur Hardware-Texturkomprimierung verlustbehaftet sind, entstehen Artefakte in deinen Texturdaten. Diese Artefakte hängen stark davon ab, wie dein Ausgangsmaterial aussieht und welche Komprimierungsmethode verwendet wird. Du solltest dein Ausgangsmaterial testen und experimentieren, um die besten Ergebnisse zu erzielen. Google kann dir dabei helfen.
Du kannst auswählen, welche Software-Bildkomprimierung auf die endgültigen Texturdaten (komprimiert oder unkomprimiert) in den Bundle-Archiven angewendet wird. Defold unterstützt die Komprimierungsformate Basis Universal und ASTC.
Komprimierung ist ein ressourcenintensiver und zeitaufwendiger Vorgang, der zu sehr langen Build-Zeiten führen kann. Diese hängen von der Anzahl der zu komprimierenden Texturbilder sowie von den gewählten Texturformaten und der Art der Software-Komprimierung ab.
Basis Universal (kurz BasisU) komprimiert das Bild in ein Zwischenformat, das zur Laufzeit in ein Hardwareformat transkodiert wird, das für die GPU des aktuellen Geräts geeignet ist. Das Basis-Universal-Format bietet eine hohe Qualität, ist aber verlustbehaftet. Alle Bilder werden außerdem mit LZ4 komprimiert, um die Dateigröße beim Speichern im Spielarchiv weiter zu verringern.
ASTC ist ein flexibles und effizientes Format zur Texturkomprimierung, das von ARM entwickelt und von der Khronos Group standardisiert wurde. Es bietet eine große Auswahl an Blockgrößen und Bitraten, mit denen du Bildqualität und Speicherbedarf wirksam aufeinander abstimmen kannst. ASTC unterstützt verschiedene Blockgrößen von 4×4 bis 12×12 Texeln. Diese entsprechen Bitraten von 8 Bit pro Texel bis hinunter zu 0,89 Bit pro Texel. Diese Flexibilität ermöglicht eine feine Abstimmung zwischen Texturqualität und Speicherplatzbedarf.
ASTC unterstützt verschiedene Blockgrößen von 4×4 bis 12×12 Texeln. Diese entsprechen Bitraten von 8 Bit pro Texel bis hinunter zu 0,89 Bit pro Texel. Diese Flexibilität ermöglicht eine feine Abstimmung zwischen Texturqualität und Speicherplatzbedarf. Die folgende Tabelle zeigt die unterstützten Blockgrößen und ihre jeweiligen Bitraten:
| Blockgröße (Breite x Höhe) | Bit pro 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 |
ASTC liefert zwar sehr gute Ergebnisse, wird aber nicht von allen Grafikkarten unterstützt. Hier findest du eine kurze Liste unterstützter Geräte nach Hersteller:
| GPU-Hersteller | Unterstützung |
|---|---|
| ARM (Mali) | Alle ARM-Mali-GPUs, die OpenGL ES 3.2 oder Vulkan unterstützen, unterstützen ASTC. |
| Qualcomm (Adreno) | Adreno-GPUs, die OpenGL ES 3.2 oder Vulkan unterstützen, unterstützen ASTC. |
| Apple | Apple-GPUs unterstützen ASTC seit dem A8-Chip. |
| NVIDIA | ASTC wird hauptsächlich von mobilen GPUs unterstützt (z. B. Tegra-basierten Chips). |
| AMD (Radeon) | AMD-GPUs, die Vulkan unterstützen, unterstützen ASTC in der Regel über Software. |
| Intel (integriert) | Moderne Intel-GPUs unterstützen ASTC über Software. |
Jedes Projekt enthält eine bestimmte Datei mit der Endung .texture_profiles, die die Konfiguration für die Texturkomprimierung enthält. Standardmäßig ist dies die Datei builtins/graphics/default.texture_profiles. Ihre Konfiguration ordnet jede Texturressource einem Profil zu, das RGBA ohne Hardware-Texturkomprimierung und die standardmäßige ZLib-Dateikomprimierung verwendet.
So fügst du Texturkomprimierung hinzu:


Du kannst die Verwendung von Texturprofilen in den Editoreinstellungen ein- und ausschalten. Wähle File ▸ Preferences.... Die Registerkarte General enthält das Kontrollkästchen Enable texture profiles.

Der Abschnitt Path Settings der Texturprofildatei enthält eine Liste von Pfadmustern und legt fest, welches Profil bei der Verarbeitung von Ressourcen verwendet werden soll, die zum Pfad passen. Die Pfade werden als „Ant Glob“-Muster angegeben (Einzelheiten findest du in der Dokumentation). Muster können mit den folgenden Platzhaltern angegeben werden:
*sprite*.png auf die Dateien sprite.png, sprite1.png und sprite_with_a_long_name.png.?sprite?.png auf die Dateien sprite1.png, spriteA.png, aber nicht auf sprite.png oder sprite_with_a_long_name.png.**/gui/** auf alle Dateien im Verzeichnis /gui und in allen seinen Unterverzeichnissen.
Dieses Beispiel enthält zwei Pfadmuster und die zugehörigen Profile.
/gui/**/*.atlas/gui oder in einem seiner Unterverzeichnisse werden gemäß dem Profil „gui_atlas“ verarbeitet./**/*.atlasBeachte, dass der allgemeinere Pfad am Ende steht. Der Abgleichalgorithmus arbeitet von oben nach unten. Der erste Eintrag, der zum Ressourcenpfad passt, wird verwendet. Ein passender Pfadausdruck weiter unten in der Liste überschreibt niemals den ersten Treffer. Wären die Pfade in umgekehrter Reihenfolge angegeben, würde jeder Atlas mit dem Profil „atlas“ verarbeitet, auch die Atlanten im Verzeichnis /gui.
Texturressourcen, die auf keinen Pfad in der Profildatei passen, werden kompiliert und auf die nächstgelegene Zweierpotenz skaliert, bleiben ansonsten aber unverändert.
Der Abschnitt profiles der Texturprofildatei enthält eine Liste benannter Profile. Jedes Profil enthält eine oder mehrere platforms, wobei jede Plattform durch eine Liste von Eigenschaften beschrieben wird.

OS_ID_GENERIC passt auf alle Plattformen, OS_ID_WINDOWS auf Bundles für Windows, OS_ID_IOS auf iOS-Bundles und so weiter. Beachte, dass OS_ID_GENERIC, wenn es angegeben ist, für alle Plattformen einbezogen wird.Wenn zwei Pfadeinstellungen auf dieselbe Datei passen und die Pfade unterschiedliche Profile mit unterschiedlichen Plattformen verwenden, werden beide Profile verwendet und zwei Texturen erzeugt.
Jeder einem Profil hinzugefügte Eintrag unter Formats hat die folgenden Eigenschaften:
| Voreinstellung | Hinweis |
|---|---|
LOW |
Schnellste Komprimierung. Niedrige Bildqualität |
MEDIUM |
Standardkomprimierung. Beste Bildqualität |
HIGH |
Langsamste Komprimierung. Kleinere Dateigröße |
HIGHEST |
Langsame Komprimierung. Kleinste Dateigröße |
Beachte, dass der Kompressor uncompressed nur eine Voreinstellung namens uncompressed hat. Sie bedeutet, dass keine Komprimierung auf die Texturen angewendet wird.
Eine Liste der verfügbaren Kompressoren findest du unter Kompressoren.
Texturen für die Grafikhardware können in unkomprimierte oder verlustbehaftet komprimierte Daten mit unterschiedlicher Kanalanzahl und Bittiefe umgewandelt werden. Bei einer festen Hardware-Komprimierung hat das resultierende Bild unabhängig vom Bildinhalt eine feste Größe. Das bedeutet, dass der Qualitätsverlust bei der Komprimierung vom Inhalt der ursprünglichen Textur abhängt.
Da die Transkodierung bei der Basis-Universal-Komprimierung von den Fähigkeiten der GPU des Geräts abhängt, werden für die Verwendung mit Basis Universal generische Formate empfohlen, etwa:
TEXTURE_FORMAT_RGB, TEXTURE_FORMAT_RGBA, TEXTURE_FORMAT_RGB_16BPP, TEXTURE_FORMAT_RGBA_16BPP, TEXTURE_FORMAT_LUMINANCE und TEXTURE_FORMAT_LUMINANCE_ALPHA.
Der Basis-Universal-Transkoder unterstützt viele Ausgabeformate, etwa ASTC4x4, BCx, ETC2, ETC1 und PVRTC1.
Die folgenden verlustbehafteten Komprimierungsformate werden derzeit unterstützt:
| Format | Komprimierung | Einzelheiten |
|---|---|---|
TEXTURE_FORMAT_RGB |
keine | 3 Farbkanäle. Alpha wird verworfen. |
TEXTURE_FORMAT_RGBA |
keine | 3 Farbkanäle und vollständiger Alphakanal. |
TEXTURE_FORMAT_RGB_16BPP |
keine | 3 Farbkanäle. 5+6+5 Bit. |
TEXTURE_FORMAT_RGBA_16BPP |
keine | 3 Farbkanäle und vollständiger Alphakanal. 4+4+4+4 Bit. |
TEXTURE_FORMAT_LUMINANCE |
keine | 1 Graustufenkanal, kein Alpha. RGB-Kanäle werden zu einem Kanal multipliziert. Alpha wird verworfen. |
TEXTURE_FORMAT_LUMINANCE_ALPHA |
keine | 1 Graustufenkanal und vollständiger Alphakanal. RGB-Kanäle werden zu einem Kanal multipliziert. |
Bei ASTC beträgt die Anzahl der Kanäle immer 4 (RGB + Alpha), und das Format selbst legt die Blockgröße der Komprimierung fest. Beachte, dass diese Formate nur mit einem ASTC-Kompressor kompatibel sind - jede andere Kombination führt zu einem Build-Fehler.
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
Die folgenden Texturkompressoren werden standardmäßig unterstützt. Die Daten werden dekomprimiert, wenn die Texturdatei in den Arbeitsspeicher geladen wird.
| Name | Formate | Hinweis |
|---|---|---|
Uncompressed |
Alle Formate | Es wird keine Komprimierung angewendet. Standard. |
BasisU |
Alle RGB/RGBA-Formate | Hochwertige, verlustbehaftete Komprimierung mit Basis Universal. Eine niedrigere Qualitätsstufe ergibt eine geringere Größe. |
ASTC |
Alle ASTC-Formate | Verlustbehaftete ASTC-Komprimierung. Eine niedrigere Qualitätsstufe ergibt eine geringere Größe. |
Defold unterstützt installierbare Kompressoren in der Pipeline zur Texturkomprimierung. Dadurch kannst du einen Algorithmus zur Texturkomprimierung in einer Erweiterung implementieren, etwa WEBP oder einen vollständig eigenen Algorithmus.
Das folgende Beispiel soll das Ergebnis veranschaulichen. Beachte, dass Bildqualität, Komprimierungsdauer und komprimierte Größe immer vom Eingabebild abhängen und variieren können.
Ausgangsbild (1024x512):

| Voreinstellung | Komprimierungsdauer | Relative Dauer |
|---|---|---|
LOW |
0m0.143s | 0.5x |
MEDIUM |
0m0.294s | 1.0x |
HIGH |
0m1.764s | 6.0x |
HIGHEST |
0m1.109s | 3.8x |
Der Vergleich wird mit dem Werkzeug basisu durchgeführt (Messung des PSNR).
100 dB bedeutet keinen Signalverlust (d. h., das Bild ist mit dem Originalbild identisch).
| Voreinstellung | Signal |
|---|---|
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 |
Die ursprüngliche Dateigröße beträgt 1572882 Byte.
| Voreinstellung | Dateigrößen | Verhältnis |
|---|---|---|
LOW |
357225 | 22.71 % |
MEDIUM |
365548 | 23.24 % |
HIGH |
277186 | 17.62 % |
HIGHEST |
254380 | 16.17 % |
Hier siehst du die resultierenden Bilder (mit dem Werkzeug basisu aus der ASTC-Kodierung gewonnen).
LOW

MEDIUM

HIGH

HIGHEST
