Blog Personal.

Uncategorized

La Next-Next Gen

Esto es una entrada que tenia en borrador hace mucho pero que mucho tiempo, no es sobre lo que veremos en PlayStation 5 y Xbox Series X sino lo que vamos a ver más allá de estas, pensad en esta entrada como una visión a futuro de como ha de evolucionar el hardware gráfico y como el actual paradigma de la GPU va a desaparecer por completo para verse reemplazado por un nuevo tipo de unidad para el procesamiento gráfico.

El Camino hacía el micropolígono

¿Que es un micropolígono? Un micropoligono ocurre cuando el poligono es lo suficientemente pequeño como para ser unitario o menos de unitario, esto significa que tiene un tamaño de (<=1, <=1, <=1 ) en el espacio tridimesional y provoca un cambio importante en el funcionamiento de los gráficos en 3D hasta el punto en que su implementación a tiempo real requiere un cambio de paradigma y de la forma en la que se entiende el hardware.

¿Pero de donde nació?

REYES es el acronimo de Render Everything Your Eyes See y es el pipeline gráfico creado por Pixar para su Renderman que fue utilizado durante años y antes la implementación del Trazado de Rayos en sus películas, se trata de un renderizador offline que no se pensó para tiempo real y la particularidad es que se basaba en micropoligonos.

La particularidad de REYES es que renderiza utilizando micropolígonos, es decir, poligonos lo suficientemente pequeños como para tener el tamaño de un pixel, esto provoca que su pipeline sea distinto al utilizado en los derivados y evoluciones de OpenGL (Direct3D, Vulkan y demás lo son aunque utilicen nombres comerciales distintos).

Una de las cosas que nadie comenta es el hecho que poco a poco las GPUs están evolucionando hacía un pipeline basado en micropoligonos como REYES. Por ejemplo los recién adoptados Primitive/Mesh Shaders son una de las claves para la implementación de la teselación adaptativa y dichos cambios en el pipeline geométrico permiten la implementación de un motor de renderizado tipo REYES a tiempo real a futuro pero los cambios en la GPU van a ser profundos y no los vamos a ver en la actual generación sino en una generación más allá.

¿Que ventajas tiene? La más importante que al ser los poligonos completamente unitarios es posible modelar cualquier forma tridimensional con ellos por compleja que sea. Pero para su implementación es necesario hacer cambios profundos en el pipeline gráfico, especialmente en la unidad de rasterizado que es una unidad de funcion fija. El rasterizado toma la información geométrica 3D que le envía el pipeline geométrico y la convierte en fragmentos y tiene una tasa fija para hacerlo, es decir, no puede sobrepasar de una cantidad concreta de triangulos a rasterizar por lo que se puede ver sobrepasado si la cantidad de geometría es demasiado alta. El problema es que si disminuimos enormemente el tamaño de los triángulos entonces la cantidad posible de estos aumenta considerablemente y la unidad de rasterizado se sobresatura por lo que será necesario mejorar la capacidad de este, pero esto ya lo veremos en una seccion de esta misma entrada.

En el rasterizado convencional el tamaño mínimo de un triangulo convertido en fragmentos por la unidad de rasterizado ha de ser de 2×2 pixeles, si es de menos entonces los Pixel/Fragment Shaders lo tratarán como si fuese 4 pixeles y esto es debido a que trabaja con grupos de 2×2 pixeles por la interpolación bilineal de la unidad de texturas. Pero fijaos en un detalle, con el renderizado via micropoligonos desaparece el Pixel/Fragment Shader por el hecho que la geometría es tan pequeña que podemos tratarla como si fuesen pixeles… ¿Significa esto que la carga computacional disminuye? No, pensad que la carga computacional depende del número de primitivas de cada étapa y al pasar a micropolígonos aumentan enormemente la cantidad de primitivas previas a la etapa de rasterizado, la única diferencia es que en vez de aplicar el «Shading» después del rasterizado lo aplicamos antes del rasterizado.

Uno de los problemas que tiene el rasterizado y es la enorme cantidad de cálculo que se requiere en la fase de texturizado donde actuan los Pixel/Fragment Shaders.

¿A que se debe esto? Pues al hecho de que es en esa etapa que la primitiva gráfica a tratar es mucho más abundante que en el resto de etapas del pipeline gráfico. El problema es que además es que la cantidad de píxeles y/o fragmentos a tratar en la escena crece con la resolución y dada la enorme carga en computación es importante entender el motivo por el cual existen eliminación de primitvas superfluas en étapas anteriores.

Por lo que REYES y el Rasterizado Clásico se encuentran con el mismo problema, a diferentes etapas debido a que el pipeline es diferente. En el Rasterizado Clásico con la enorme cantidad de pixeles a tratar, en REYES por la enorme cantidad de micropoligonos que son cercanos al tamaño de un pixel y tenemos una cantidad ingente de ellos en escena. El caso es que REYES no es posible porque requiere cambios importantes en las unidades de función fija que por el momento no son necesarios en los juegos.

