Hace unos días en el podcast de IGN se hacían la siguiente pregunta: ¿Dónde está al Ray Tracing en los juegos para las consolas de nueva generación?

Y aquí tenemos que hablar del elefante en la habitación, que no es otro que la implementación en cuanto a hardware para el trazado de rayos en AMD es deficiente en comparación con su equivalente en NVIDIA y no hablo de comparar las RX 6000 frente a las RTX 30 no, es peor incluso que el de las RTX 20 que salieron en 2018 para PC y el departamento dirigido por David Wang ha tenido dos años y la ventaja de saber lo que tenían que hacer para tener una buena solución de cara al Ray Tracing.

En HardZone hice un artículo explicando el origen técnico del problema que no es otra que el hecho que la implementación en hardware no es lo suficientemente buena. Aunque lo que nos interesa como usuarios es el rendimiento y ayer en Digital Foundry sacaron una comparativa de Forza Horizon 5 en PC donde se puede ver como afecta al rendimiento la aplicación del trazado de rayos, aunque realmente lo han hecho aplicando un mod al juego original para que se pueda aplicar el trazado de rayos en carrera.

¿Los resultados? En una RTX 3080 el coste de añadir el Ray Tracing en una escena a 4K es de 1,7 milisegundos, en cambio en una RX 6800 XT el tiempo aumenta hasta los 2,9 ms. Hemos de partir de la base que ambas GPU de PC son mucho más potentes que lo que montan las consolas de nueva generación, por lo que ese tiempo tanto en Xbox Series X aumentaría mucho más que esos 2,9 ms.

¿Qué es lo que pienso del Ray Tracing en la nueva generación? Pues que no tenían pensado aplicarlo, es más, pienso que su añadido a última hora en PlayStation 5 es un caso muy a lo SEGA Saturn. No olvidemos que la GPU recibió un cambio de última hora para integrarlo, pero extrañamente PS5 no soporta el resto de tecnologías que AMD añadió en RDNA 2. ¿Por qué implementar el Ray Tracing? Pues por el hecho que solo tenían que reemplazar la unidad de texturas por la nueva que a la vez hace de unidad para el cálculo de la intersección.

Dicho de otra forma, mientras NVIDIA tiene una unidad para texturas y otra para intersección, AMD decide hacer un 2 x 1. ¿El motivo? Añadir una unidad más significa volver a cablear y reorganizar toda la Compute Unit y con ello en consecuencia toda la GPU. Ahora bien, RDNA 2 en PC no es más que una mejora sobre RDNA para aplicar las funciones de DirectX 12 Ultimate como los Mesh Shaders, el Variable Rate Shading e incluso el DirectStorage. SONY en PS5 utiliza su propia API gráfica y ha decidido escoger su propio Stack, el cual ya era proveído por RDNA 1, pero el Ray Tracing requiere hardware nuevo en forma de unidad de cálculo de la intersección y su implementación es tan sencilla como reemplazar una pieza por otra.

Ahora bien, el Ray Tracing no solo lo ejecuta la unidad de intersección de rayos, es mucho más complejo que eso y aplicarlo requiere una potencia adicional muy grande. El hecho de que no se aplique en algunos juegos se puede saber aplicando la navaja de Occam, eso de que la explicación más sencilla es la más correcta y esta no es otra que: falta de potencia tanto en PS5 como en Xbox Series X, de ahí a que los desarrolladores lo descarten en sus juegos. Por el simple hecho que han de hacer recortes importantes en rendimiento o el resultado obtenido no les es artísticamente satisfactorio.

De paso aprovecharé para responder una de las preguntas que me hicisteis.

¿Qué quiere decir Microsoft cuando en su presentación del Hot Chips dijo que en Xbox Series X el RT y los shaders corrían en paralelo?

En el Ray Tracing los shaders no pueden correr en paralelo por el hecho que este utiliza shaders, por lo que lo has entendido mal.

En DirectX Ray Tracing así como en cualquier otra API gráfica similar se utilizan varios shaders:

  • Uno para invocar la creación del rayo (Ray Generation Shader)
  • Otro para calcular la intersección del rayo con la estructura de datos que representa la escena. Este trabajo lo hacen realmente la unidad de intersección.
  • Dependiendo del resultado obtenido se ejecuta uno de estos shaders: Any-Hit Shader para objetos semitransparentes, Closest-Hit Shader para objetos opacos, Miss Shader por si no hay existe una colision.

Es más, en el Hot Chips Microsoft deja claro que su consola ha heredado la paupérrima unidad de intersección de AMD.

¿Cómo lo sé? Por lo que dice el cuarto punto «4 operaciones de texturas o de rayo por ciclo de reloj por Compute Unit», por lo que la unidad está conmutada y por tanto no puede hacer ambas cosas al mismo tiempo. En todo caso AMD ya describió como funciona el Ray Tracing en sus GPU en una patente de 2019.

En realidad NVIDIA pillo a AMD con los pantalones bajados y el marketing fue tan bestia que se vieron forzados a realizar una implementación mínima. Sumadle a esto que estaba encima de la mesa por parte de Microsoft para sus Xbox al tener que soportar todas las funciones de DirectX 12 Ultimate y tenemos la tormenta perfecta para hacer algo con prisas. En todo caso el uso de una unidad de texturas para hacer el cálculo de la intersección para el trazado de rayos no es nuevo y el hardware de ambas unidades es muy similar, la única diferencia es la detección de colisiones.

En todo caso pese a que la función está ahí no es lo suficientemente buena como para utilizarla masivamente, por suerte la implementación de la Ray Acceleration Unit ha costado tan poco en términos de área del chip que quitarla no aporta nada realmente. ¿Qué hubiese hecho yo? Hubiese implementado un equivalente a un Tensor Core para algo estilo DLSS, hubiese sido más útil, pero no estaba en el porfolio de AMD.