
Diablo Immortal es un juego de rol de acción (ARPG) multijugador gratuito desarrollado en conjunto por Blizzard Entertainment y NetEase. Diablo Immortal, un nuevo capítulo de la serie Diablo, se lanzó en 2022. El juego completa la brecha narrativa entre Diablo 2 y Diablo 3 y desarrolla una nueva aventura en torno a los fragmentos de la Piedra del Mundo, en la que los jugadores exploran el continente de Sanctuary para luchar contra demonios y fuerzas corruptas.
Con la innovación de la arquitectura de la GPU para dispositivos móviles y los avances en las capacidades de aceleración de hardware, la tecnología de ray tracing está migrando gradualmente de las computadoras de escritorio a los dispositivos móviles, convirtiéndose en uno de los impulsores principales de la renderización de gráficos de alta fidelidad. El cálculo de reflejos dinámicos físicamente realistas es exigente en términos de procesamiento, pero una unidad de hardware dedicada lo hace posible en plataformas móviles con limitaciones de energía. A través del seguimiento de la ruta de propagación de la luz a través de la escena en tiempo real, la tecnología simula con precisión el comportamiento reflexivo de superficies complejas, como espejos, metales y líquidos. El trazado de rayos supera las limitaciones espaciales y los errores de aproximación de los esquemas de rasterización tradicionales y admite la expresión global coherente de fuentes de luz dinámicas, objetos fuera de la pantalla y reflejos de varios niveles.
Ray tracing de hardware en dispositivos móviles
La tecnología de ray tracing de hardware incluye principalmente dos paradigmas de implementación: canalización de ray tracing y búsqueda de rayos.
La canalización de trazado de rayos compila una canalización completa a través de etapas de sombreadores dedicadas (generación de rayos, intersección o sombreador de impacto más cercano). Aunque puede lograr un control preciso de la interacción de rayos, la canalización de trazado de rayos requiere una configuración independiente de la canalización, lo que aumenta la complejidad del desarrollo.
Por otro lado, la consulta de rayos permite que se inicien directamente desde la computación o los sombreadores de fragmentos tradicionales, lo que la convierte en una tecnología fundamental para el trazado de rayos en dispositivos móviles. Dado que elimina la necesidad de canalización separadas, la consulta de rayos no solo simplifica significativamente el proceso de desarrollo, sino que también tiene tres ventajas principales:
- Proporciona compatibilidad con entornos de computación heterogéneos y hardware de trazado de rayos no completo.
- Admite la invocación a pedido del trazado de rayos en cualquier etapa de sombreado.
- Debido a que reduce el uso de recursos, cumple con las restricciones de ancho de banda y energía de las plataformas para dispositivos móviles y proporciona una base factible para efectos avanzados, como la iluminación global dinámica y la reflexión en tiempo real en juegos para dispositivos móviles.
Diablo Immortal usa Vulkan para aprovechar las capacidades de trazado de rayos de hardware de la GPU. El juego calcula la ruta de los rayos de luz a través de la escena en tiempo real y tiene en cuenta las propiedades de materiales complejos para lograr efectos de reflexión innovadores en tiempo real en dispositivos Android.


