sábado, 24 de junio de 2023

Así han evolucionado los gráficos en PC gracias a Shader Model

A la hora de desarrollar juegos es necesario que los programadores tengan una serie de estándares y directrices para desarrollar los diferentes apartados del mismo de forma coherente y que les permite exprimir hasta la última gota de los PC más potentes del momento. Ya sea para conseguir los mejores gráficos y/o el mejor importante. En esto es muy importante los llamados Shader Model, pero, ¿qué son y cuál ha sido su evolución?

La complejidad de una GPU es tan alta que los viejos métodos de estudiarse la arquitectura y desarrollar a bajo nivel ya no sirven, ya que el conocimiento y las horas necesarias para ello que serían necesarias no permitirían usar las últimas tecnologías. Es por ello que es importante crear abstracciones y normas que ayuden a los desarrolladores a crear nuevos títulos y los motores gráficos que los sustentan de forma rápida y fácil.

¿Qué son los Shader Model en DirectX?

Conocemos como Shader Model a una serie de normas y especificaciones escritas por Microsoft para realizar programas Shader que se ejecuten en las tarjetas gráficas compatibles con su API Direct3D. Por lo que les proporciona, por un lado, a los desarrolladores de hardware una serie de normas para desarrollar futuras GPU, así como a los desarrolladores de motores gráficos para juegos una guía de lo que pueden hacer o no con una determinada generación de tarjetas gráficas.

Por lo que más que ser una tecnología en concreto, son más bien una serie de directrices a seguir para desarrollar hardware y software que sea compatible y permita utilizar todas las funcionalidades incluidas en cada una de las versiones de DirectX. Al mismo tiempo, son una muestra de la evolución de las capacidades de las diferentes GPU a través del tiempo.

Así es como han evolucionado las diferentes versiones con el tiempo

La primera tarjeta gráfica para PC que usaba Shaders programables fue la GeForce de NVIDIA aparecida en el 2001 y basada en el chip NV20, fue el primer hardware creado alrededor de DirectX 8. Desde entonces hemos visto la evolución con un pipeline 3D mucho más complejo y una evolución en las arquitecturas de las GPU del mismo calibre. Desde entonces hemos ido viendo una evolución, la cual no solamente hemos visto representada a nivel de hardware, sino también en los juegos que los han ido usando, consiguiendo con ello una evolución clara en los gráficos de los juegos.

Shader Model 1.0

Se introdujo con DirectX 8 y permitió por primera vez programas con aritmética sencilla para manipular los valores básicos de los vértices y los píxeles en escena. Sin embargo, solo permitía operaciones de aritmética y lógica simple y carece de cosas como poder acceder a las texturas desde la parte de proceso de la geometría en el pipeline 3D y de instrucciones de salto y control de bucles.  El juego más representativo de los lanzados bajo dicha API es el clásico de Id Software, DOOM 3.

En cuanto a las tarjetas compatibles con el Shader Model 1.0, tenemos en el caso de NVIDIA tanto las GeForce 3 como las GeForce 4 a excepción de los modelos MX de estas últimas que fueron GeForce 2 renombradas. Sí, hablamos de AMD, tuvimos como primer representante a las series Radeon 8000 y Radeon 9000.

Shader Model 2.0

La segunda versión del Shader Model apareció con la novena versión de DirectX. No trajo consigo nuevos tipos de shader, pero fue la primera vez que fue posible usar programación de alto nivel para programar los shaders, el llamado HLSL o High Level Shading Language, un lenguaje con sintaxis C que se sigue usando a día de hoy.
Una de sus mejoras adicionales fue la capacidad en los programas Pixel Shader de poder manipular varias texturas simultáneas por polígono usando un solo programa, hasta un límite de 32, cuadriplicando de paso el número de texturas al mismo tiempo. Una muestra de un juego desarrollado con esta versión de Shader Model es el clásico de Bethesda perteneciente a su saga Elder Scrolls, en concreto la cuarta parte que recibe el subtítulo de Oblivion.
 
Las tarjetas gráficas con soporte para Shader Model 2.0 fueron las GeForceFX de NVIDIA, y la gama de las Radeon X800 por parte de AMD.

Shader Model 3.0

La tercera versión de los Shader Model no supuso un cambio de API, dado que es más bien una versión mejorada de la anterior. Sin embargo, fue la primera en soportar valores en coma flotante de 32 bits, forzando a las tarjetas gráficas plenamente totalmente compatibles a tener un set de registros e instrucciones, así como las ALU que resulten totalmente compatibles con dicho formato, el cual se ha mantenido como el estándar para videojuegos en PC desde entonces hasta la actualidad.

Como curiosidad, se trata del Shader Model más utilizado en la historia de los juegos para PC, mucho más que su suceso y convirtió a DirectX 9.0 en su versión más avanzada, en la API más usada para juegos durante un largo periodo de tiempo. Por lo que son muchos los juegos que usaron dicha versión, pero nosotros hemos escogido al primer BioShock como juego representativo.

