Estoy usando .png
s para mis texturas y estoy usando un sistema de archivos virtual en un .zip
archivo para mi proyecto de juego. Esto significa que mis texturas se comprimen y descomprimen dos veces. ¿Cuáles son las soluciones a este problema de doble compresión? Una solución que he escuchado es usar .tga
s para texturas, pero parece que hace años, desde que escuché eso. Otra solución es implementar la descompresión en el GPU
y, dado que es rápido, olvidarse de la sobrecarga.
textures
assets
compression
usuario1095108
fuente
fuente
Respuestas:
El formato zip admite varios algoritmos de compresión diferentes. Puede usar un algoritmo diferente para cada archivo en el archivo. Cuando desee almacenar archivos ya comprimidos que no se benefician de una compresión adicional (como PNG) en un archivo zip, puede codificar estos archivos con el algoritmo "almacenado" que no se comprime en absoluto. El cuadro de diálogo "Agregar al archivo" de 7-zip le permite elegir esto en "Fuerza de compresión".
Pero cuando no solo tiene imágenes, sino también otros recursos más comprimibles en sus archivos, puede ser bastante tedioso elegir el algoritmo para cada archivo. En ese caso, puede optar por un formato de imagen sin comprimir en un archivo comprimido.
El formato TGA conoce muchos modos diferentes, algunos de los cuales están comprimidos y otros no. Cuando no desee utilizar la compresión, asegúrese de elegir la correcta en las opciones de exportación del editor gráfico que está utilizando. Otro formato de imagen sin compresión es BMP (Windows Bitmap).
Aquí hay una prueba que hice. Agregué la misma imagen (un activo de mi proyecto actual) en diferentes formatos varias veces a un archivo zip, algunos con el algoritmo "desinflar" en la fuerza normal y uno con "almacenar". Perdón por la GUI alemana. La segunda columna tiene un tamaño sin comprimir, la tercera columna tiene un algoritmo de compresión y la cuarta columna tiene un tamaño comprimido.
Como puede ver, la codificación de desinflado del PNG solo ahorró un magro 0.3%, mientras que el BMP codificado por desinflado se reduce a una décima parte del archivo original, que es incluso más pequeño que la versión PNG. Esto me sorprendió bastante. Hubiera esperado que PNG fuera más pequeño porque el método de compresión de PNG debería optimizarse para datos de imagen mientras que ZIP no lo es. Una explicación probable es que mi editor de imágenes (GIMP) agregó una gran cantidad de metainformación a los archivos PNG, lo que no hace para BMP.
TGA sin comprimir se comportó de manera similar a BMP con respecto al tamaño del archivo antes y después de comprimir, mientras que la compresión del archivo TGA comprimido mejoró aún más con ZIP, aunque no tanto como las versiones sin comprimir.
Puede valer la pena experimentar con otros algoritmos que no sean desinflar y con otra configuración de resistencia a la compresión. La combinación que tendrá los mejores resultados probablemente dependerá del estilo de sus texturas. Pero también puede considerar comparar la carga de activos de su juego y hacer que el rendimiento de descompresión influya en su decisión sobre la configuración que utiliza.
En pocas palabras : cuando desee evitar la doble compresión sin dejar de tener un tamaño de archivo bajo, use
PNG
conStore
el algoritmo zip oBMP
con un algoritmo zip comprimido.fuente
No te preocupes por eso.
Cuando el algoritmo "desinflar" utilizado en archivos .zip encuentra un bloque de datos que ya está bien comprimido, como los datos de píxeles de una imagen .png, descubre que no puede comprimirlo de manera efectiva, y lo almacenará como literal datos sin comprimir Esto requiere muy poca sobrecarga en el extremo de descompresión para copiar.
http://en.wikipedia.org/wiki/DEFLATE
fuente
store
lugar dedeflate
ahorrar tiempo, luegodeflate
todo para las versiones de lanzamiento.Parece que ya se han dado algunas respuestas muy buenas, pero pensé que daría una más:
Solución: no hacer nada.
Justificación: No ha habido ningún problema: sí, está comprimiendo la información dos veces, pero ¿por qué está preocupado por esto? ¿El tamaño de los datos es demasiado grande? ¿La descompresión es demasiado lenta? ¿Es esto más o menos importante que las docenas de características que podría agregar, refinar, probar y / o depurar en este momento?
fuente
Si usa formatos especializados como PNG y OGG, no necesitará la compresión de ZIP.
PNG, OGG y otros formatos ya comprimidos no serán mucho más pequeños al comprimirlos nuevamente como ZIP. 100 MB de PNG comprimidos siguen siendo ~ 100 MB.
Las secuencias de comandos, los archivos de configuración y otros formatos basados en texto se benefician enormemente de la compresión, sin embargo, generalmente son pequeños en comparación, no almacenan tanta información. Si su juego es de 100 MB, entonces los archivos de texto pueden tener 1 MB de todo el juego, incluso si puede hacerlos de 100 KB a través de la compresión, entonces solo ganó 900 KB, menos del 1%, apenas vale la pena el esfuerzo.
Es posible que incluso desee utilizar el sistema de archivos directamente en lugar de utilizar un sistema de archivos virtual basado en zip. Haría que la aplicación de parches fuera muy fácil: puede intercambiar cualquier archivo que haya modificado.
fuente
.zip
archivo o no. Por ejemplo, en la plataforma Android,.apk
es un.zip
archivo que puede contener recursos.