Estructura de aceleración
La estructura de aceleración es el núcleo del trazado de rayos de hardware. La estructura de aceleración mejora en gran medida la eficiencia de las pruebas de intersección de rayos a través de la organización jerárquica de los datos.
Por lo general, el sistema tiene dos niveles: la estructura de aceleración de nivel superior (TLAS) y la estructura de aceleración de nivel inferior (BLAS):
- TLAS desempeña el rol de administrador de escenas. Cuando se registra la matriz de transformación espacial (incluida la posición, la rotación y la escala) de todas las instancias de BLAS, TLAS realiza la organización global de escenas dinámicas. Por ejemplo, las TLAS permiten a los desarrolladores distribuir cientos de instancias del mismo modelo de árbol en diferentes posiciones y poses en la escena. Por lo tanto, los desarrolladores solo deben actualizar la matriz de transformación del objeto en movimiento en cada fotograma en lugar de reconstruir la geometría.
- BLAS como unidad base: Es responsable de codificar de manera eficiente los detalles geométricos de un solo objeto 3D. BLAS establece una estructura de índice espacial a través del algoritmo de jerarquía de volumen de límite (BVH) para que se puedan omitir rápidamente las áreas irrelevantes durante la detección de rayos.
Este diseño jerárquico permite que la canalización de trazado de rayos forme una cadena de detección eficiente de rayo ==> TLAS (instancia de objeto de tamiz grueso) ==> BLAS (intersección exacta).
Separar los modelos dinámicos y estáticos es clave para minimizar el costo de la construcción de la estructura de aceleración:
- Modelo estático: El BLAS solo se debe compilar una vez en la etapa de inicialización y se puede volver a usar directamente en la carga de escenas posteriores. Para evitar el retraso de carga de escenas a gran escala, se puede usar la tecnología de preconstrucción asíncrona del enmarcado para distribuir la tarea de construcción de BLAS a varios fotogramas.
- Modelo dinámico
- Basado en la animación de esqueletos: El sombreador de cómputo debe calcular los datos de vértices con texturas en paralelo en cada fotograma para generar un nuevo búfer de vértices y, luego, activar la actualización incremental del BLAS correspondiente, lo que evita la reconstrucción completa para mejorar el rendimiento.
- Transformación de cuerpo rígido: Si solo se involucran las transformaciones de traslación, rotación o zoom, no es necesario modificar BLAS, solo actualizar su matriz de transformación mundial en TLAS y, luego, activar el proceso de actualización rápida de TLAS.
La reconstrucción periódica es esencial para mantener la eficiencia de la estructura de aceleración en escenas dinámicas de trazado de rayos. Cuando los objetos dinámicos sufren cambios significativos en la topología geométrica, como deformación o desplazamiento de vértices a gran escala, es posible que la división espacial original falle, lo que reduce el rendimiento de la detección de colisiones durante el recorrido de rayos. Como resultado, se debe activar una reconstrucción completa, en lugar de una actualización incremental, de los BLAS/TLAS altamente dinámicos cada N fotogramas.
Por último, para optimizar el rendimiento de la renderización del trazado de rayos, adopta una estrategia de construcción de TLAS dinámica basada en la región visible del personaje: solo los modelos dentro del umbral de radio activo del personaje se incluyen en el TLAS para reducir la sobrecarga principal del cálculo de intersección de rayos.
Reflejos con trazado de rayos
Las reflexiones con trazado de rayos tienen varias ventajas sobre las técnicas tradicionales, como las reflexiones en el espacio de la pantalla (SSR) y las reflexiones planas (superficies simples que proyectan una escena en una dimensión). La reflexión con trazado de rayos simula físicamente la trayectoria de la luz, captura con precisión objetos dinámicos dentro y fuera de la escena, admite reflejos naturales de superficies curvas y no planas, y permite varios efectos de rebote de luz, como espejos. Por el contrario, el SSR se limita a la información visible en la pantalla, y las reflexiones planas son propensas a errores visuales o distorsiones en escenas complejas.


