HardZone – ¿Qué son los Mesh Shaders en las GPU compatibles con DX 12 Ultimate?

Tanto NVIDIA como AMD han hablado de una tecnología llamada Mesh Shaders, la cual es una de los arietes para el avance visual a través de las GPU en los próximos años. Pero, ¿qué realmente son los Mesh Shaders y cuál es el motivo de su existencia? Os lo explicamos junto a los cambios en el hardware de las tarjetas gráficas

Si les preguntásemos a los desarrolladores de videojuegos para consolas 4K y para PC si es más importante el Ray Tracing de cara al futuro o el cambio en la parte «geométrica» del pipeline 3D, muchos de ellos no sabrían que decir. Los Mesh Shaders forman parte de una evolución en la geometría de la escena, la cual va a permitir objetos mucho más detallados en los juegos.

¿Qué es un Shader?

Shaders sobre objeto

Un Shader es un programa que ejecutan una serie de unidades especializadas en las GPU que tienen la capacidad de ejecutar programas. Los Shaders se diferencian de los programas que se ejecutan en una CPU por el hecho que se utilizan para manipular los atributos de una o varias primitivas gráficas.

Una primitiva gráfica puede ser un píxel, un vértice o un triángulo si hablamos del pipeline 3D. Pero un Shader también puede ser lo que llamamos un Compute Shader, el cual manipula cualquier tipo de datos, pero es independiente del pipeline gráfico y se utiliza fuera de este.

Las unidades que ejecutan los programas shaders están en todas las GPU y a día de hoy hay decenas de estas en cada GPU, incluyendo las de gama baja. Desde el momento en que para un procesador un píxel, un triángulo, un vértice o el mapa de una proteína no son más que datos, las unidades que se utilizan para ejecutar estos programas son iguales independientemente del tipo de shader.

¿Qué son los Mesh Shaders?

Mesh Shaders

El concepto de los Mesh Shaders parte de dar la versatilidad de los Compute Shaders a los diferentes tipos de Shaders que se utilizan en lo que llamamos el World Space Pipeline en el Pipeline 3D. En otras palabras: los que se utilizan para manipular la geometría de la escena.

Para entenderlo hay que tener en cuenta que lo que diferencia un Compute Shader del resto de Shaders excepto el Pixel Shader, son los datos de entrada que reciben para manipular y los de salida que emiten. La idea del Mesh Shader no es otra que unificar todos los Shaders gráficos que tienen que ver con la manipulación de la geometría de la escena en un solo tipo de Shader.

Es decir, los Mesh Shader unifican en un solo tipo de programa Shader a los Vertex, Hull, Domain o Geometry Shader. Ya que les permite a los desarrolladores definir los parámetros de entrada y salida de los programas shader con total libertad, lo que además de simplificar y redefinir el World Space Pipeline también le da una mayor versatilidad.

El concepto Meshlet

DX12 Ultimate

El pipeline 3D no va a ser modificado, pero si la forma en la que trabaja con la geometría de la escena en el World Space Pipeline. En la actualidad toda la malla geométrica que compone la escena se calcula al unísono. Cada uno los polígonos de los objetos que forman la escena se encuentran referenciados dentro de la lista de pantalla que es generada por la CPU y todos y cada uno de ellos han de ser procesados en el orden que han sido generados en la lista.

Por lo que nos encontramos con la paradoja de algo que funciona en serie en una GPU que está pensada para el cálculo en paralelo de los datos. ¿La solución? Pues la de reinventar cómo funciona el World Space Pipeline trata a la geometría, y es en este punto donde entran los llamados Meshlets.

Mesh Shaders Meshlets

De la misma manera que un Chiplet es una parte más pequeña de un Chip, un Meshlet es una parte más pequeña de una malla poligonal. Su funcionamiento es bien simple, en vez de tener En vez de tener una lista única para la geometría lo que tenemos son varias listas pequeñas que son procesadas en paralelo en la que cada parte se encarga de una parte de la malla poligonal de la escena. Gracias a ello la capacidad para calcular la geometría de la escena aumenta al mismo tiempo que se hace menos rígida de cara a los programadores.

Además, debido a que los Mesh Shaders pueden actuar como cualquier tipo de shader se puede trabajar en diferentes etapas del pipeline con los diferentes Meshlets de manera asíncrona, e incluso ejecutarlos en un orden diferente al del pipeline tradicional si es necesario.

El Amplification Shader

Amplification Shader

El Amplification Shader es un tipo de programa Shader que ocurre en el pipeline antes Shaders. Aunque al contrario de otros Shaders del pipeline 3Dpero no manipulan ningún tipo de primitiva gráfica, aparte de ser completamente opcionales.

Su función es la de controlar la ejecución de los Mesh Shaders, es decir, a través de ellos podemos decidir que Mesh Shaders se van a ejecutar y cuáles no, en que orden lo van a hacer y tienen la capacidad de añadir y quitar datos de los Meshlets que manipulan los Mesh Shaders.

Sin los Amplification Shaders, la generación de los índices de geometría de los Meshlets es generada por la CPU, con el Amplificacion Shader dichas listas se pueden manipular desde la misma GPU. Esto permite generar escenarios en los que es necesario añadir o quitar geometría mucho más fácilmente como es el caso de la teselación y el Culling.

¿Qué ventajas tienen los Amplificacion y los Mesh Shaders en los juegos?

Demo de Unreal Engine 5

Las ventajas que aportan son varias, os vamos a enumerar las más conocidas:

  • Permiten la eliminación de la geometría superflua y por tanto no visible sin tener que calcular todo el pipeline.
  • Permiten la teselación de manera adaptativa, esto significa poder seleccionar el grado de teselación, permitiendo modelados extremadamente detallados cercanos a la cámara.
  • Puede generar geometría a diferentes niveles de detalle de manera dinámica sin que los modeladores 3D tengan que hacer varias versiones de un mismo modelado para ello.
  • Mejora la animación de los objetos al dar más versatilidad a la hora de manipular los shaders relacionados con la geometría.

Todas ellas las vamos a ver implementadas en todos los juegos una vez DX12 Ultimate se convierta en la API de referencia a la hora de desarrollar los juegos en PC. Esto llevará a que veamos desaparecer técnicas como el uso de mapas de normales y derivados para representar superficies en relieve y un mayor nivel de detalle

The post ¿Qué son los Mesh Shaders en las GPU compatibles con DX 12 Ultimate? appeared first on HardZone.