Uno de los elementos clave en toda GPU son las unidades de función fija para la creación de escenas en 3D a tiempo real, sin ellas no sería posible las altas tasas de fotogramas por segundo y el alto detalle en los videojuegos. Y es que no solo los TFLOPS marcan la potencia de una arquitectura gráfica y su rendimiento. Su trabajo es descargar a los núcleos de la GPU de tareas esenciales, pero altamente repetitivas. En este artículo os comentamos las más importantes que podéis encontrar en una GPU a día de hoy.
¿Qué es una unidad de función fija?
Uno de los mitos más grandes hoy en día es terminar comparando la potencia de una GPU por la cantidad de FLOPS que tiene, obviando el resto de elementos, especialmente los ASIC dentro del chip gráfico, es decir, aquellos que no son programables, pero que hacen de forma continua y repetitiva tareas esenciales liberando de las mismas a los núcleos de la GPU. El trabajo de dichas unidades no se contabiliza en el cómputo de TFLOPS del sistema, pero su potencia y su labor está ahí.
Unidades de rasterizado
La primera unidad de función fija que trataremos tiene un trabajo crucial en la generación de gráficos en 3D a tiempo real. Su función principal es proyectar las primitivas geométricas (como triángulos) sobre la pantalla desde la perspectiva de la cámara, convirtiendo los vértices de la escena en una representación cartesiana basada en píxeles. Esto implica pasar de un espacio tridimensional basado en vectores (coordenadas del mundo o de la cámara) a un espacio 2D sobre el plano de la pantalla. Además, la unidad de rasterizado identifica qué píxeles de la pantalla están cubiertos por cada primitiva y genera los fragmentos correspondientes para ser procesados en etapas posteriores.
La unidad de rasterizado además marcará el máximo de polígonos que procesara el sistema, ya que este no puede representar más de los que puede rasterizar. Independientemente de que en etapas previas del pipeline gráfico se puedan procesar más por pura potencia bruta de cálculo. En las primeras tarjetas 3D la cifra de polígonos por segundo que se daba era muchas veces la de rasterizado, la cual no deja de ser un límite.
TMU (Unidades de textura)
Al contrario que otro tipo de unidad de función fija, las unidades de textura se encuentran dentro de los núcleos de la GPU. Aunque con las últimas generaciones de arquitecturas gráficas, estas ya no son las únicas unidades internas, ya que las unidades de cálculo de interpolación y de recorrido de la estructura de datos para el Ray Tracing, también se encuentran en cada uno de los núcleos de la GPU. Se encuentran dentro de los núcleos de la GPU por el hecho que esto les da acceso directo a la caché de datos interna, de la que pueden aprovechar su ancho de banda para realizar sus cálculos pertinentes.
Se trata de unidades esenciales, su trabajo principal es no solo pintar los píxeles del color de la textura, sino también asistir a los Pixel Shaders o Fragment Shaders. Una TMU es una unidad de función fija que se encarga de realizar tareas específicas relacionadas con las texturas, como la aplicación de mapeado y el filtrado bilineal, trilineal o anisotrópico. Estas operaciones serían altamente costosas si se realizaran directamente en las unidades SIMD, dado el volumen masivo de píxeles que deben procesarse.
Unidades de Interpolación para el Ray Tracing
Se trata de una unidad de función fija relativamente reciente, su trabajo principal es el de realizar la tediosa y repetitiva tarea de calcular si en el trazado de rayos los rayos proyectados desde la cámara u otro objeto impactan sobre un objeto de la escena, pera ello se apoyan en la unidades de recorrido del árbol BVH. Dependiendo del resultado que devuelva esta unidad se aplicará un tipo de shader u otro o no se aplicará nada.
Al igual que ocurre con otras unidades de función fija, la potencia de las unidades de interpolación no marcan los límites a la hora de aplicar el trazado de rayos en una escena. Eso sí, hay que tener en cuenta que si no impactan con un objeto en la escena simplemente no se realiza ningún cálculo. En cambio, cuando si que hay un objeto y se realiza la interpolación a esto se le llama muestras.
Efecto Gráfico | Baja Calidad (muestras por pixel) | Alta Calidad (muestras por pixel) | Observaciones |
---|---|---|---|
Sombras suaves | 4-8 | 16-32 | Fuentes de luz más grandes o complejas requieren más muestras para transiciones suaves. |
Reflejos realistas | 4-8 | 16-64 | Superficies rugosas como metal cepillado necesitan más muestras para reflejos difusos. |
Refracción y dispersión | 4-16 | 32-128 | Materiales como vidrio o agua demandan más para efectos como dispersión cromática. |
Iluminación global | 16-32 | 128-1024 | Efecto costoso, especialmente en escenas complejas con múltiples rebotes de luz. |
Antialiasing | 2-4 | 16-64 | Elimina bordes dentados; algoritmos como TAA pueden reducir la necesidad de más muestras. |
Profundidad de campo | 8-16 | 32-128 | Depende de la apertura y distancia focal; escenas con más desenfoque necesitan más muestras. |
Motion Blur | 4-8 | 16-64 | Influido por la velocidad del movimiento y la complejidad de la escena. |
Dependiendo del tipo de efecto especial que queramos aplicar con el trazado de rayos, la cantidad de muestras necesarias puede variar. En todo caso, los factores que influyen la cantidad de muestras necesarias son:
- Escenas con muchas luces, materiales complejos o geometrías detalladas requieren más muestras.
- Las luces más grandes necesitan más muestras para simular sombras suaves.
- Para producción de películas, se usan miles de muestras por píxel, ya que no se requiere el procesamiento a tiempo real, mientras que para videojuegos podemos hablar de alrededor de 1-64 muestras dependiendo del hardware.
Unidades de Recorrido del Árbol BVH (Bounding Volume Hierarchy)
Esta unidad de función fija al igual que las anteriores se encuentran en las GPU modernas con soporte para trazado de rayos, sin embargo se encuentran ausenten en algunos casos, como es el caso de la arquitectura RDNA 2 de AMD, utilizada en las GPU de la serie RX 6000 para PC y las consolas PS5 y Xbox Series. No obstante, se ha de aclarar su presencia en el hardware gráfico de PS5 Pro. El recorrido del árbol BVH es una tarea fundamental en el Ray Tracing, ya que se utiliza para acelerar el proceso de detección de intersecciones entre rayos y las primitivas de la escena.
Su función principal es la de recorrer de forma eficiente el árbol BVH, el cual es una estructura jerárquica que divide el espacio 3D en volúmenes delimitadores (bounding volumes), reduciendo drásticamente el número de pruebas de intersección necesarias. Se trata de unidades diseñadas para funcionar en paralelo, lo que les permite procesar múltiples rayos y nodos del árbol BVH al mismo tiempo. Esto permite identificar rápidamente qué rayos pueden intersectar con qué primitivas, acelerando las operaciones de trazado de rayos en tiempo real.
ROP (Render OutPut)
Los llamados ROP son la unidad de función fija que se sitúan en la etapa final del pipeline gráfico. Su trabajo es procesar los datos de los píxeles ya terminados y copiándolos desde el bus de la caché de datos de cada núcleo de la GPU hacia el búfer de imagen. En la actualidad, los ROP trabajan a nivel de tile (bloques pequeños de píxeles) y copian la información procesada en la caché L2 de la GPU en vez de hacerlo directamente en el búfer de imagen situado en la memoria de vídeo externa a la GPU. Esto elimina el tener que acceder a la VRAM de forma continua, recortando el coste energético de cada operación.
Además, los ROP son la evolución de las unidades ya que no solo manejan la transferencia de datos, sino que también realizan operaciones lógicas y matemáticas. Por lo que se encargan de tareas como mezcla de componentes (blending), pruebas de profundidad (z-buffer), y operaciones de máscara (stencil). Independientemente de la capacidad de cálculo del sistema, los ROP marcan la tasa de píxeles que se procesan en el búfer de imagen y esta dependerá siempre de que el ancho de banda de la memoria sea lo suficientemente alto. De ahí el uso del llamado Tile Caching para realizar dichos cálculos en una memoria interna, la cual no solo tiene menor latencia, sino también mayor ancho de banda.
Otro tipo de unidades de función fija
Se trata de la salsa secreta de muchas arquitecturas gráficas, y es que si bien a día de hoy cualquier efecto gráfico se puede hacer total o parcialmente desde los núcleos de la GPU en forma de programas shader, la realidad es que a día de hoy muchos se aplican a la antigua usanza, utilizando una unidad de función fija para ello. Aunque su relevancia era mayor en las GPUs más antiguas, aún están presentes en forma de unidades altamente optimizadas que se encargan de operaciones repetitivas o predefinidas para mejorar la eficiencia. No obstante, no suelen representarse en los diagramas de arquitectura de la GPU, por lo que son desconocidas para la mayoría del público.
No obstante, a día de hoy no se encargan de ejecutar efectos especiales concretos, sino partes en común que tienen varios de estos, por ejemplo se pueden encargar de realizar transformaciones geométricas básicas como el cálculo del viewport o del clipping, dos procesos que se dan en la etapa geométrica del pipeline siempre de forma reiterativa. También tenemos unidades que interpolan el valor de los vértices como (como colores, coordenadas de textura, o normales) durante la conversión a fragmentos.