What happens if you resize a texture?

Redimensionar Texturas en Unity: Guía Completa

26/02/2018

Valoración: 3.97 (2080 votos)

En el desarrollo de videojuegos con Unity, uno de los aspectos más críticos y a menudo subestimados es la gestión de las texturas. Estos archivos de imagen son el alma visual de nuestro proyecto, dando color, detalle y vida a cada modelo 3D y elemento 2D. Sin embargo, también son una de las principales causas de compilaciones pesadas, tiempos de carga prolongados y caídas de fotogramas por segundo (FPS). Comprender qué sucede cuando redimensionamos una textura y cómo hacerlo correctamente no es solo una buena práctica, es una habilidad esencial para cualquier desarrollador que aspire a crear juegos fluidos y accesibles para una amplia gama de dispositivos. Este artículo te guiará a través de todo el proceso, desmitificando conceptos y ofreciéndote las herramientas para tomar decisiones informadas que impactarán directamente en la calidad y el rendimiento de tu juego.

What happens if you resize an image?
Then it’s as easy as this… The problem is the resize function you’re using only uses four samples of the original image to produce each pixel of the resized image. This means that if you downsample to an image that is smaller than half the dimensions of the original, information is lost and you get aliasing artifacts.
Índice de Contenido

¿Qué Sucede Realmente al Redimensionar una Textura?

Es crucial entender la diferencia entre cambiar el tamaño del archivo fuente (por ejemplo, un .PNG en Photoshop) y ajustar la configuración de importación dentro de Unity. Cuando importas una textura a tu proyecto, Unity crea una copia y la procesa según los parámetros que establezcas en el 'Texture Importer'. Esto significa que tu archivo original permanece intacto.

La opción más importante en este contexto es Max Size (Tamaño Máximo). Esta configuración le dice a Unity cuál es la resolución máxima que debe tener esa textura dentro del juego. Por ejemplo, si tienes una textura fuente de 4096x4096 píxeles pero estableces el 'Max Size' en 1024, Unity generará y utilizará una versión de 1024x1024 en la compilación final. El motor reduce la escala de la imagen de alta resolución, promediando los píxeles para crear una versión más pequeña y optimizada.

Este proceso tiene dos consecuencias directas:

  • Pérdida de Calidad Visual: Al reducir la resolución, inevitablemente se pierde detalle. Una textura más pequeña tiene menos píxeles para representar la misma superficie, lo que puede resultar en una apariencia más borrosa o pixelada si se reduce demasiado.
  • Reducción del Uso de Memoria: El beneficio principal es una drástica disminución en el espacio que la textura ocupa tanto en el almacenamiento del dispositivo como en la memoria de video (VRAM) durante la ejecución del juego. El consumo de memoria de una textura no es lineal; se basa en el área. Una textura de 1024x1024 ocupa solo una cuarta parte de la memoria que una de 2048x2048.

Por lo tanto, redimensionar una textura es un acto de equilibrio. El objetivo es encontrar la resolución más baja posible para cada textura sin que la pérdida de calidad sea perceptible para el jugador en el contexto del juego.

Cómo Cambiar el Tamaño de una Textura en Unity: El Método Correcto

Modificar el tamaño de una textura en Unity es un proceso sencillo que se realiza directamente en el editor, sin necesidad de alterar los archivos de arte originales. Sigue estos pasos para una optimización efectiva:

  1. Selecciona la Textura: En la ventana 'Project', busca y haz clic en el archivo de textura que deseas modificar.
  2. Abre el Inspector: Con la textura seleccionada, la ventana 'Inspector' mostrará todas sus configuraciones de importación ('Texture Importer').
  3. Localiza 'Max Size': Desplázate hacia abajo hasta encontrar la opción 'Max Size'. Verás un menú desplegable con valores que son potencias de dos (por ejemplo, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192).
  4. Ajusta el Valor: Selecciona el tamaño máximo deseado. Un buen método es empezar con un valor bajo y aumentarlo progresivamente.
  5. Aplica los Cambios: Haz clic en el botón 'Apply' en la parte inferior del Inspector. Unity procesará de nuevo la textura con la nueva configuración.

