Summoners War: Chronicles US(WW) y KR de Com2uS usan exclusivamente Vulkan para la renderización en Android, con mejoras de rendimiento de hasta un 30%.
Vulkan es una API multiplataforma moderna de gráficos 3D diseñada para minimizar la abstracción entre el hardware de gráficos del dispositivo y tu juego. Vulkan tiene una sobrecarga de CPU menor en comparación con OpenGL ES, y Vulkan ofrece una gama más amplia de funciones.
Funciones de renderización
Com2uS desarrolló funciones de renderización avanzadas para Summoners War: Chronicles, incluidas las siguientes:
- Sistema de renderización diferida personalizada con selección de luz de renderización previa y hasta dieciséis luces activas en el frustum de vistas de forma simultánea
- Es un método de instancia de renderización indirecto (llamado
Clay
) para dibujar muchas mallas, materiales y texturas a la vez. - Uso intensivo de sombreadores de cómputos para tareas de renderización previa
- Capacidad de ajustar de forma dinámica los efectos de renderización de sombras activas y de posprocesamiento según el movimiento de la cámara, las opciones gráficas y el rendimiento del tiempo de ejecución
Alojamiento de hardware para dispositivos móviles
Summoners War: Chronicles usa el mismo procesador para dispositivos Android, computadoras personales y consolas de juegos dedicadas. Para lograr un rendimiento óptimo en hardware móvil, Com2uS ajustó la configuración de renderización, incluidas la profundidad y la densidad de dibujo. Para admitir ciertos dispositivos que se ejecutan en Android 11 (nivel de API 30) y versiones anteriores, Com2uS creó versiones alternativas de algunos sombreadores y usó recuentos de instancias reducidos. Summoners War: Chronicles también usa funciones de rendimiento adaptable de Android para ajustar de forma dinámica las opciones de gráficos en respuesta a las condiciones térmicas del dispositivo.
Justificación de la función solo de Vulkan
Com2uS usó Vulkan exclusivamente para Summoners War: Chronicles por varios motivos:
- Los requisitos mínimos de los dispositivos excluyen los dispositivos más antiguos y menos potentes que carecen de compatibilidad con Vulkan
- La personalización del motor Unity requiere funciones de canalización de renderizaciones integrada (BiRP) que solo están disponibles en el backend de Vulkan del juego.
- La implementación de funciones de renderización que usan salidas de sombreador de cómputos y objetos de búfer de almacenamiento del sombreador (SSBO) se puede realizar en Vulkan, pero no en OpenGL ES.
Cargas de trabajo de procesamiento
Summoners War: Chronicles realiza un trabajo significativo de sombreadores de cómputos para producir datos para la renderización. Los sombreadores de cómputos se usan para lo siguiente:
- Selección de objetos
- Inspección de colisiones
- Tareas de animación
- Generación de datos de renderización indirecta
Los datos de procesamiento resultantes se escriben en los objetos RWBuffer del motor de Unity. Para lograr un rendimiento óptimo, Summoners War: Chronicles ejecuta todos sus trabajos de procesamiento con un solo envío, lo que requiere el uso de varios RWBuffers al mismo tiempo. Este enfoque solo era posible con Vulkan, ya que el backend de OpenGL ES de Unity BiRP solo admite el uso de un RWBuffer a la vez.
Los conjuntos de datos generados con el procesamiento suelen ser más grandes que los límites de tamaño del dispositivo para objetos de búfer uniformes (UBO). En su lugar, Summoners War: Chronicles usa objetos de búfer de almacenamiento de sombreadores (SSBO), que tienen límites de capacidad más amplios. Sin embargo, la vinculación de los SSBO a operaciones de etapa de vértices requiere compatibilidad con SSBO de solo lectura. OpenGL ES solo admite SSBO de lectura y escritura, mientras que Vulkan puede marcar los SSBO como de solo lectura.
Renderización indirecta de instancias con Clay
En Summoners War: Chronicles, Com2uS desarrolló un método para agrupar varios materiales, mallas y texturas en una sola llamada de dibujo. Com2uS se refiere a este sistema como Clay. Clay mejora el rendimiento del juego en un 30% como resultado de la reducción significativa de las llamadas de dibujo.
Clay comienza durante la fase de eliminación y colisión mediante la compilación de una lista de objetos visibles que se pueden renderizar. Luego, Clay genera información de renderización para cada objeto identificado en SSBO. Este proceso se realiza con sombreadores de cómputos, que permiten el uso de renderización indirecta mediante instancias con la función DrawMeshInstancedIndirect del renderizador de Unity. Con la renderización indirecta, la información de la instancia y los parámetros de recuento de instancias se generan directamente en la GPU. Cuando se dibujan objetos, en lugar de vincular una malla de objetos tradicional, Clay vincula una malla de conos, como se muestra en la siguiente imagen:
Luego, Clay transforma la malla del cono en el sombreador de vértices con un SSBO vinculado a los datos de transformación de vértices que generan los sombreadores de cómputos. La vinculación de los SSBO a la etapa de vértice requiere el uso de Vulkan. Clay puede usar varios conos transformados para renderizar un solo objeto. La complejidad del objeto determina la cantidad de conos.
Los datos de material de los objetos se agrupan en lotes en otro búfer generado por los sombreadores de cómputos. El búfer está vinculado al sombreador de fragmentos. Las texturas de los objetos que se dibujan se configuran en un array de texturas. Los índices de array para las texturas de un objeto se incluyen en los datos de material del objeto. En circunstancias ideales, Clay puede renderizar con un máximo de siete llamadas de dibujo:
- Objetos estáticos
- Objetos animados
- Sombras (cuatro iteraciones)
- Reflejos
Unity y Vulkan
Summoners War: Chronicles demuestra que la potente combinación del motor de juego Unity y la API de gráficos de Vulkan permite a los desarrolladores incorporar gráficos con calidad avanzada de consola en dispositivos Android.