En cuanto a las tarjetas gráficas que se diseñaron alrededor del Shader Model 3.0, tenemos por parte de NVIDIA las GeForce 6000 y 7000, y por parte de AMD las Radeon X1000.

Shader Model 4.0

DirectX 10 no solo trajo una nueva versión de Shader Model, sino también una bien cargada de novedades. La primera de todas, la creación de los Geometry Shaders, los cuales permiten manipular la geometría antes de su proceso de conversión a píxeles. Esto permitía hacer cosas como el añadido de nuevos vértices y la eliminación de otros, aparte de complejos sistemas de partículas, permitiendo humo y nubes volumétricas. Sin embargo, el gran cambio fue la unificación de los núcleos en un solo tipo, lo que hizo que en cuanto a GPU, la separación de las unidades de ejecución por tipo de programa shader llegará a su fin.

Si tuviéramos que escoger un título para PC que representase las capacidades de esta versión, sin duda Crysis se lleva todos los números como demostración de sus capacidades. Y en cuanto a los modelos de tarjetas gráficas, pues se puede decir que pese a la mayor popularidad del Shader Model 3.0, la versión 4.0 ocupo varias generaciones de tarjetas gráficas de NVIDIA y AMD. En el caso de la primera, las GeForce 8, 9, GT 200 y 300 (Tesla). En el caso de AMD tuvimos las HD 2000, HD 3000 y HD 4000.

Shader Model 5.0

La quinta versión de los Shader Model vino con la decimoprimera versión de DirectX y con ello trajo cambios tan profundos como en la anterior. Primero de todo, los Geometry Shader desdoblaron su funcionalidad en los Hull y Domain Shader. En segundo lugar, se introdujo por primera vez el pipeline de computación, el cual permite usar la GPU para ejecutar algoritmos de manipulación de datos en paralelo, pero que no tengan nada que ver con los gráficos, lo que a su vez introdujo también a los llamados Compute Shaders.
 
Se puede decir que si el Shader Model 5.0 domino la década de los 2000, este lo hizo en la década de los 2010. Todo ello debido a la dificultad de programación que se le añadió al sucesor. Por lo que pese a tener ya más de diez años, sigue estando totalmente vigente en el desarrollo de nuevos videojuegos. Como representante a las capacidades de esta API hemos escogido al aclamado título de CD Projekt The Witcher 3.
 
En cuanto a tarjetas gráficas, las NVIDIA GTX 400 y 500 bajo arquitectura Fermi fueron las primeras en tener soporte para Shader Model 5.0, seguidas de las basadas en Kepler que son las GTX 600 y 700. En cambio, por parte de AMD, las Radeon HD 5000 y HD 6000 fueron las que se pensaron alrededor de DirectX 11 y, por tanto, del Shader Model 5.0.
 

Shader Model 6.0

DirectX 12 es la versión más avanzada de la API de Microsoft y pese a que en cuanto a pipeline, la sexta versión de los Shader Model no ha introducido cambios a simple vista, hemos de destacar que ahora las listas de pantalla y de computación se encuentran separadas, con cada una de ellas siendo generada por un núcleo del procesador y con la posibilidad de funcionar a destiempo. Todo ello permite mejorar el uso de los recursos de la GPU, pero exige unos niveles de conocimiento que hacen que buena parte de los juegos para PC, especialmente los más sencillos visualmente, continúen usando la versión anterior.
Con la llegada de DirectX 12 Ultimate y el nuevo pipeline geométrico, donde los Vertex, Hull y Domain Shaders quedan reemplazados por los Mesh Shaders no vino una nueva versión del Shader Model, tampoco con la llegada del Ray Tracing. Aunque a nivel interno, lo que se ha hecho es unificarlos todos ellos, excepto los Pixel Shader, en una especie de Compute Shader universal.  Como ejemplo de dichas capacidades técnicas hemos escogido la segunda entrega de la saga Plague Tale como ejemplo de las avanzadas capacidades del Shader Model 6.0.
 
Hemos de decir que el caso de DX12 y el Shader Model 6.0 es curioso, ya que al igual que Vulkan toma ideas de Mantle, una API de AMD creada para su arquitectura GCN. Por lo que las Radeon HD 7000, R9 200, R9 300, RX 400, RX 500, RX, Vega, RX 5000, RX 6000 y hasta llegar a las actuales RX 7000, todas ellas tienen soporte para Shader Model 6.0, sin embargo, solo las dos últimas generaciones tienen soporte para DX12 Ultimate. Ya para terminar tenemos a NVIDIA donde las GeForce GTX 800, 900, 1000, 2000, 3000 y 4000 son compatibles.
 
Saludos.

No hay comentarios:

Publicar un comentario

Por favor sé respetuoso/a y escribe adecuadamente. Gracias.