Consejo Profesional: Para encontrar el tamaño ideal, ten un objeto que use esa textura visible en la ventana 'Scene'. Reduce el 'Max Size' y aplica los cambios. Observa el modelo de cerca. Sigue reduciendo el tamaño hasta que notes una degradación visual inaceptable. Luego, vuelve al tamaño anterior. Este método empírico te asegura no sacrificar más calidad de la necesaria.

How do I reduce the size of my textures?
Use suitable compression formats to decrease the size of your textures in memory. This can result in faster load times, a smaller memory footprint, and improved GPU rendering performance. Compressed textures only use a fraction of the memory bandwidth needed for uncompressed textures.

Impacto en el Rendimiento y Tamaño del Juego

La optimización de texturas es una de las estrategias más impactantes para mejorar el rendimiento general de un juego. Sus efectos se sienten en varias áreas clave.

Reducción del Tamaño de la Compilación (Build)

El primer y más obvio beneficio es la disminución del tamaño total del archivo del juego. Esto es especialmente vital para plataformas móviles, donde las tiendas de aplicaciones imponen límites estrictos y los usuarios tienen un espacio de almacenamiento limitado. Un juego más ligero se descarga más rápido y tiene menos probabilidades de ser desinstalado para liberar espacio. Puedes verificar qué assets contribuyen más al tamaño de tu build revisando el 'Editor Log' justo después de compilar, una herramienta invaluable para identificar las texturas más pesadas que necesitan optimización.

Optimización de la Memoria y Ancho de Banda de la GPU

Durante el juego, las texturas se cargan en la VRAM (la memoria dedicada de la tarjeta gráfica). Una VRAM llena puede causar 'stuttering' (micro-parones) y caídas de rendimiento, ya que el sistema tiene que transferir datos constantemente entre la RAM principal y la VRAM. Al reducir la resolución de las texturas, se reduce su huella en la VRAM, liberando recursos para otros procesos. Además, se reduce la carga sobre el ancho de banda de la memoria de la GPU. Cuando la GPU renderiza un objeto, necesita 'leer' los datos de la textura desde la VRAM. Texturas más pequeñas significan menos datos que transferir, lo que acelera el proceso de renderizado, especialmente en GPUs con un ancho de banda limitado, como las de los dispositivos móviles.

Formatos de Compresión: Un Aliado Indispensable

Junto con la resolución, el formato de compresión es el otro pilar de la optimización de texturas. Unity aplica compresión por defecto para reducir aún más el tamaño en memoria. La elección del formato depende de la plataforma de destino y de los requisitos de calidad.

What happens if you resize a texture?
After resizing, texture pixels will be undefined. This function is very similar to the texture constructor, except it works on existing texture object. Call Apply to actually upload the changed pixels to the graphics card. Texture.isReadable must be true.

Aquí tienes una tabla comparativa simplificada de algunos formatos comunes:

Formato de CompresiónConsumo de Memoria (bytes/píxel)Plataforma(s) Típica(s)Notas
DXT1 / BC10.5PC, Xbox, PlayStationIdeal para texturas sin canal alfa o con alfa de 1 bit.
DXT5 / BC31.0PC, Xbox, PlayStationSoporta un canal alfa de alta calidad.
PVRTC 4bpp0.5iOS, Android (PowerVR)Buena compresión, pero puede generar artefactos. Requiere texturas cuadradas.
ETC20.5 (RGB) / 1.0 (RGBA)Android (OpenGL ES 3.0+)Estándar para dispositivos Android modernos. Buena calidad.
RGBA 32bit (Sin comprimir)4.0TodasMáxima calidad, sin artefactos. Consume muchísima memoria. Usar solo cuando sea estrictamente necesario (ej. UI).

