Materiales y sombreadores

Sigue estas prácticas recomendadas para optimizar el uso de materiales y sombreadores en el juego de Android.

Los materiales y los sombreadores son componentes centrales del arte 3D moderno. Los juegos en 3D que se ejecutan bien en la mayoría de los dispositivos comienzan con arte 3D diseñado para aprovechar al máximo los procesadores de gráficos. En esta guía, se destacan optimizaciones y prácticas recomendadas para materiales y sombreadores en dispositivos móviles a fin de mejorar el rendimiento del juego y minimizar el consumo de energía.

Partes de este artículo se basan en el trabajo aportado y protegido por derechos de autor de Arm Limited.

Motores de juego con sombreadores optimizados para dispositivos móviles

Los motores de juego difieren en el modo en que asocian materiales y sombreadores. El motor de Unity puede crear varios sombreadores, pero a cada material solo se le puede asignar uno de ellos. Unreal Engine 4 puede aplicar diferentes sombreadores a un material según la plataforma de segmentación.

Para obtener una definición de sombreadores y materiales, consulta las Prácticas recomendadas sobre materiales y sombreadores para artistas.

Si usas un motor de juego, como Unity o Unreal Engine 4, utiliza sombreadores integrados que se diseñaron para hardware de dispositivos móviles. Estos sombreadores contienen implementaciones de funciones simplificadas para lograr un mejor rendimiento en dichos dispositivos. De ser posible, desactiva las funciones que no uses cuando configures los materiales, por ejemplo, los tonos de colores o los mapas de detalles. Cuando se inhabilitan las funciones que no se usan, el motor las omite del programa sombreador definitivo y, como resultado, se tiene un mejor rendimiento.

Unity

Unity incluye varios motores de renderización. En los juegos modernos para dispositivos móviles, la mejor opción es el canal de renderizado universal (URP, según sus siglas en inglés). El URP incluye un conjunto estándar de sombreadores cuya complejidad escala automáticamente según la plataforma de segmentación. El procesador heredado de Unity incluye una colección de sombreadores diseñados para plataformas móviles. Estos sombreadores se agrupan en la categoría Mobile.

Unreal Engine 4

El motor de Unreal elegirá un sombreador para dispositivos móviles según la plataforma de segmentación seleccionada. El resultado visual de los sombreadores para dispositivos móviles puede diferir de los sombreadores predeterminados del modelo de sombreador 5. Puedes cambiar la vista previa del nivel de renderización en el editor de Unreal a fin de simular el resultado de la renderización de los sombreadores para dispositivos móviles. A pesar de algunas diferencias, Unreal usa el mismo proceso para los materiales en todas las plataformas, por lo que, en general, los sombreadores para dispositivos móviles tendrán imágenes y comportamientos similares a los sombreadores predeterminados.

Configuración de la vista previa de la renderización para dispositivos móviles en el editor de Unreal
Figura 1: Configuración de la vista previa de la renderización para dispositivos móviles en el editor de Unreal.

Minimiza las muestras de texturas

Los juegos que se orientan a dispositivos móviles deben usar, en sus materiales, la menor cantidad de texturas posibles. Cada textura agregada requiere muestras de textura adicional, que consume ancho de banda de memoria y aumenta el consumo de energía. Unreal Engine 4 recomienda un máximo de cinco texturas de material cuando se ejecuta en dispositivos móviles. Incluso, es posible que cinco muestras de texturas sean demasiado costosas para un uso generalizado en muchos dispositivos. A continuación, te sugerimos algunas estrategias para minimizar la cantidad de muestras de texturas:

  • Usa el empaquetado de texturas para combinar aquellas que sean de un solo canal. Para obtener más información sobre esta técnica, consulta la guía sobre texturas.
  • Reemplaza los datos para parámetros como la aspereza o el metalizado por una constante numérica a fin de que no se los lea como una textura.
  • Usa sombreadores sin iluminación, o bien un modelo simple, para poder omitir las texturas que se necesitan y así admitir los cálculos de iluminación en modelos más complejos.

Inhabilita la iluminación cuando sea posible

El uso de iluminación, o bien su desuso, es una división común entre sombreadores y materiales. La iluminación en tiempo real implica un cálculo adicional en el sombreador. Según el tipo de sistema de iluminación que se implemente, es posible que se necesiten texturas de material, que usen más ancho de banda y espacio en la memoria. En los juegos para dispositivos móviles, en particular aquellos que se orientan a hardware menos potentes, es importante minimizar el uso de la iluminación en tiempo real a fin de lograr un rendimiento óptimo. Te recomendamos que crees tu dirección artística basándote en diseños que funcionen bien sin iluminación en tiempo real, como arte estilizado o caricaturesco.

Una comparación de un modelo renderizado con y sin iluminación
Figura 2: Un ejemplo de un modelo renderizado con iluminación en tiempo real (izquierda) y sin iluminación en tiempo real (derecha).

Minimiza el uso de transparencias

Usa materiales opacos siempre que sea posible. Renderizar un objeto con transparencia siempre es más costoso que un objeto similar opaco. El diseño de hardware de gráficos para dispositivos móviles causa que la transparencia sea más costosa en términos de renderización si se compara con el hardware de gráficos para computadoras o consolas de juegos. Dibujar muchos objetos transparentes en el juego, en especial cuando se renderizan uno sobre otro, producirá un impacto negativo en el rendimiento.

