What texture compression methods does Unity Android support?

Compresión de Texturas en Unity para Android

23/10/2018

Valoración: 3.93 (10347 votos)

Cuando desarrollamos un videojuego para dispositivos móviles, especialmente para el ecosistema Android, nos enfrentamos a un desafío constante: el equilibrio. Necesitamos ofrecer gráficos espectaculares y una experiencia fluida, pero al mismo tiempo debemos lidiar con las limitaciones de hardware, el almacenamiento limitado de los dispositivos y los tiempos de descarga. Uno de los pilares fundamentales para lograr este equilibrio es una correcta gestión y optimización de las texturas, y aquí es donde la compresión juega un papel protagónico. Dominar las opciones que Unity nos ofrece para la compresión de texturas en Android no es solo una buena práctica, es una necesidad para cualquier desarrollador que quiera que su juego triunfe.

What texture compression methods does Unity Android support?
The Unity Android build system supports the following texture compression: A method of storing data that reduces the amount of storage space it requires. To build the app, click Build And Run to create and run your build on the platform you have specified. In Platform, select Android.
Índice de Contenido

¿Por Qué es Tan Importante la Compresión de Texturas?

Antes de sumergirnos en los formatos y configuraciones, es vital entender el porqué. Una textura sin comprimir, como un archivo PNG o TGA, puede ocupar una cantidad considerable de memoria. Cuando el juego se ejecuta, estas texturas deben cargarse en la VRAM (la memoria de la tarjeta gráfica) para ser renderizadas. En un dispositivo móvil, esta memoria es un recurso muy limitado y compartido.

Aquí es donde entra la compresión de texturas. No hablamos de una compresión de archivo como ZIP, sino de formatos especializados que la propia GPU puede leer directamente sin necesidad de descomprimirlos por completo en la memoria. Esto trae tres beneficios gigantescos:

  • Menor tamaño de la build (APK/AAB): Un juego más ligero se descarga más rápido, lo que reduce la tasa de abandono durante la instalación.
  • Menor consumo de VRAM: Al mantener las texturas comprimidas en la memoria gráfica, liberamos espacio para otros recursos, evitando cuelgues y mejorando la estabilidad.
  • Mejor rendimiento: Al reducir el ancho de banda de memoria necesario para acceder a las texturas, la GPU puede trabajar de manera más eficiente, lo que se traduce en un framerate más alto y estable.

Formatos de Compresión de Texturas en Unity para Android

Unity nos ofrece un control granular sobre cómo se comprimen nuestras texturas al construir para Android. La configuración principal se encuentra en File > Build Settings > Android > Texture Compression. Esta es una configuración global, pero recuerda que siempre puedes anularla para texturas individuales desde su ventana de Inspector, algo muy útil para elementos de UI o texturas de personajes que requieran una calidad superior.

ETC (Ericsson Texture Compression) y ETC2

Por defecto, Unity utiliza la familia de formatos ETC. ETC2 es el estándar para dispositivos compatibles con OpenGL ES 3.0 o superior. Es una evolución directa de ETC1 y ofrece una calidad significativamente mejor, además de soportar canales alfa (transparencia), algo que su predecesor no hacía de forma nativa. Hoy en día, la gran mayoría de los dispositivos Android son compatibles con OpenGL ES 3.0, por lo que ETC2 es un punto de partida sólido y fiable para la mayoría de los proyectos.

ASTC (Adaptive Scalable Texture Compression)

Desarrollado por ARM, ASTC es el formato más moderno, flexible y, en muchos casos, el más recomendable. Su principal ventaja es su "compresión de tasa de bits variable". Esto significa que puedes elegir el nivel de compresión (y por tanto, la calidad) con una granularidad increíble, desde una compresión muy ligera y de alta calidad hasta una compresión extremadamente agresiva para texturas menos importantes. Ofrece una calidad visual superior a ETC2 con ratios de compresión similares o incluso mejores. Si tu público objetivo tiene dispositivos relativamente modernos (lanzados en los últimos 5-6 años), usar ASTC es casi siempre la mejor decisión.

PVRTC (PowerVR Texture Compression)

Este formato está asociado históricamente al hardware de PowerVR, que se encontraba en muchos dispositivos iOS y algunos Android. Aunque sigue siendo una opción en Unity, su relevancia en el ecosistema Android ha disminuido. Generalmente, solo deberías considerarlo si tienes la certeza de que una parte importante de tu audiencia utiliza dispositivos con este tipo de GPU específica.

El Plan B: El Fallback de ETC2 para Dispositivos Antiguos

