Ich verwende .png
s für meine Texturen und verwende ein virtuelles Dateisystem in einer .zip
Datei für mein Spielprojekt. Das bedeutet, meine Texturen werden zweimal komprimiert und dekomprimiert. Was sind die Lösungen für dieses Problem der doppelten Komprimierung? Eine Lösung, von der ich gehört habe, ist die Verwendung von .tga
s für Texturen, aber es scheint eine Ewigkeit her zu sein, seit ich das gehört habe. Eine andere Lösung besteht darin, die Dekomprimierung auf der zu implementieren GPU
und, da dies schnell geht, den Overhead zu vergessen.
textures
assets
compression
user1095108
quelle
quelle
Antworten:
Das zip-Format unterstützt verschiedene Komprimierungsalgorithmen. Sie können für jede Datei im Archiv einen anderen Algorithmus verwenden. Wenn Sie bereits komprimierte Dateien, für die keine zusätzliche Komprimierung erforderlich ist (z. B. PNG), in einem Zip-Archiv speichern möchten, können Sie diese Dateien mit dem Algorithmus "Gespeichert" codieren, der überhaupt keine Komprimierung vornimmt. Im "Add to archive" -Dialog von 7-zip können Sie dies unter "Compression strength" auswählen.
Wenn Sie jedoch nicht nur Bilder, sondern auch andere, komprimierbarere Ressourcen in Ihren Archiven haben, kann es ziemlich mühsam sein, den Algorithmus für jede einzelne Datei auszuwählen. In diesem Fall entscheiden Sie sich möglicherweise eher für ein unkomprimiertes Bildformat in einem komprimierten Archiv.
Das TGA-Format kennt viele verschiedene Modi, von denen einige komprimiert sind und andere nicht. Wenn Sie keine Komprimierung verwenden möchten, stellen Sie sicher, dass Sie in den Exportoptionen des verwendeten Grafikeditors die richtige auswählen. Ein weiteres nicht komprimiertes Bildformat ist BMP (Windows Bitmap).
Hier ist ein Test, den ich gemacht habe. Ich habe das gleiche Bild (ein Asset aus meinem aktuellen Projekt) in verschiedenen Formaten mehrmals in ein Zip-Archiv eingefügt, einige mit "Deflate" -Algorithmus bei normaler Stärke und eines mit "Store". Sorry für die deutsche GUI. 2. Spalte ist nicht komprimierte Größe, 3. Spalte ist Kompressionsalgorithmus und 4. Spalte ist komprimierte Größe.
Wie Sie sehen, hat die Deflationierung des PNG nur magere 0,3% eingespart, während die Deflationierung des BMP auf ein Zehntel der Originaldatei reduziert wurde, die sogar noch kleiner als die PNG-Version ist. Das hat mich ziemlich überrascht. Ich hätte erwartet, dass das PNG kleiner ist, da die Komprimierungsmethode von PNG für Bilddaten optimiert werden sollte, während dies bei ZIP nicht der Fall ist. Eine wahrscheinliche Erklärung ist, dass mein Bildeditor (GIMP) PNG-Dateien ziemlich viele Metainformationen hinzugefügt hat, was für BMP nicht der Fall ist.
Unkomprimiertes TGA verhielt sich vor und nach dem Zippen hinsichtlich der Dateigröße ähnlich wie BMP, während die Komprimierung der komprimierten TGA-Datei durch ZIP weiter verbessert wurde, allerdings nicht so stark wie bei den unkomprimierten Versionen.
Es könnte sich lohnen, mit anderen Algorithmen als der Deflation und mit anderen Einstellungen für die Druckfestigkeit zu experimentieren. Welche Kombination die besten Ergebnisse erzielt, hängt wahrscheinlich vom Stil Ihrer Texturen ab. Sie können aber auch in Betracht ziehen, das Laden von Assets in Ihrem Spiel zu vergleichen und die Dekomprimierungsleistung zu beeinflussen, welche Einstellung Sie verwenden.
Bottom-line: Wenn Sie möchten , doppelt Kompression zu vermeiden , während immer noch eine geringe Dateigröße haben, verwenden Sie entweder
PNG
mitStore
Zip - Algorithmus oderBMP
mit einem Komprimieren Zip - Algorithmus.quelle
Mach dir keine Sorgen.
Wenn der in ZIP-Dateien verwendete "Deflate" -Algorithmus auf einen Datenblock stößt, der bereits gut komprimiert ist, wie z. B. die Pixeldaten eines PNG-Bilds, stellt er fest, dass er nicht effektiv komprimiert werden kann, und speichert ihn als Literal unkomprimierte Daten. Das Kopieren nimmt am Ende der Dekomprimierung nur sehr wenig Zeit in Anspruch.
http://en.wikipedia.org/wiki/DEFLATE
quelle
store
anstattdeflate
zu sparen Zeit, danndeflate
alles für Release - Builds.Es sieht so aus, als ob bereits einige sehr gute Antworten gegeben wurden, aber ich dachte, ich würde noch eine geben:
Lösung: Nichts tun.
Begründung: Es wurde kein Problem festgestellt - ja, Sie komprimieren die Informationen zweimal, aber warum machen Sie sich darüber Sorgen? Ist die Datengröße zu groß? Ist die Dekompression zu langsam? Ist dies mehr oder weniger wichtig als die Dutzende von Funktionen, die Sie zu diesem Zeitpunkt hinzufügen, verfeinern, testen und / oder debuggen könnten?
quelle
Wenn Sie spezielle Formate wie PNG und OGG verwenden, müssen Sie ZIP nicht komprimieren.
PNG, OGG und andere bereits komprimierte Formate werden nicht viel kleiner, wenn sie erneut als ZIP komprimiert werden. 100 MB komprimierter PNGs sind immer noch ~ 100 MB.
Skripte, Konfigurationsdateien und andere textbasierte Formate profitieren in hohem Maße von der Komprimierung. Sie sind jedoch normalerweise winzig und speichern nicht so viele Daten. Wenn Ihr Spiel 100 MB groß ist, machen die Textdateien möglicherweise 1 MB des gesamten Spiels aus, auch wenn Sie durch Komprimierung 100 KB erreichen können, haben Sie nur 900 KB gewonnen, weniger als 1%, und sind den Aufwand kaum wert.
Möglicherweise möchten Sie das Dateisystem sogar direkt verwenden, anstatt ein virtuelles, zip-basiertes Dateisystem zu verwenden. Es würde das Patchen sehr einfach machen: Sie können einfach alle Dateien austauschen, die Sie geändert haben.
quelle
.zip
Datei verwenden soll oder nicht. Auf der Android-Plattform ist das.apk
beispielsweise eine.zip
Datei, die Ressourcen enthalten kann.