Así es el Opacity Micromap Engine, el secreto de NVIDIA para ganar más FPS
El Opacity Micromap Engine puede parecer una simple anécdota, casi a pie de página en las RTX 40 de NVIDIA, la clásica novedad tecnológica con nombre rimbombante para vender una característica menor como si fuese la octava maravilla del mundo. Sin embargo, dicha unidad es importante de cara a un futuro donde el Ray Tracing pasará a ser el algoritmo estándar para generar las imágenes en pantalla de nuestros juegos. Pero, ¿qué es y para qué sirve esta unidad?
No existe un equivalente al Opacity Micromap Engine en las GPU de la competencia a NVIDIA, es decir, las de AMD e Intel. Sin embargo, para entender la existencia de dicha unidad, primero hemos de saber el motivo por el cual fue creada. Es decir, el problema que pretende solucionar. El cual, si bien es uno puntual, es general en muchos juegos y solventarlo supone un aumento importante en la tasa de fotogramas por segundo en una gran cantidad de escenas.
Las GPU actuales no están pensadas para los micropolígonos
Las unidades de rasterizado actuales tienen ciertas limitaciones a la hora de rasterizar triángulos de un espacio en 3D basado en vértices a un espacio 2D cartesiano descrito por píxeles. Si estos son demasiado pequeños, el nivel de eficiencia, el cual se suele medir en una tasa de triángulos por segundo, baja en picado.
Claro está, que muchos os preguntaréis, ¿qué significa todo esto? Pues digamos que el Ray Tracing pasa a ser el método más rápido para generar una imagen cuando se pasa cierto umbral de primitivas o polígonos por segundo. ¿La única forma de hacerlo? Con polígonos muy pequeños, lo cual no es nada eficiente con una unidad de rasterizado convencional.
El motivo de ello es sencillo, una vez un polígono se ha convertido en un bloque de píxeles o fragmentos, este se divide en bloques de 2x2 píxeles para enviarse a las diferentes Compute Units o Streams Multiprocessors de la GPU. ¿El ideal? Que todas las unidades se encuentren ocupadas trabajando, y esto con el uso de micropolígonos no se puede hacer. Todo ello obliga a buscar una solución al problema y se puede decir que NVIDIA ya la ha implementado en sus RTX 40.
La solución de NVIDIA
¿Cómo lo hacemos entonces para generar geometría lo suficientemente pequeña y que la unidad de rasterizado no tenga un problema con ello? Pues la idea de NVIDIA es usar dos unidades que han integrado en cada uno de los RT Cores a partir de las RTX 40 bautizadas como Displaced Micro Mesh Engine y, por otro lado, Opacity Micromap Engine.
- La primera de ella genera micropolígonos de pequeño tamaño usando mapas de desplazamiento. Es decir, a través de texturas cuyos valores indican cómo se han de generar las diferentes primitivas. Se trata de una técnica de subdivisión de vértices y, por tanto, se puede decir que son unidades de teselación, pero mucho más avanzadas.
- Dicha unidad debería reemplazar con el tiempo al Polymorph Engine, la vieja unidad de teselado, aún presente por temas de compatibilidad hacia atrás con las API gráficas anteriores.
- La segunda, en cambio, tiene que ver con el hecho de representar el viaje de la luz en el espacio y, en concreto, en objetos translúcidos. Es decir, que dejan pasar la luz a través de ellos. Será en esta en la que nos centraremos en este artículo a partir de este punto, porque Micro-Mesh Engine necesita otro artículo para ella sola, lo cual haremos más adelante.
El problema de las transparencias y la vegetación
Una forma de aumentar la eficiencia en las GPU de las últimas generaciones ha sido el Tile Caching, este se basa en ordenar la geometría de la escena según su posición en pantalla en tiles o baldosas. Esto es útil para varios efectos visuales, pero especialmente para realizar lo que llamamos la eliminación de las superficies ocultas, lo cual ocurre cuando un objeto más grande tapa la visión de otro más pequeño.
¿El problema? El testeo se suele hacer justo antes del texturizado y, por tanto, esto da problemas cuando el objeto que se encuentra más cercano a la cámara deja pasar la luz, es decir, es translúcido y permite ver lo que hay detrás del mismo. El otro ejemplo es la vegetación, porque para representar como la luz pasa a través de esta, y debido a la limitación de no poder usar micropolígonos para modelar, se suelen usar texturas con transparencia total en ciertos píxeles de la misma.
Sin embargo, esto es un problema de cara a calcular las intersecciones en el Ray Tracing. Es decir, comprobar si de la cámara, o un objeto, sale un rayo hacia ese píxel en concreto, y si existe, o no, un objeto. El método actual resulta un recorte enorme de potencia al tener que comprobar píxel por píxel, dado que el testeo con el BVH no se hace a nivel de píxel, sino de primitiva geométrica.
Para qué sirve el Opacity Micromap Engine
Pues bien, después de esta larga explicación, dónde hemos expuesto el problema, toca hablar del Opacity Micromap Engine. El trabajo de dicha unidad es bastante explícito ya por su nombre, dado que se encarga de generar mapas en forma de texturas que contienen la información de qué partes del polígono tendrán transparencia total o parcial y, por tanto, no se verán.
¿Y qué utilidad tiene esto? Hemos de partir del hecho de que NVIDIA no solo ha añadido esta unidad en los RT Cores de las RTX 40, sino que viene acompañada del Displaced Micromesh Engine que lo hace es generar micropolígonos a partir de un mapa de desplazamiento. Pues bien, el Opacity Micromap Engine permite que esa geometría que se genere no se haga en las partes del objeto que dejarían pasar la luz.
De esta manera, en vez de tener que depender de un testeo de transparencias durante la etapa de texturizado, lo que tenemos es una geometría compleja como resultado, qué por otro lado permite usar las técnicas de aceleración del Ray Tracing en algo tan común como es la vegetación u objetos en pantalla que utilicen la misma técnica.
Sin embargo, no es una técnica que funcione para solucionar el problema de los objetos para ver a través, como por ejemplo un cristal. Pero no deja de ser una solución elegante y un paso más al uso del micropoligonaje en los gráficos de los juegos. Lo cual va a suponer cambios en forma del uso de unidades especializadas como las que os estamos hablando.
El Opacity Micromap Engine, ¿solo para la vegetación?
Pues no, el Opacity Micromap Engine tiene otras utilidades claras, en concreto algunas que tienen que ver con la eliminación de geometría no visible en el fotograma de forma más eficiente, que de forma general, se suelen eliminar. En concreto, nos referimos a aquellos polígonos que se encuentran opacados por otros, lo que es la clásica eliminación de superficies ocultas.
Con los mapas de opacidad podemos saber perfectamente si el objeto que se encuentra detrás de otro más grande es visible, lo que nos permite no descartarlo. Es decir, nos permite usar la eliminación de superficies no visibles sin que esta borre de la lista de pantalla objetos que sí que son visibles, aunque sea solo parcialmente. Por tanto y para concluir, es un paso interesante de NVIDIA hacia delante que se verá más especializado en el futuro con nuevas generaciones, que unido al Path Tracing, nos dará gráficos de nunca vistos hasta ahora.