¿Qué ocurre si un usuario intenta ejecutar tu juego en un dispositivo antiguo que no soporta ETC2? Unity tiene un mecanismo de seguridad llamado "ETC2 Fallback". Si el dispositivo no es compatible, Unity descomprimirá las texturas en tiempo de ejecución a un formato sin comprimir que la GPU sí pueda entender. Esto evita que el juego se rompa, pero tiene un coste enorme en rendimiento y uso de memoria.

Para mitigar esto, Unity nos ofrece varias opciones de fallback:

Opción de FallbackCalidad de ImagenUso de MemoriaCaso de Uso
32-bit RGBAMáxima (Sin pérdida)Muy AltoCuando la fidelidad visual es la máxima prioridad, incluso en dispositivos antiguos, y estás dispuesto a sacrificar memoria.
16-bit RGBABuena (Puede haber banding)Moderado (Mitad que 32-bit)Un buen equilibrio general para mantener un uso de memoria razonable sin una pérdida de calidad drástica.
32-bit (Mitad de Resolución)Baja (Texturas borrosas)BajoCuando el uso de memoria es el factor más crítico y puedes permitirte que las texturas se vean menos nítidas en hardware antiguo.

No Todo es Textura: Compresión General del Proyecto

Además de la compresión de texturas, Unity ofrece otra capa de compresión para los datos del proyecto en general (escenas, assets, etc.) al momento de crear la build. Esta opción, llamada Compression Method, es crucial para reducir el tiempo de carga inicial del juego.

Método de CompresiónVelocidad de BuildVelocidad de CargaUso Recomendado
Default (ZIP)LentaLentaGeneralmente no se recomienda, ya que LZ4 y LZ4HC ofrecen mejores resultados en tiempos de carga.
LZ4Muy RápidaMuy RápidaIdeal para builds de desarrollo. Permite iterar y probar rápidamente sin esperar largos tiempos de compilación.
LZ4HCLentaMuy RápidaLa mejor opción para las builds de lanzamiento (release). Tarda más en comprimir, pero consigue el mejor ratio de compresión, lo que se traduce en un APK más pequeño y tiempos de carga rápidos para el jugador.

Preguntas Frecuentes (FAQ)

¿Debo usar la misma compresión para todas mis texturas?

No, y es una de las optimizaciones más efectivas. Utiliza la configuración global en Build Settings para la mayoría de tus texturas (por ejemplo, escenarios, props). Luego, ve al Inspector de las texturas más importantes (como la interfaz de usuario, el rostro del personaje principal) y anula la configuración (override) para darles una compresión de mayor calidad o incluso dejarlas sin comprimir si es absolutamente necesario.

Entonces, ¿qué formato de compresión es el mejor en general?

Si no necesitas dar soporte a dispositivos muy antiguos, ASTC es la opción superior. Su flexibilidad te permite ajustar la relación calidad/tamaño por textura, logrando resultados visuales excelentes con un tamaño de archivo muy optimizado. Si necesitas una compatibilidad más amplia, ETC2 es una opción segura y robusta.

Mi juego se ve borroso en algunos dispositivos, ¿es por la compresión?

Es muy probable. La compresión de texturas es "lossy", es decir, pierde información. Una compresión muy agresiva puede generar artefactos visuales o hacer que las texturas se vean borrosas. Revisa la configuración de compresión de las texturas afectadas. También, asegúrate de que no estás usando mipmaps de baja resolución por error. Experimenta con diferentes niveles de calidad de ASTC o considera usar un formato de mayor calidad para esos assets específicos.

¿Cambiar la compresión de texturas requiere volver a construir todo el proyecto?

Sí. La compresión de texturas es un proceso que se realiza durante el tiempo de build. Cualquier cambio en la configuración global o en los overrides individuales requerirá que generes una nueva build para que los cambios se apliquen en el paquete final (APK o AAB).

En conclusión, la compresión de texturas es un arte y una ciencia. No existe una única configuración perfecta para todos los proyectos. La clave es entender las herramientas que Unity pone a tu disposición, conocer a tu público objetivo y su hardware, y no tener miedo de experimentar. Analiza tu juego, identifica qué texturas son cruciales y cuáles pueden permitirse una mayor compresión. Utiliza el Profiler de Unity para medir el uso de memoria y asegúrate de probar tus builds en dispositivos reales. Con un poco de esfuerzo en esta área, la recompensa será un juego más rápido, más ligero y accesible para un mayor número de jugadores.

Si quieres conocer otros artículos parecidos a Compresión de Texturas en Unity para Android puedes visitar la categoría Juegos.

Subir