Dibujar sobre el mismo píxel varias veces es un problema que se conoce como superposición. Se deben evitar varias capas de superposición de transparencias. Muchos juegos cuentan con herramientas de diagnóstico para visualizar la superposición que permiten su detección y eliminación. Usa estas herramientas para mejorar el rendimiento del juego y detectar las áreas con problemas que disminuyen la velocidad de fotogramas.

Ejemplo de la herramienta para visualizar superposiciones en el editor de Unity.
Figura 3: Un ejemplo de la herramienta para visualizar superposiciones en el editor de Unity.
Un ejemplo de la herramienta para visualizar superposiciones en el editor de Unreal
Figura 4: Un ejemplo de la herramienta para visualizar superposiciones en el editor de Unreal.

Utiliza el método alfa correcto

Los métodos más frecuentes para implementar transparencia son la composición alfa y la prueba alfa.

La prueba alfa hará que el material del objeto se vea 100% opaco o 100% transparente. Puedes configurar el umbral del valor alfa para este límite. En Unity, esta clase de transparencia se denomina Cutout. En Unreal Engine 4, se lo denomina modo de composición Masked.

La composición alfa permite que el material del objeto tenga un rango de transparencia y puede hacer que un objeto se vea parcialmente transparente. En Unity, esta clase de transparencia se denomina Transparent. En Unreal Engine 4, se lo denomina modo de composición Translucent.

Una comparación entre la composición alfa y la prueba alfa
Figura 5: Una imagen de ejemplo (izquierda) renderizada con composición alfa (centro) y prueba alfa (derecha).

Por lo general, la composición alfa produce un aspecto visual superior en comparación con la prueba alfa. Sin embargo, para ciertas clases de mallas, como el follaje, la combinación alfa puede verse extraña cuando la malla se observa en movimiento. Esto se debe a la percepción de las hojas y las ramas que se renderizan en el orden incorrecto. La prueba alfa minimiza este efecto, a costa de un aumento de solapamiento y bordes nítidos en las hojas y ramas.

Es posible que la composición alfa y la prueba alfa procesen la misma malla a distinto tiempo. En las mallas en las que cualquiera de los modos produce un resultado visual aceptable, debes realizar comparaciones para verificar si un método tiene un mejor rendimiento que el otro.

Genera perfiles según la complejidad del sombreado

Todas las funciones de renderización, como las muestras de textura, la iluminación y la transparencia, aumentan la complejidad del sombreador y disminuyen el rendimiento de la renderización. Puedes usar herramientas integradas en los motores de juego y herramientas externas de gráficos para evaluar la complejidad del sombreador.

Unreal Engine 4 incluye el modo de vista Shader Complexity que estima el costo de los objetos de la escena.

El modo de vista Shader Complexity en el editor de Unreal
Figura 6: El modo de vista Shader Complexity en el editor de Unreal.

También puedes usar la función Material Stats de Unreal para generar perfiles del costo de los materiales a medida que los creas.

La pantalla de Material Stats en el editor de Unreal
Figura 7: La pantalla de Material Stats en el editor de Unreal.

Realiza cálculos en el sombreador de vértices

Por lo general, la renderización de los cálculos del sombreador se divide entre un sombreador de vértices y un sombreador de fragmentos (que también se conoce como sombreador de píxeles). Con frecuencia, la cantidad de fragmentos que se renderizan será mayor a la cantidad de vértices. Si se puede realizar un cómputo costoso en el sombreador de vértices, se ejecutará con menos frecuencia que si se produce en el sombreador de fragmentos.

Sin embargo, si el sombreador de fragmentos consume los datos, estos se deben pasar desde el sombreador de vértices. Si la cantidad de datos que se transfieren es demasiado grande, es posible que realizar los cálculos en el sombreador de fragmentos requiera un rendimiento mayor. Puedes usar herramientas de generación de perfiles para evaluar el uso de mosaicos a fin de determinar la ubicación óptima del sombreador para un conjunto de cálculos. Unreal Engine 4 tiene una función Customized UVs que puede ayudarte con esta generación de perfiles.

Evita las operaciones matemáticas costosas

Las operaciones matemáticas se usan en los programas sombreadores para controlar el comportamiento y el aspecto del resultado del sombreador. Las operaciones habituales incluyen aritmética, potenciación, función piso, logaritmos básicos, etc. Las operaciones matemáticas no tienen el mismo costo de procesamiento. Un sombreador repleto de operaciones costosas tendrá un rendimiento más lento, especialmente en dispositivos más antiguos. Los siguientes son algunos ejemplos de operaciones relativamente poco costosas:

  • Suma
  • Resta
  • Multiplicación

Entre las operaciones más costosas, se incluyen las siguientes:

  • División
  • Funciones trigonométricas (seno, coseno, potenciación, logaritmo, tangente)

Genera perfiles del rendimiento con frecuencia

Los cuellos de botella del rendimiento no siempre son evidentes. Evita suponer la ubicación en la que se encuentran las áreas con problemas y usa las herramientas de generación de perfiles para evaluar el rendimiento de la renderización. Asegúrate de realizar pruebas antes y después con cualquier optimización para medir su impacto con precisión.