El Trazado de Rayos al Rescate.

El trazado de rayos es el futuro… ¿Pero cuando se dará este cambio? Pues para entenderlo hemos de entender que en el trazado de rayos la geometria (cantidad de polígonos) escala logaritmicamente. Esto es debido a que los objetos en la escena son colocados en arboles espaciales y solo son renderizados si el rayo intersecciona con el objeto. Esto hace que en el trazado de rayos la carga computacional respecto a la cantidad de geometria en pantalla pase a ser de log(x) en vez de ser (x) y por tanto la carga computacional se reduce llegados a un punto de complejidad geometrica, es decir, que en el salto a los micropolígonos el trazado de rayos es fundamental ya que reduce la cantidad de micropolígonos a tratar al eliminar de la ecuación aquellos que se ven descartados por no interseccionar el rayo con ellos.

La linea roja es el aumento de la necesidad de computación a medida que aumenta la geometría en el rasterizado clásico. La linea verde es la relacionada con el trazado de rayos.

La base de todo esto esta en las diferencias entre el algoritmo base del trazado de rayos y del rasterizado.

Se llega a un punto en la complejidad de la escena en cuanto a la cantidad de polígonos donde el rasterizado ya no ofrece un rendimiento en velocidad superior al del trazado de rayos y se cambian las tornas y esto nos lleva a los micropolígonos y el problema de la carga computacional por la enorme cantidad de estos a tratar que son una cantidad de geometría ingente.

Es por ello que las unidades de intersección por hardware son muy importantes, por el momento su uso lo vemos limitado pero a medio-largo plazo no va a ser así ya que van a ser esenciales para que todos los micropoligonos en los que no impacten los rayos sean descartados a la hora de darles «textura» y aplicarles el shader correspondiente.

¿El fin de la Unidad de Texturas?

El problema actual como he contado antes esta en que los Pixel/Fragment Shaders no pueden operar con menos de 2×2 pixeles. Esto provoca que la unidad de rasterizado cuando ve un fragmento de menos de ese tamaño en muchos casos lo descarte para ahorrar en el rendimiento ya que trataría ese poligono de 1 pixel como si fuesen 4 pixeles y por tanto la carga computacional sería 4 veces más grande y si el tamaño del micropolígono es de menos de 1 pixel nos podemos encontrar con el prohibitivo coste de una ordén de magnitud y con una potencia enorme siendo completamente desaprovechada.

Ahora bien, cuando un programa shader pide una textura en concreto envía esa petición a las unidades Load/Store dentro de la Compute Unit y se realiza un proceso de búsqueda de los datos… Pero pensemos un poco la situación con los micropolígonos.

Dado que en un micropoligono el tamaño de cada uno de ellos es de 1 pixel o menos de 1 pixel entonces las texturas son de 1×1 y la definición completa de textura desaparece y solo necesitamos un programa shader que le de un valor de color al micropolígono y punto, con ello las unidades de texturas dejan de ser necesarias y se mantienen solo por compatibilidad hacía atrás con el rasterizado clásico dentro del nuevo paradigma.

Por si fuera poco, el hecho de operar a nivel de programas shader en los registros reduce enormemente la carga energética donde cuanto más alejado esta un dato respecto al procesador mas alta es la carga energética. La eliminación de las texturas para ser reemplazadas por puros programas shader permite este ahorro en el consumo y elimina enormemente la dependencia del ancho de banda para texturas, no solo eso sino que elimina por completo el último shader diferenciado del Compute Shader y hace que pasamos de tener varios Shaders distintos a tener «El Shader» de manera universal.

El hecho de darle color al objeto a través del shader no es algo tan revolucionario sobre lo ya visto, sino que es la habilidad de modificar la posición de los micropoligonos/vertices para crear efectos de desplazamiento de la geometría a tiempo real.

El cuello de botella de la unidad de Rasterizado

La unidad de rasterizado es una unidad de funcion fija cuyo ratio depende de la velocidad de reloj de la GPU, actualmente una unidad de rasterizado envía un triangulo convertido en fragmento por ciclo.

¿Pero de cuantos fragmentos pueden ser esos triangulos? La respuesta la tenemos en el ratio de unidades ROP por unidad de rasterizado y actualmente es de 16:1, esto significa que enviar fragmentos de más de 16 pixeles a las Compute Units no aporta nada… ¿Pero que ocurre si enviamos menos de 16? Pues que la eficiencia de la unidad de rasterizado disminuye.

Por lo que necesitamos que la unidad de rasterizado sea capaz de rasterizar una mayor cantidad de geometría… ¿Pero para enviarla al Pixel/Fragment Shader? No, porque con el nuevo pipeline este habrá desaparecido por completo, simplemente lo que se rasteriza que son los micropoligonos va a ser lo que se escriba en el búfer de imagen. ¿Las consecuencias de esto? La funcionalidad del rasterizador y de los ROPS se ven unificadas en un nuevo tipo de unidad de funcion fija capaz de rasterizar una enorme cantidad de micropoligonos y convertirlos en pixeles en pantalla.