La fórmula para calcular el tamaño en memoria es simple: Ancho x Alto x BytesPorPíxel. Como puedes ver, pasar de una textura sin comprimir a una DXT1 reduce el consumo de memoria en un 87.5%, un ahorro gigantesco.

El Papel Crucial de los Mipmaps

Cuando activas la opción 'Generate Mip Maps' en el 'Texture Importer', le pides a Unity que cree una serie de versiones pre-calculadas y de menor resolución de tu textura. Durante el renderizado, la GPU seleccionará automáticamente el mipmaps más apropiado según la distancia del objeto a la cámara.

¿Por qué es esto importante? Cuando un objeto está lejos, ocupa pocos píxeles en la pantalla. Intentar muestrear una textura de alta resolución para colorear esos pocos píxeles es ineficiente y causa un artefacto visual llamado 'moiré' o 'shimmering' (un parpadeo ruidoso). Usar un mipmap más pequeño para objetos lejanos resuelve ambos problemas: mejora el rendimiento al reducir el ancho de banda de memoria necesario y elimina los artefactos visuales, resultando en una imagen más limpia y estable. El coste es un aumento de aproximadamente el 33% en el espacio de almacenamiento de la textura, un precio que casi siempre vale la pena pagar por los beneficios de rendimiento y calidad visual.

Preguntas Frecuentes (FAQ)

¿Debo cambiar el tamaño de mi archivo .PNG o .PSD antes de importarlo a Unity?

No es necesario y, de hecho, es contraproducente. Es mejor mantener tus archivos fuente en la máxima resolución posible. Esto te da la flexibilidad de ajustar el 'Max Size' en Unity según sea necesario para diferentes plataformas o niveles de calidad, sin tener que volver a editar el archivo de imagen original. El flujo de trabajo no destructivo es siempre preferible.

How do I change the size of a texture?
Simply select the texture in the Project view and set Max Size in Import Settings. It is a good idea to zoom in on an object that uses the texture, then adjust the Max Size until it starts looking worse in the Scene View. The following table shows how much storage the image formats take up in bytes per pixel:

¿Qué formato de compresión debo elegir?

La respuesta corta es: depende de tu plataforma de destino. Para PC, DXT (BC) es el estándar. Para móviles, ETC2 es una opción segura para la mayoría de dispositivos Android modernos, mientras que PVRTC o ASTC son comunes en iOS. Utiliza la opción 'Default' en la configuración de compresión y deja que Unity elija la mejor opción para cada plataforma que configures en los 'Build Settings'.

¿Redimensionar una textura afecta el rendimiento de la CPU?

El impacto principal es en la GPU y la memoria. Sin embargo, puede haber un impacto indirecto en la CPU. Tiempos de carga más rápidos debido a texturas más pequeñas pueden reducir el trabajo de la CPU durante la carga de escenas. En general, la optimización de texturas es una tarea enfocada en aliviar la carga de la GPU.

¿Cuándo debería usar texturas sin comprimir?

Reserva el uso de texturas sin comprimir (RGBA 32bit) para casos muy específicos donde la calidad es la máxima prioridad y cualquier artefacto de compresión es inaceptable. Los ejemplos más comunes son los elementos de la interfaz de usuario (UI), como iconos o texto en formato de imagen, y quizás algunas 'lookup tables' (LUTs) para corrección de color.

Conclusión

La gestión inteligente del tamaño de las texturas es una de las optimizaciones más potentes que puedes realizar en tu proyecto de Unity. Al dominar el uso de 'Max Size', comprender los formatos de compresión y aprovechar los mipmaps, estarás en camino de crear juegos que no solo se ven geniales, sino que también funcionan de manera fluida en una amplia variedad de hardware. Recuerda que la optimización no es un paso final, sino un proceso continuo. Perfila tu juego, identifica los cuellos de botella y ajusta tus texturas de manera iterativa. Tus jugadores, sus dispositivos y las tasas de descarga te lo agradecerán.

Si quieres conocer otros artículos parecidos a Redimensionar Texturas en Unity: Guía Completa puedes visitar la categoría Juegos.

Subir