En principio, la reflexión con trazado de rayos es similar al SSR tradicional: emite rayos en la dirección de la reflexión de la línea de visión píxel por píxel y calcula la intersección de los rayos con los objetos de la escena. El punto de intersección que muestra la API de Ray Query contiene información geométrica (incluidos el ID de instancia, el índice de geometría y el índice de primitiva) y parámetros de rasterización (coordenadas barycéntricas) a nivel del triángulo, pero no contiene datos de color de píxeles. La solución típica usa la tecnología de vinculación de recursos sin vinculación para precompilar todos los parámetros de textura y material de la escena en un array de índices globales. Con los identificadores geométricos que muestra la consulta de rayos, se pueden buscar las propiedades físicas del material correspondiente (como el mapa normal y la rugosidad) y, luego, combinarse con la interpolación de coordenadas barycéntricas para calcular la información de sombreado de la superficie, y el valor de color real de la intersección se puede reconstruir a través de la rasterización.
Sin embargo, durante el proceso de implementación, el equipo de Diablo Immortal descubrió dos problemas técnicos importantes:
- El modelo de iluminación se unificó de manera forzosa, lo que entró en conflicto con los diversos sistemas de sombreado acumulados en la historia del proyecto y generaría una discrepancia entre el material especular y el original.
- La variedad de formatos de vértices genera una degradación de la eficiencia de la ramificación de instrucciones en la etapa de rasterización, lo que es un problema importante en el presupuesto de rendimiento ajustado del dispositivo móvil.
El equipo de Diablo Immortal introdujo de forma innovadora el búfer de visibilidad para separar el procesamiento de la geometría de los cálculos de sombreado:
- Fase de trazado de rayos: La información de los rayos que impactan a nivel de píxeles se captura en tiempo real a través de la consulta de rayos. El identificador espacial 3D (
InstanceID
conPrimitiveIndex
) del punto de intersección se codifica en un ID de visibilidad compacto y se escribe en el búfer de espacio de pantalla. - Etapa de coloración: Al igual que las operaciones que realizan los sombreadores de vértices y píxeles, los identificadores geométricos en el búfer de visibilidad se analizan de forma dinámica, se recuperan las propiedades de vértices (como UV y normales) y los mapas de materiales basados en la física del modelo original, y, por último, se realizan los cálculos de sombreado asociados con el tipo de material.
Esta solución permite que los recursos de arte se conecten al sistema de reflexión con trazado de rayos sin tener que modificar los formatos de vértices ni los sombreadores.
Pasos de renderización específicos
Pases de consulta de Ray
Corresponde a la etapa de trazado de rayos y genera un búfer de visibilidad para las reflexiones del espacio de la pantalla:
- Color0
- Formato: R32G32UInt
- R = TriangleID, G = Barycentrics

- Profundidad:
- Formato: Depth32F
- D = EncodeAsFloat(InstanceIdx, GeometryIdx)
- El identificador de material de la intersección se codifica en punto flotante de 32 bits y se escribe en el búfer de profundidad para la siguiente etapa de la técnica de detección de coincidencia de codificación de profundidad del material.

En comparación con el sombreador de cómputos, la consulta de rayos en el sombreador de píxeles tiene las siguientes ventajas:
- Integración de canalización: La canalización se incorpora directamente en las canalizaciones de renderización diferida o directa existentes, lo que mantiene la continuidad del estado de la canalización de renderización.
- Optimización del ancho de banda para dispositivos móviles: En el caso de la arquitectura basada en mosaicos para dispositivos móviles, se puede activar la compresión sin pérdidas en el chip cuando se escriben datos de hits de rayos en
RenderTarget
, lo que reduce el consumo de ancho de banda de la memoria en comparación con el resultado tradicional del sombreador de cómputos en el búfer. - Control de cantidad de rayos: Las áreas no reflectantes se pueden marcar y rechazar mediante una fase de precálculo en combinación con una prueba de plantilla.
Cómo resolver un pase
En la etapa de coloración (consulta Reflexiones con trazado de rayos), el equipo de Diablo Immortal logró una coincidencia de identificación rápida con la unidad de hardware de prueba de profundidad y la aplicación de color a los materiales en lotes sucesivos.
Para cada material, se emite un pase de dibujo de pantalla completa. El sombreador de vértices reconstruye de forma dinámica el identificador codificado del material actual. Con la prueba de igualdad de profundidad, el identificador se compara con los valores codificados en el búfer de profundidad, y solo se retienen los píxeles cuyos valores codificados coinciden exactamente, es decir, aquellos píxeles que pertenecen a la instancia de material actual. Los píxeles retenidos ejecutan el sombreador de material correspondiente.
A continuación, se implementa la reproducción de materiales de alta precisión en el sombreador de píxeles:
- Decodificación de datos de geometría: Extrae el identificador de triángulo (
MeshID
+PrimitiveID
) y las coordenadas barycéntricas del búfer de visibilidad y carga de forma dinámica los atributos de vértice (posición, UV, normal, etc.) del triángulo correspondiente desde el búfer de vértices. Dado que cada modelo se sombrea como un material independiente, no son necesarias las funciones avanzadas, como la vinculación. - Reconstrucción de parámetros de superficie: Calcula las coordenadas UV en la intersección con la interpolación de coordenadas barycéntricas. La rasterización de software se realiza para muestrear el mapa según las UV interpoladas.
- Reutilización del cálculo de sombreado: Reutiliza directamente el código de sombreador existente para mantener la misma lógica de material que la canalización de renderización principal.

