Usando un Atlas de textura para optimizar tu juego

Hora. Meses. Tal vez años. Has pasado tu tiempo (mucho tiempo) para crear tu juego. Pequeño o grande, no importa. Es tu juego, y ahora quieres compartirlo con todo el mundo, y quizás llegar a ser famoso y rico *. Es perfecto: el arte es bueno y estás muy orgulloso de tu idea dentro del juego. Tu juego.

Pero hay un último tema que usted debe resolver antes de la liberación. No, no es un problema simple. La cuestión: La velocidad de fotogramas de tu juego es baja. Muy bajo. Y eso significa solo una cosa: necesitas encontrar una manera de solucionarlo. Debes. Y no tienes idea de cómo.

No te asustes: hay un truco simple que puede ayudarte. Se llama un "Atlas de textura".

* Si te haces rico gracias a este artículo, recuérdame. Muchas gracias!

¿Qué es un Atlas de textura??

Si se acerca al desarrollo de un videojuego en 3D por primera vez, comenzará a descubrir que los gráficos en 3D se componen de varias partes: mallas en 3D, texturas, sistemas de partículas y muchos otros elementos que generalmente se dibujan en la pantalla. 30 veces por segundo (en jerga: 30 fps) durante el proceso de renderizado, lo que hace que el mundo del juego sea variado y animado.

Lo creas o no, los primeros videojuegos en 3D que vi en mi vida no tenían ninguno de estos elementos. Estaban compuestos solo de líneas que formaban objetos o elementos en una estructura de alambre 3D..

Escribir esto definitivamente me hace sentir viejo..

De vuelta a nosotros (de hecho, a usted) y a las cosas importantes, hoy hablaremos sobre las texturas de la interfaz de usuario (UI en adelante) y, por extensión, sobre todas las texturas del juego..

En un juego 3D, la interfaz de usuario suele estar formada por elementos 3D (como planos o cuadros) con texturas..

Mencionamos antes el proceso de renderizado: es la operación mediante la cual los elementos en la memoria se dibujan físicamente en la pantalla. Es uno de los procesos más complejos y costosos que ocurren en un juego 3D en tiempo real. Entonces, cualquier expediente para reducir el tiempo que toma este proceso es bienvenido; menos tiempo empleado en la fase de renderización significa una mayor velocidad de cuadros (es decir, si alcanza los 60 fps, puede renderizar la imagen dos veces y luego piensa en desarrollar su juego también para VR), o más elementos de la pantalla (y luego un juego más rico, más animada, mas bella).

Uno de los medios utilizados para reducir la duración del proceso de renderizado es un Atlas de textura: no es más que una imagen que contiene muchas texturas..

Cómo funciona un Atlas de textura

Nota: Como se mencionó en el párrafo anterior, este artículo tratará el Atlas de textura aplicado a la interfaz de usuario. Sin embargo, muchos de los conceptos explicados aquí también pueden aplicarse a los modelos 3D y sus texturas..

Un Atlas de textura, dijimos, es una colección de texturas dentro de una sola imagen.

Un Atlas generalmente se asocia con un descriptor de archivos, que indica al juego dónde se encuentra una textura (en ciertas coordenadas x e y) para poder recuperarla.

Dependiendo del sistema que utilizará para generar y administrar el Atlas, tendrá más o menos opciones, como la distancia entre las imágenes que lo componen (reduciendo el riesgo de artefactos en los bordes de la textura, causados ​​por una superposición) de dos elementos), o la capacidad de rotar los elementos para optimizar el espacio dentro del Atlas (más espacio optimizado significa más imágenes dentro del mismo Atlas).

Diferentes formas de crear un Atlas de textura

Hay diferentes maneras de crear un Atlas. Un entorno de desarrollo completo generalmente permite la gestión interna del Atlas; También hay muchas herramientas externas que proporcionan muchas opciones adicionales..

La elección de qué sistema utilizar, obviamente, depende de sus preferencias personales. Aquí explicamos dos de ellos: Sprite Packer, interno de Unity, y TexturePacker (una herramienta independiente, por una tarifa).

Sprite Packer

Para abrir Sprite Packer, elige desde el menú Ventana> Sprite Packer.

La administración es realmente sencilla: el botón Pack se usa para crear uno o más Atlas (depende del número de imágenes y de la dimensión de Atlas que desee usar).

Ahora puede seleccionar una imagen para ver dónde se encuentra en el Atlas. Si agrega o elimina imágenes de su proyecto, debe usar el botón Reempaquetar para actualizar el Atlas..

Para configurar el Sprite Packer, puede elegir desde el menú Edición> Configuración del proyecto> Editor; Aquí puede deshabilitar el Atlas, activarlo solo para el juego creado o encenderlo siempre..

Para más información sobre Sprite Packer, puedes consultar la guía oficial..

Embalador de textura

Texture Packer es una herramienta independiente que se usa para administrar Atlas..

Puede agregar una o más carpetas de su proyecto y Texture Packer creará el Atlas..

Después de eso, puede elegir el formato de datos para la exportación. Como puede ver, también existe la opción "JSON for Unity". Esto significa que puedes exportar tu Atlas para tu proyecto de Unity. Pero, para usarlos juntos, debe instalar una extensión de editor gratuita desde la tienda de activos..

Para más información sobre Texture Packer, puedes consultar la guía oficial..

¿Por qué es importante utilizar un Atlas de textura??

Pero, ¿por qué es tan importante recopilar varias imágenes en una sola más grande??

Regresemos por un momento al proceso de representación: si cada elemento de la interfaz de usuario tiene una textura separada, se dibuja con una "llamada de dibujo" separada. Esto significa que si en nuestra interfaz tenemos el ícono de corazones (que representa la energía del jugador) y el ícono de las monedas recolectadas, tendremos dos llamadas de sorteo.

Cada llamada al sorteo tarda un poco en completarse, lo que hace que el proceso de renderización sea más y más largo. Si hay cinco elementos de UI, en lugar de dos como en el ejemplo anterior, hay cinco llamadas de sorteo.

¿Comienzas a ver el punto??

Más llamadas de sorteo -> más tiempo durante la fase de renderización -> menos fps -> juego con una velocidad de cuadros baja (con algunas caídas de cuadros) o menos elementos en la pantalla (entonces visualmente deficientes).

Perder llamadas de sorteo de esta manera, a menos que haya razones especiales, realmente no tiene sentido, especialmente para la interfaz de usuario.

De hecho, todas las texturas en un Atlas se renderizarán juntas, en una sola pasada..

Conclusión

En conclusión, especialmente si está desarrollando un juego en una plataforma donde el rendimiento es realmente importante (como una plataforma móvil):

  • Debe prestar atención al número de llamadas de sorteo: más llamadas de sorteo significa un mayor tiempo de representación (y un mayor tiempo de representación significa el riesgo de tener una velocidad de cuadros baja).
  • En general, cada objeto con una textura diferente puede generar una sola llamada de dibujo (es una declaración genérica: hay algunas excepciones, especialmente en el caso de objetos 3D).
  • Una forma de reducir el número de llamadas de sorteo es utilizar un Atlas de textura.
  • Un Atlas de textura es básicamente una textura grande con un grupo de texturas diferentes.
  • Todos los objetos que usan la misma textura Atlas generan una sola llamada de sorteo..
  • Especialmente para las texturas de UI, el uso de un Atlas de textura es imprescindible para mejorar el rendimiento de su proyecto.

Y ... que la fuerza esté contigo. Y tu código. Siempre.