Con la presentación de sus RTX 40 desde NVIDIA también han hecho lo mismo con DLSS 3, la tercera versión de su algoritmo de aumento de resolución automático vía Deep Learning. Esta vez han aplicado sus conocimientos en otros campos vía pensamiento lateral para la mejor. ¿Qué secretos esconde y que juegos son compatibles y cómo funcionan las dos versiones anteriores del algoritmo?
A la hora de generar imágenes en movimiento es mucho mejor predecir como sería una buena cantidad de píxeles en la escena que no generarlos de la nada. Y esto es por el hecho que el coste de crearlos desde cero es mucho más alto que predecirlos. Algoritmos como el Deep Learning Super Sampling se basan en ello, en predecir información a través de otra ya existente. Todo ello basándose en la capacidad de aprender patrones visuales. ¿El resultado? Para nosotros, un aumento en la tasa de frames de los juegos a ciertas resoluciones sin tener que necesitar toda la potencia bruta.
El DLSS en las RTX depende de los Tensor Cores
Lo primero que tenemos que tener en cuenta es como los diferentes algoritmos, llamados comúnmente DLSS, aprovechan el hardware de la tarjeta gráfica y nada mejor que hacer un análisis del funcionamiento de la GPU mientras está renderizando un fotograma con el DLSS activo y sin este. Las dos capturas de pantalla que tenéis abajo de estas líneas corresponden al uso de la herramienta NVIDIA NSight, la cual mide el uso de cada una de las partes de la GPU a través del tiempo. Para interpretar las gráficas hemos de tener en cuenta que el eje vertical corresponde al nivel de uso de esa parte de la GPU y el eje horizontal el tiempo en el que se renderiza el fotograma.
Como se puede ver, la diferencia entre ambas capturas de pantalla del NSight es que en una de ellas se puede ver el nivel de uso de cada parte de la GPU al utilizar el DLSS y en la otra no. ¿Cuál es la diferencia? Si no fijamos bien veremos que en la correspondiente al uso del DLSS la gráfica correspondiente a los Tensor Cores esta plana excepto al final de la gráfica, que es cuando estas unidades se activan. El DLSS no es otra cosa que un algoritmo de superresolución, que toma una imagen a una resolución de entrada determinada y saca en el proceso una versión de la misma imagen a más resolución. Es por eso que los Tensor Cores al aplicarlo se activan al final, ya que requieren que la GPU renderice la imagen primero.
¿Cómo funciona el DLSS?
En las dos primeras versiones del algoritmo, el DLSS puede tomar hasta 3 milisegundos adicionales del tiempo de creación de un fotograma. En el caso del DLSS 3 lo desconocemos, pero suponemos que es menor por la mayor potencia de las RTX 40. En todo caso el DLSS necesita la información del fotograma recién generado, por lo que si queremos que el juego funciona a una tasa de frames concreta deberemos calcular el tiempo de fotograma, por ejemplo 16. 67 ms si queremos 60 FPS, y a eso restarle el tiempo que tarda la tarjeta gráfica en aplicarlo.
Suponed que tenemos una escena que queremos renderizar a 4K. Para ello tenemos una GeForce RTX indeterminada que a dicha resolución alcanza los 25 fotogramas por segundo, por lo que renderiza cada uno de estos a 40 ms, sabemos que la misma GPU puede alcanzar a 1080p una tasa de fotogramas de 5o, 20 ms. Nuestra hipotética GeForce RTX tarda unos 2.5 ms en escalar de los 1080p a los 4K, por lo que si activamos el DLSS para obtener una imagen 4K a partir de una a 1080p entonces cada fotograma con DLSS tardará 22.5 ms. Con ello hemos obtenido renderizar la escena a 44 fotogramas por segundo, lo cual es mayor que los 25 fotogramas que se obtendrían renderizando a resolución nativa.
¿Qué ocurre si la tarjeta gráfica no tiene suficiente potencia?
Cada modelo de las NVIDIA RTX tiene su velocidad a la hora de aplicar una de las variantes del DLSS dependiendo de cuál sea la resolución origen y cual la de destino. La tabla que véis abajo la hemos sacado de la documentación de la propia NVIDIA, en ella el aumento de resolución en número de píxeles en pantalla es de 4 veces más. Por lo que corresponde al llamado Performance Mode.
Como se puede ver en la tabla el rendimiento no solo varía según la GPU, sino también si tenemos en cuenta la GPU que estamos utilizando. Lo cual no debería sorprender a nadie después de lo que hemos explicado con anterioridad. El hecho que en el Performance Mode una RTX 3090 acabe consiguiendo escalar de 1080p a 4K en menos de 1 ms es cuanto menos impresionante, no obstante, esto significa que el DLSS funciona mejor cuanto más potente es la tarjeta gráfica.
El DLSS no es una reconstrucción, sino una predicción
Esto es importante tenerlo en cuenta, el motivo por el cual es un algoritmo que requiere entrenamiento y por tanto ensayo y error es por el hecho que, pese a que los fotogramas se generan de forma muy rápida, no lo hace lo suficientemente rápido como para saltarse ciertos errores. Y si bien se puede entrenar el algoritmo para que no saque píxeles erróneos a partir de la predicción, la falta de información es fatídica. Por ejemplo, cuanta menos resolución tenga la imagen de origen menos calidad tendrá la imagen final obtenida.
El otro punto tiene que ver con la geometría de la escena. Todas las GPU se han diseñado para que el tamaño más pequeño que puede tener un objeto sea de 2×2 píxeles como mucho. ¿Las consecuencias sobre el DLSS? Cualquier objeto menor de ese tamaño es descartado y hemos de tener en cuenta que con la distancia los objetos son cada vez más pequeños. Esto significa, por ejemplo, que una imagen a 4K generada de forma nativa y no con el DLSS tendrá detalles adicionales.
DLSS 1.0 vs DLSS 2.0, ¿en qué se diferencian?
Cada versión del DLSS toma como base a la anterior, por lo que el DLSS 3 es una evolución del DLSS 2 y este último de la versión original. El primer DLSS no soportaba temporalidad en el sentido de que no usaba vectores de movimiento para la reconstrucción de las imágenes. Lo que hacía era usar información de un solo fotograma, de ahí a que su calidad de imagen fuese mucho peor. En realidad, el DLSS de NVIDIA supuso un factor diferencial respecto a la competencia a partir de la segunda versión.
¿Qué es Optical Flow y por qué es importante para DLSS 2 y 3?
Para entender cómo funciona el DLSS 3, antes de nada, hemos de saber a lo que NVIDIA se refiere con Optical Flow. Y se trata de algo que se lleva usando desde las RTX 20. Aunque no se trata de un elemento de hardware, sino que son una serie de librerías de software que se definen de la siguiente manera:
El SDK de NVIDIA Optical Flow expone las últimas capacidades de hardware de las arquitecturas Turing, Ampere y Ada dedicada a la computación del movimiento de los píxeles entre imágenes. El hardware usa sofisticados algoritmos para crear vectores de alta calidad, los cuales son variaciones de fotograma a fotograma y permiten seguir el movimiento de los objetos.
A esto se la llama interpolación de fotogramas y la marca de verde lo ha estado usando en varias aplicaciones. Consiste en que en cada objeto de la imagen o a cada píxel, dependiendo del nivel de precisión se le asigna una identificación creando lo que llamamos un ID Buffer. Esto además le permitirá saber dónde se encuentra cada objeto en cada fotograma y poder predecir su movimiento.
Lo que hace el generar los datos en forma de una cadena de matrices o tensores. Un formato de datos optimizado para ser procesado en los Tensor Cores de las GPU de NVIDIA. Donde cada valor corresponde a un píxel de la imagen y cada matriz a un fotograma o a un subcomponente de color del mismo. Este tipo de estructuras de datos son usadas en IA y debido a su naturaleza requieren de unidades especializadas para ejecutarse.
¿Cuáles son sus aplicaciones?
¿La primera utilidad? La más clara es la creación de fotogramas interpolados, los cuales son fotogramas intermedios que se sitúan entre dos ya existentes.
Aunque la más famosa, comercialmente hablando, es la creación de vectores de movimiento que se pueden usar para algoritmos como Temporal AntiAliasing, el DLSS 2 y 3, el FSR 2.0. Dado que para reconstruir la imagen usan la información de fotogramas anteriores para una mayor precisión.
El Optical Flow Accelerator
Los algoritmos de interpolación de fotogramas y la creación de vectores de movimiento se pueden hacer a través de algoritmos que se ejecutan en la propia GPU. Sin embargo, NVIDIA después de años de conocimiento en la conducción automática y en especial en la visión por computador ha podido aplicar dichos conocimientos de cara a los juegos.
Entendemos como visión por computador a la capacidad de identificar y delimitar objetos de una imagen. Es decir, no es sobre la generación de objetos. Pues bien, el Optical Flow Accelerator es una pieza de hardware dentro de las RTX 40 que lo que hace es de forma automática observar los objetos en pantalla, identificarlos y calcular los vectores de movimiento a partir de varios fotogramas anteriores y calcular la trayectoria.
Esto significa que en el DLSS 3 donde es usado se ha eliminado por completo la parte del código relativo a la temporalidad. Se trata además de una treta de NVIDIA para evitar que algoritmos de la competencia, como el FSR 2.0 de AMD, sigan usando para su beneficio las librerías del DLSS 2.0. A cambio tiene una contrapartida y es que los juegos que lo usen solo se podrán ejecutar en las RTX 40 de NVIDIA con arquitectura Ada.
Búfer de visibilidad
Se trata de uno de los elementos clave en las últimas versiones de Unity y Unreal Engine, los dos motores más usados para la creación de videojuegos y es lo que relaciona al DLSS 3 con el Ray Tracing, dos elementos que la propia NVIDIA ha relacionado entre sí. Pues bien, lo que hace el Optical Flow Accelerator es generarlo de forma automática sin participación alguna de ningún elemento externo.
Interpolación de fotogramas en juegos
En una película, debido a que todos sus fotogramas y existen y se encuentra grabada es fácil realizar una interpolación de fotogramas. En un videojuego cada uno de ellos es inédito y se necesita una gran potencia de cálculo para realizar todo el proceso de identificación lo suficientemente rápido como para ser útil a tiempo real y no afectar a la jugabilidad.
Sin embargo, ocurre que entre que la GPU genera en la VRAM de la tarjeta gráfica y este se envía a nuestra pantalla habitualmente hay un retraso. ¿Qué acaba ocurriendo? Pues que muchas veces no se ha enviado a pantalla el primer frame y la GPU ha conseguido realizar el segundo y esto ocurre mucho en juegos que funcionan a una alta frecuencia, es decir, han de resolver un frame en pocos milisegundos.
Si la sucesión de imágenes es muy rápida nuestro cerebro no se fija en los detalles, por lo que podemos generar una serie de fotogramas fantasma intermedios. Y esto lo ha aprovechado bien NVIDIA con el DLSS 3, donde gracias a esta capacidad pueden generar nuevos frames. Eso sí, el motor de juego que es la velocidad en el que la CPU genera la lista de pantalla para cada fotograma no va a la velocidad que se generan, ya que muchos de ellos se han generado de forma automática a través de la interpolación.
¿Qué juegos soportan DLSS 3?
Por el momento son 35 los títulos, aunque dos de ellos pertenecen no a juegos sino a motores gráficos como Unity y Unreal Engine. Por el momento, la lista de juegos compatibles es la siguiente:
- A Plague Tale: Requiem
- Atomic Heart
- Black Myth: Wukong
- Bright Memory: Infinite
- Chernobylite
- Conqueror’s Blade
- Cyberpunk 2077
- Dakar Rally
- Deliver Us Mars
- Destroy All Humans! 2 – Reprobed
- Dying Light 2 Stay Human
- F1 22
- I.S.T.: Forged In Shadow Torch
- Frostbite Engine
- Hitman 3
- Hogwarts Legacy
- Icarus
- Jurassic World Evolution 2
- Justice
- Loopmancer
- Marauders
- Microsoft Flight Simulator
- Midnight Ghost Hunt
- Mount & Blade II: Bannerlord
- Naraka: Bladepoint
- NVIDIA Omniverse
- NVIDIA Racer RTX
- Perish
- Portal with RTX
- Ripout
- S.T.A.L.K.E.R. 2: Heart of Chornobyl
- Scathe
- Sword and Fairy 7
- Synced
- The Lord of the Rings: Gollum
- The Witcher 3: Wild Hunt
- Throne and Liberty
- Tower of Fantasy
- Unity
- Unreal Engine 4 & 5
- Warhammer 40,000: Darktide
Iremos añadiendo títulos a la lista de juegos compatibles con DLSS 3 a medida que se vayan anunciando tanto por parte de sus desarrolladores como de la propia NVIDIA.