¿Por qué el Micro-Mesh Engine es clave en el futuro de las GPU de NVIDIA?
Una de las tecnologías incluidas en las NVIDIA RTX 40 es el llamado NVIDIA Micro-Mesh Engine, una serie de unidades que más que estar pensadas para los videojuegos actuales son una antesala a lo que veremos en el futuro. ¿Qué son, cómo funcionan y que ventajas y desventajas tienen? Pues si quieres saberlo, entonces sigue leyendo, ya que es muy probable que con el tiempo sea adoptada por la competencia.
Por el momento la tecnología de la que vamos a hablar en este artículo solo se está aplicando a los “remakes” de juegos previamente existentes creados con NVIDIA Remix, siendo Portal RTX el ejemplo más claro de todos. Se puede decir, sin miedo a equivocarnos, que se trata de una tecnología por el momento experimental. Por lo que tardaremos años en verla aplicada a juegos comerciales.
¿Qué es el NVIDIA Micro-Mesh Engine?
El NVIDIA Micro-Mesh Engine es una unidad incluida en las NVIDIA RTX 40 en cada uno de sus núcleos SM. Esta forma parte del RT Core junto al Opacity Micromap Engines. Su función tiene relación con la generación de escenas con una alta densidad geométrica, lo que se llama también renderizado con micropolígonos. Donde por definición la cantidad de geometría en escena, número de polígonos, es superior a la cantidad de píxeles en pantalla.
Sin embargo, en las GPU actuales existen una serie de limitaciones que han forzado, por un lado, la creación del Micro-Mesh Engine por parte de NVIDIA. Al mismo tiempo que es necesaria una unidad así con vistas al futuro de los gráficos en 3D a tiempo real. Lo cual es necesario visto el estancamiento visual que tienen muchos juegos, producto de que la evolución tradicional de los chips gráficos ha llegado a su límite.
Se ha de entender su funcionalidad como una extensión a los Mesh Shaders, realmente se puede decir que son la unidad de teselación para la nueva forma de generar la geometría en escena.
Para NVIDIA, el Ray Tracing es el futuro de los gráficos en los videojuegos
Hemos de partir del hecho que el trazado de rayos no es una invención moderna, hace años que existe y es la única manera que tenemos de poder generar escenas donde la iluminación indirecta es correcta. Dado que no es posible generar gráficos a tiempo real que tengan sombras generadas por objetos, reflejos, oclusión ambiental y todo tipo de efectos que son generados por el impacto de la luz sobre ellos de forma realista. No obstante, este no es el único motivo por el cual el Ray Tracing es el futuro de los gráficos.
La realidad es que el impacto computacional de la geometría en escena, crece de forma lineal con el algoritmo de rasterizado clásico, pero, en cambio, con el Ray Tracing no, ya que lo hace de forma logarítmica, esto se traduce en que se llega al punto donde por número de polígonos es mucho más eficiente el trazado de rayos y no el algoritmo clásico.
Dicho de otra forma, a partir de cierto nivel de detalle, definido por la cantidad de polígonos en escena, la forma tradicional de generar imágenes en 3D a tiempo real deja de ser la más eficiente. Por desgracia, una GPU que se haya diseñado para el trazado de rayos en exclusiva no podría ejecutar los videojuegos actuales, es por ello que tecnologías como el NVIDIA Micro-Mesh Engine existen, para permitir a las GPU mover una cantidad de píxeles y vértices equivalente.
Sin embargo, las GPU están limitadas
En la actualidad todas las GPU tienen una limitación clara y no es otro que el número de polígonos en la escena. Los motivos de ello son dos:
- Las unidades de rasterizado, las cuales realizan la conversión de vértices a píxeles de todos los polígonos de la escena. Estas unidades tienen una ratio fija de conversión y un tamaño ideal para los polígonos. Por lo que si estos son demasiado pequeños se ha de terminar tirando de un shader de computación, además si el número es demasiado grande, las unidades de rasterizado no tienen la potencia suficiente para poder realizar la conversión a la suficiente velocidad.
- Un polígono no puede tener un tamaño menor a 2 x 2 píxeles, ya que es como operan con ellos la unidad de texturas para efectuar el filtrado de las mismas. Por lo que es imposible llegar a la alta densidad requerida para que el Ray Tracing sea más eficiente que la rasterización como algoritmo principal.
Ambas limitaciones impiden la creación de escenas generadas por polígonos de tamaño muy pequeño o micropolígonos, es aquí donde entra el NVIDIA Micro-Mesh Engine, el cual a su vez no deja de ser una extensión a los Mesh Shaders, pero pensada para generar densidades de geometría muy altas, pero manteniendo la arquitectura clásica de las GPU.
Demasiada geometría puede ser un problema
Los Mesh Shaders permiten la eliminación de geometría de muy bajo tamaño, sin embargo, no están diseñados para ser eficientes con micropolígonos, ya que fueron creados pensando en el entorno actual donde el tamaño de cada polígono se ve limitado por las unidades de texturas y rasterizado. Por otro lado, generar una escena con una gran cantidad de polígonos puede hacer que el descarte de lo no visible se termine eternizando.
Por lo que la solución parte en generar el nivel de detalle no desde el principio, sino a mitad de la escena. Lo que comúnmente se realizaba con la teselación, pero orientado esta vez a los Mesh Shaders. Por otro lado, un exceso de geometría puede llegar a saturar por completo la GPU y sus recursos, no olvidemos que el aumentar la cantidad de geometría de forma masiva supone una necesidad mayor de núcleos y unidades de cálculo para procesarla.
El otro problema es el árbol BVH, la cual es la estructura de datos que almacena la posición de la geometría en escena y que es clave para acelerar el Ray Tracing. Si la escena está compuesta por demasiados polígonos, entonces la construcción primero y recorrido de la misma se puede eternizar.
Si bien el recorrido del mismo también es logarítmico y se llega a un punto donde agregar más geometría no supone un sobrecoste, es la construcción que es lineal lo que es el problema principal y más a día de hoy, ya que en PC no disponemos de ningún modelo de GPU que tenga dicha capacidad integrada.
¿Qué es realmente un Micro-Mesh?
Ahora que ya hemos entendido los diferentes motivos para la existencia del Micro-Mesh Engine, nos toca hablar de lo que es realmente un Micro-Mesh. Y no, no tiene que ver con el tamaño en píxeles que estos ocupan una vez se han rasterizado, sino con un proceso de subdivisión de vértices junto al uso de mapa de desplazamiento para generar nueva geometría a partir de una malla poligonal base. La teselación consiste en subdividir las primitivas ya existentes, mientras que los mapas de desplazamiento consisten en crear de nueva a partir de la información de una textura. T
Todo ello se hace sin modificar la estructura base del objeto. Todo ello es algo que se podía hacer ya con anterioridad a los Mesh Shaders, es más, dichos conceptos datan de la mitad de la década de los 2000, pero con la diferencia que en el caso que nos ocupa hablamos de geometría a un nivel de precisión de micropolígonos.
Nivel de detalle en los videojuegos con NVIDIA Micro-Mesh Engine
Cualquier persona que sea grafista 3D en la industria de los videojuegos os comentará que de cada objeto terminan modelando diferentes versiones del mismo, con más o menos nivel de detalle o LOD para representar la naturaleza del objeto según la distancia de la cámara.
El uso de los Mesh Shaders permite la creación dinámica de versiones con menos complejidad geométrica de un objeto, pero requiere ciertos conocimientos de programación para realizarlo. El NVIDIA Micro-Mesh Engine permite hacerlo de forma automática sin problemas en los juegos, ahorrando tiempo a los desarrolladores creando diversos modelados por objeto en los juegos.
Sin embargo, esta no es la única ventaja de la tecnología en lo que a nivel de detalle se refiere, sino también el hecho que esto supone una reducción en el impacto sobre la memoria. Con el sistema convencional la GPU ha de buscar en memoria el modelado correspondiente a los niveles de detalle más pequeños, con el NVIDIA Micro-Mesh Engine puede generar, a partir de un objeto con poca geometría, uno muy complejo y a todo detalle para los primeros planos de cámara, para luego generar las diferentes versiones.
Todo ello sin necesidad de almacenarlos, dado que se generan al vuelo y de forma totalmente procedural y suponiendo ello un ahorro importante, no solo en memoria, sino también en tiempo para los grafistas a la hora de hacer su trabajo.
El único hándicap de esta tecnología es que no se ha estandarizado su uso en ninguna API gráfica, por lo que es altamente opcional y al contrario de los Mesh Shaders, no se encuentra en el estándar. No obstante, no deja de ser interesante de cara a un futuro, donde el salto visual en los juegos se empieza a notar, en especial por la vida demasiado alargada que ha tenido la última generación de las GTX de NVIDIA.