Ahorrando memoria: Texturas en formato PVR

Uno de los principales problemas en la construcción de aplicaciones y juegos para dispositivos móviles, es la escasez de recursos de que disponen. Entre esos recursos, unos más importantes que otros, se encuentra la memoria. Para hacernos una idea del reto que ésto supone, aquí tenéis algunos datos: un iPad dispone de 256Mb, un iPad2 dispone de 512Mb y un iPad3 dispone de 1Gb.

Excepto el nuevo iPad, estamos hablando de niveles de memoria de portátiles de hace más de 10 años pero con unos requerimientos gráficos y de jugabilidad actuales. Además de esos requerimientos, hay que tener en cuenta que en la memoria total del dispositivo también hay que cargar el sistema operativo y demás, con lo que el espacio total todavía es menor. Y para bien o para mal, un buen producto entra, antetodo, "por la vista", lo cual se traduce en un excelente aspecto gráfico, es decir, una buena gestión de las texturas.

Una textura no es más que una imagen aplicada a un polígono o polígonos, pero ¿cuánto ocupa esa imagen memoria? La respuesta es la siguiente:

ESPACIO EN BYTES = ANCHURAxALTURAxNºBYTESPORPIXEL

Hagamos el siguiente ejercicio con el primer iPad: 256Mb disponibles, menos lo que ocupa el sistema operativo, etc etc, se queda en unos 180Mb reales para aplicaciones. Teniendo en cuenta que el dispositivo ejecuta aplicaciones en background que ocupan memoria, nos damos cuenta de que realmente disponemos de una cantidad de memoria todavía menor. Ahora cargamos una animación a pantalla completa (1024x768). Pensemos en una animación basada en una sucesión de imágenes (pongamos 8) en formato PNG. Como dicen los americanos, "this is the math":

ESPACIO(Mb) = 1024x768x4x8 = 24Mb

24Mb para una simple animación: ¡EXCESIVO! Hemos supuesto 4bytes por pixel porque hemos cargado PNG's en formato RGBA con 1byte por canal(4canales, 4bytes). ¿Cual es entonces la solución? Hay diferentes técnicas a aplicar aquí, pero me quiero centrar en el formato de las imágenes. Los chips gráficos de la mayoría de los dispositivos móviles incluyen la tecnología PowerVR, que permite cargar texturas con un consumo de memoria hasta 16veces menor, ¡16 veces!. Pero claro, siempre hay alguna restricción y alguna que otra pega: la calidad. Convertir imágenes en formato png a pvr tiene un coste, pero en la mayoría de casos es asumible.

Muchas de las herramientas que se utilizan en la construcción de juegos permiten generar nuestras texturas en formato pvr, como TexturePacker. Después de trastear con algunas, yo os recomiendo lo siguiente:
  1. Generar las texturas con Xcode (a través de 'texturetool'). Definitivamente la calidad de las imágenes es mejor que TexturePacker
  2. Si queréis haceros una idea de la calidad que vais a perder, instalaros las tools de PowerVR Tech.

M.

0 comentarios:

Publicar un comentario