Por último, los modelos que realmente participan en el cálculo de la reflexión solo representan una parte muy pequeña de la escena. Los datos de identificación del modelo de reflexión que muestra la GPU se pueden leer de forma asíncrona para eliminar los modelos o materiales que no participan en la reflexión, lo que reduce de manera eficaz la cantidad de llamadas de dibujo (una llamada de dibujo ocurre cuando se envían materiales y una malla a la GPU para dibujar) en la etapa de sombreado.
Reflexión especular basada en la física
Para lograr reflexiones de alta fidelidad, las superficies reflectantes se clasifican en uno de estos tres tipos según la rugosidad:
- Sin reflexión: Se pueden omitir los cálculos de reflexión para estas superficies para ahorrar recursos. Si la superficie es muy rugosa, la reflexión se vuelve borrosa y débil, por lo que la contribución no es evidente.
- Reflejo de espejo: Al igual que un espejo liso, la imagen reflejada es clara y no está desenfocada. Enfoca la línea directamente en la dirección de la reflexión desde la línea de visión.
- Reflexión brillante: La reflexión con una cierta rugosidad de la superficie se simula en función del muestreo de importancia GGX, que puede tener en cuenta la eficiencia computacional y la precisión física. La reflexión se desvía hacia la dirección principal de la reflexión especular cuando se emite la línea, lo que mejora la eficiencia de muestreo del área de los reflejos.
Para lograr una calidad de imagen utilizable con un consumo de energía limitado, el equipo de Diablo Immortal adoptó una solución de 1SPP+Denoiser. Es decir, el equipo de Diablo Immortal tomó una muestra por píxel y, luego, se usó un algoritmo de reducción de ruido temporal y espacial para suavizar la gran cantidad de ruido que introduce la baja tasa de muestreo.
El equipo de Diablo Immortal eligió el filtro de reducción de ruido de reflexión en AMD FidelityFX Denoiser, un filtro de reducción de ruido de alto rendimiento optimizado para reflexiones con trazado de rayos y reflexiones en el espacio de la pantalla. La principal ventaja del filtro de reducción de ruido de reflexión es el algoritmo de reducción de ruido híbrido espaciotemporal del filtro: combina la trama actual y los datos de trama históricos (basados en la compensación del movimiento), junto con técnicas de filtrado espacial (como el filtrado de retención de bordes guiado por la varianza), el filtro de reducción de ruido de reflexión elimina el ruido de manera eficiente y genera efectos de reflexión suaves con un muestreo muy bajo.
Para adaptarse a las características de las canalizaciones de renderización que se desarrollan por sí mismas y cumplir con las estrictas restricciones de rendimiento de los dispositivos móviles, el equipo de Diablo Immortal implementó la optimización y la adaptación de la arquitectura segmentadas cuando se integró el AMD FidelityFX Reflection Denoiser.
Ray tracing de alta fidelidad con Vulkan
Diablo Immortal se ejecuta en una amplia variedad de dispositivos Android compatibles con Vulkan, en los que el equipo de Diablo Immortal aprovechó las innovadoras capacidades de trazado de rayos de hardware de GPU. Vulkan redujo la sobrecarga y la fricción del desarrollo, lo que facilitó la entrega de contenido y jugabilidad de alta calidad de Diablo Immortal a los usuarios de Android.