Memoria Embebida y 3DIC

Las GPU del futuro llevaran memoria embebida en formato 3DIC, es decir, montada a través de vias de silicio encima del procesador, con lo que vamos a pasar del Inteporser Stacking (2.5DIC) al Vertical Stacking (3DIC).

La memoria HBM se planteo inicialmente como un tipo de memoria para colocarse encima del chip, pero esta idea se vio descartada por el calo generado que obligaba al procesador que había debajo a reducir la velocidad de reloj para poder mantener unas temperaturas aceptables. Esto ha llevado al desarrollo de nuevos tipos de DRAM 3D con tal de reducir los problemas de calor y al mismo tiempo desarrollar soluciones en ese sentido para hacer posible la viabilidad del 3DIC.

¿Pero que ventajas tenemos? Para empezar la reducción del consumo energético por operación, lo cual permite un mayor rendimiento/w pero en gráficos 3D lo que obtenemos es una memoria directamente conectada al procesador (embebida) no solo con el enorme ancho de banda de las memoria embebidas sino además con una enorme densidad con la que almacenar los datos e instrucciones a procesar.

La eliminación del concepto textura hace que el nuevo paradigma no necesite memorias para almacenar enormes cantidades de texturas desde las que hacer streaming continuo por tanto de la ecuación del ancho de banda dicha parte desaparece, necesitando solamente la memoria para el búfer de imagen y para almacenar el BVH para la intersección de rayos. Es más, la cercania física de la memoria debería acelerar el funcionamiento de la unidad de intersección.

¿Cuanto ocurrira esto?

Nvidia tiene un mapa de ruta muy interesante…

En realidad el actual paradigma de gráficos mixtos entre rasterizado y trazado de rayos que vamos a ver en la siguiente generación a la vuelta de la esquina empezó a nivel de hardware con las Nvidia Turing de 2018 y vamos a ver las primeras GPUs con el siguiente paradigma siendo lanzadas a partir de 2023 en PC como una fecha mínima, esto coloca la transicion real al trazado de rayos via transición a los micropolígonos no para la next gen sino para la next-next gen…

En conclusión, a partir de 2023 puede que aparezca un nuevo tipo de unidad de procesamiento gráfico que reemplace a las actuales GPUs, las cuales se acabarán quedando como unidades esenciales para reproducir juegos del pasado. Al igual que ocurrió con las tarjetas 3D iniciales que iban aparte de la tarjeta gráfica aquí nos podemos encontrar con lo mismo.

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

5 1 vote
Article Rating
8 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Snake128

Muy interesante.

Por cierto una pregunta Urian, que ventajas tiene el ancho de banda en la RAM?? No lo entiende muy bien en que se beneficia.

Gracias

Steven

Hola Intel uso reyes

Juan

Gracias x la entrada Urian! Entonces sería el fin de la GPU como la conocemos. Entiendo q los juegos tal cual se desarrollan no serían compatibles con este cambio. Yo no entiendo mucho del tema, pero seguiría siendo rasterizado aún o se pasaría a trazado de rayos en su totalidad con el aumento de poder de cómputo q esto conlleva? Y otra pregunta, para realizar un cambio así de paradigma debería ser en base a una API nueva, no? Xq no me veo sólo a una empresa cambiar y a las otras no si no se llega a programar los… Read more »

Isaac

Bueno, no soy Urian pero el fin de la GPU como la conocernos es por la desaparición del rasterizador y las unidades de textura (se mantendrían por la retrocompatibilidad) asi que no seria rasterizacion

Y lo de la api nueva seguro que si, Intel y Sony, con Larrabe y CELL, hicieron hardware sin el software que acompañe y no tuvieron el éxito esperando por sus creadores

Saludos

Jorge

Interesante este tema. No estaba al tanto de ello. Gracias. No tiene que ver mucho con la entrada pero me han regalado la nueva Nvidia Shield TV y estoy como un crio con lo de la inteligencia artificial. Ando viendo videos sobre ello, sobre las posibilidades de llevarlo a Nintendo Switch y ademas ando flipandolo bastante con NVIDIA DLSS 2.0 En comparacion a la version 1.0 esto es otro mundo y las posibilidades son casi infinitas. Pero bueno hay que seguir juego por juego para implementarlo y a nivel de desarrollo no se si es mucho trabajo. Aunque el entrenamiento… Read more »

Big crunch

No se calculan los micropolígonos.

No hace falta que si un rayo no lo toca se salte.

Por eso el MSAA, que aporta información subpixel, mejora el shimmering e iluminación de detalles muy pequeños corrigiendo el resultado.

El super sampling lo hace aún más al tener más información subpixel. Y se usa por norma en prerenderizados con raytracing.

El super sampling fake de acumular fotogramas del TAA también lo hace. Una vez acumulados 8 samples mas el frame actual en matriz 3×3 hace downsampling y se dispone de detalles subpixel

Daniel

Entonces ¿un micropoligono es como un voxel?