Blog Personal.

Uncategorized

PS5 y XSX: Ray Tracing

Hace unas semanas AMD confirmaba que la solución para el Trazado de Rayos iba a ser la misma para todos los sistemas basados en RDNA 2 y que iba a ser una aceleración por hardware.

¿En que se traduce esto? En esta entrada voy a resumir que es el trazado de rayos o más bien lo que significa de cara a los juegos.

En el trazado de rayos, dichos rayos han de atravesar la escena, por eso necesitan un mapa de la misma, este mapa se almacena en una estructura de datos espacial que en el caso que nos ocupa son los llamados BVH (Bounding Volume Hierarchy) que no es otra cosa que una organización en arbol de la geometría de la escena, por tanto como están ordenadas las cosas. ¿Cual es el problema? Las GPUs son realmente horrendas para recorrer un árbol y son muy lentas debido a que son muy lentas para realizar saltos en el código, por lo que recorrer uno de esos arboles es un tedio… ¿Las consecuencias? El trazado de rayos a tiempo real es inviable a través de los Shaders solo por el proceso de recorrido e intersección del arbol BVH… ¿La solución más obvia? Una unidad de función fija que ocupe menos tamaño que aumentar la cantidad de Compute Units de la GPU y acabar teniendo un Behemoth.

En el caso de RDNA 2 dicha unidad forma parte de la unidad de texturas…

Por lo que esta conectada a la cache de datos de la Compute Unit (L0), pero esto no es algo exótico que este conectada a la cache de datos. Es la misma solución que Nvidia donde el RT Core esta conectado también a la cache de datos.

Hay que tener en cuenta que es una unidad de función fija que no ejecutar ningún shader, solo envía un dato de vuelta al Shader. ¿Cual? Si el rayo ha interseccionado total, parcial o no hay intersección con ese objeto en la escena por parte del rayo correspondiente. Dependiendo de la respuesta de la unidad de intersección se ejecutara un programa shader u otro y las unidades SIMD de la Compute Unit actuaran en consecuencia.

La unidad de intersección no hace rebotar el rayo de manera indefinida porque entonces la potencia de estos se terminaría y las unidades SIMD se quedarian…

Si se genera una nueva sección de rayos indirectos debido a un rebote del rayo con el objeto esto depende de que exista un Shader que lo haga. Si hablasemos de renderizando offline para una película o un corto entonces no hay problemas en hacer que el rebote d e rayos sea continuo, pero estamos hablando de sistemas domésticos que tienen que ejecutar juegos a tiempo real donde la potencia disponible es limitada incluso aunque la GPU de la Xbox Series X nos parezca algo con una potencia impresionante creedme que el Trazado de Rayos a tiempo real esta MUY VERDE y vais a ver escenas en los juegos que no lo usen.

A los medios les ha sorprendido en el caso de Xbox Series X que el mismo código que funciona en Nvidia Turing funcione en RDNA, en realidad la única especificación es que la unidad de intersección devuelva de manera correcta si el rayo intersecciona o no, la forma en la que lo hace no importa. Es una unidad de función fija, que a partir de unos datos de entrada aplica siempre EL MISMO PROGRAMA y saca unos datos de salida.

Vale, vale… Urian… ¿Pero cual es su utilidad a corto plazo?

El problema del rasterizado es que no se pensó para representar la iluminación indirecta, esta es el producto de cuando una fuente de luz es generada cuando una fuente de luz directa impacta sobre un objeto.

A esa luz indirecta la llamamos primer rebote… ¿Cual fue la solución? Pues renderizar la escena desde ese objeto como si fuese la cámara y almacenarlo en una textura que utilizar posteriormente. Esto permite los mapas de sombras y de entorno (reflejos)…¿Pero que ocurre con el segundo rebote? Ahí ya tenemos un problema y el rasterizado ya se ve plenamente limitado. Pero no solo eso, sino que ya con el primer rebote tenemos una solución incompleta e inexacta, aparte de mucho más lenta pero la cosa no termina ahí.

El otro problema son los materiales, muchos materiales con el rasterizado no se pueden representar bien, Cuando hablo de materiales me refiero a tipos de superficies, puedes tener la información de color exacta pero al no tener un modelo de la luz completo no puedes representar fielmente esos materiales y acabas teniendo un techo en la representación de los mismos utilizando solo el rasterizado.

La contrapartida de esto es que aplicar el trazado de rayos no es tan fácil como aplicar un botón sino que todos los juegos se han de adaptar y hay juegos cuya representación artística se puede ver completamente destruida con esto. No vais a ver vuestros juegos antiguos mágicamente transformados de un día para otro por lo que es una funcionalidad puramente de siguiente generación y no algo que se pueda aplicar retro-activamente.

Esto es todo, tenéis el Discord y los comentarios de esta entrada para comentarla.

0 0 vote
Article Rating
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Big crunch

Te olvidaste de que el año pasado tú mismo pusiste un chivatazo de un insider sobre que usarían los shaders en menor precision, enteros de 8 y 4 bits…

Criticabas a los que decían que usarían los shaders

Es irónico que tuvieras una primicia mundial y te olvidaras y especularas en contra…

Dani

Hola Urian,
cada cuál ha dado sus especificaciones raytracing como ha querido:

Microsoft ha dicho 380 billones de intersecciones por segundo.
Nvidia habla de 10 Gigarayos/s y 100 TeraOps por segundo para la RTX2080TI. Por otro lado, todo el pipeline de raytracing son 78 RTX-Ops por segundo.
Y a saber qué dice Sony.

¿Podrías relacionarlas, llevarlas a un denominador común?