Si bien las tarjetas gráficas de NVIDIA han tomado el sufijo RTX en honor al Ray Tracing, la realidad es que ha sido el DLSS el caballo de batalla de la compañía de Jensen Huang.
Es por ello que os hemos preparado un extenso artículo para explicaros
su funcionamiento y evolución a través de sus diferentes versiones,
desde la versión 1.0 hasta la última de todas, la 3.5.
Todo lo que hace una IA se ha convertido en un ente
mágico, casi divino. Esto provoca que cualquier cosa que haya sido
creada utilizando una red neural, sea del tipo que sea, no se entienda
bien y aparezcan ciertos mitos. Es por ello que en vez de limitarnos a
escribir sobre el DLSS hemos decidido ir más allá y
hemos decidido hacer un artículo donde una vez lo hayáis leído no os
parecerá algo sobrenatural o difícil de entender.
¿Qué es el DLSS?
Dentro del DLSS existen una serie de algoritmos basados en Deep Learning
que principalmente permiten obtener una versión de una imagen a mayor
resolución. La clave es generar el fotograma a una resolución menor,
para luego aplicar dicho algoritmo y obtener una versión del mismo frame
con mayor cantidad de píxeles de manera muy rápida. ¿El objetivo? Tener
imágenes a alta resolución en un tiempo menor que generando la imagen a
la misma resolución de salida. Todo ello supone un ahorro en ancho de
banda y potencia de cálculo, y permite que los juegos que estamos
reproduciendo se ejecuten a una mayor tasa de frames por segundo. Sin
embargo, hemos de partir del hecho que NVIDIA, cuyo mercado principal es la IA, ha centrado el diseño de este algoritmo a dicha disciplina.
Pero, ¿por qué existe el DLSS?
Independientemente del videojuego en 3D que estemos jugando en cada
momento, y que esté reproduciendo nuestra tarjeta gráfica, todos ellos
siguen un proceso para generar cada uno de los fotogramas que ves en
pantalla sucediendo a gran velocidad delante de tus ojos. La parte más
costosa en cuanto a computación, es decir, que requiere más potencia de
tu GPU, es el periodo en que ha de calcular el valor de color de los
píxeles en pantalla, dado que los ha de procesar uno por uno.
Por ejemplo, no es lo mismo renderizar una escena en Full HD (1.920 x
1.080 píxeles) que hacerlo en 4K (3.840 x 2.160 píxeles), ya que vamos a
necesitar:
- 4 veces más potencia de cálculo en total en 4K que en Full HD.
- Un aumento en el mismo grado del ancho de banda.
- Una cantidad de memoria también 4 veces más grande para almacenar ciertos mapas de texturas y búferes de imagen
La existencia del DLSS, por tanto, no se ve motivada por una falta de potencia de las GPU, sino por la existencia de un cuello de botella
en lo que a la velocidad de la memoria se refiere. Y es que a día de
hoy, todos los modelos existentes se ven limitados en dicho aspecto, lo
que fuerza a buscar alternativas, en este caso el llamado aprendizaje
profundo, con tal de conseguir ese rendimiento provocado por el cuello
de botella que es la VRAM a día de hoy.
Convolutional Autoencoders
Para entender lo que es el DLSS hemos de partir de un concepto del mundo de la inteligencia artificial que son los Convolutional Autoencoders.
Estos son una herramienta muy utilizada en el mundo de la inteligencia
artificial, pero especialmente en una disciplina llamada visión por
computador, y es que tal y como veremos después, el DLSS realiza la
reconstrucción de la imagen a partir de la observación.
¿Y cómo funcionan un Convolutional Autoencoder?, vamos a usar un ejemplo que no tiene nada que con el DLSS de NVIDIA,
excepto en una cosa, la toma de una imagen. Cuando tú haces una foto
con tu teléfono móvil, lo que hace el dispositivo no es almacenar la
información tal como la ha capturado, sino que genera una versión que ocupa menos espacio
en un formato de archivo concreto que luego podrás visualizar desde el
terminal. El caso es que esa misma imagen, cuando tú la veas a tus ojos,
la vas a ver totalmente igual que cuando la tomaste.
Pues bien, el DLSS funciona igual, pero usa el Convolutional Autoencoder
para hacer que la imagen se vea mejor, es decir, tenga más píxeles o
más resolución, pero sin destruir la calidad de la misma. Sin embargo,
hemos de aclarar que desconocemos como es dicho algoritmo, ya que es
totalmente propietario y NVIDIA nunca ha liberado el código. Es más, por
no saber, no sabemos si es el mismo en cada versión e incluso en cada
título con soporte para el mismo que ha salido en el mercado.
¿Cómo funciona el DLSS?
Una vez hemos entendido lo que es el DLSS y que este no deja de ser un algoritmo del tipo CAE, entonces solo nos toca explicar el proceso:
- Codificación: el CAE/DLSS toma el
último fotograma generado y que se encuentra almacenado en la memoria de
vídeo para codificarlo en una versión comprimida con la que poder
trabajar más fácilmente.
- Compresión de características: gracias a las capacidades de visión por computador, el DLSS
toma las características más importantes de cada frame para poder hacer
una reconstrucción. Pensad en ello a cómo un pintor o ilustrador decide
plasmar una escena en un lienzo o papel. El trabajo del CAE en este
caso es no solo aprender el proceso, sino también a detectar los errores
visuales del mismo y corregirlos.
- Decodificación: una vez el DLSS ha
observado y aprendido de la imagen y sus características, decide hacer
una versión de la imagen con más píxeles, empleando para ello la
información obtenida en la etapa anterior.
Eso sí, hemos de partir del hecho que el CAE para el DLSS
depende del volumen de datos que tenga, cuanta más información mejor,
por lo que no es recomendable renderizar un frame a muy baja resolución
de forma interna, ya que la carencia informativa puede terminar por
generar una imagen de muy mala calidad
Tensor Cores
Uno de los motivos por los cuales DLSS solo se puede ejecutar en las tarjetas RTX de NVIDIA, y no modelos anteriores, es por la inclusión de los Tensor Cores. Y si bien en general los CAE
no están diseñados en exclusiva para ejecutarse en este tipo de
unidades de cálculo, hay una serie de operaciones con matrices en todo
el proceso que pueden verse aceleradas 10 o 100 veces más rápido con
estas unidades. Es decir, los Tensor Cores aceleran operaciones con matrices como las multiplicaciones entre estas, las cuales son una pieza fundamental en un CAE.
No solo eso, sino que aceleran otras partes del proceso como la
retropropagación y permiten procesar una mayor cantidad de información
de un golpe.
Pero, especialmente, está el hecho que tienen una gran potencia de
cálculo, y es importante por un motivo. En un videojuego, cada frame se
ha de generar desde cero, al DLSS se le deja un espacio
de entre 1 y 3 ms para realizar todo su proceso de aumento de
resolución de la imagen. No obstante, con las diferentes versiones que
han ido apareciendo hasta ahora se han ido añadiendo mejoras, pero todas
ellas basadas en el uso de Convolutional Autoencoders funcionando en Tensor Cores o unidades más especializadas para tareas concretas, pero que toman el funcionamiento de un CAE.
DLSS 2.0
El despegue en popularidad del DLSS se dio con su versión 2.0,
el cual añadió el empleo de la información de frames anteriores para
tener un set de datos más completo. Lo que hace esta versión respecto a
la original es cambiar el algoritmo para añadir lo que son los vectores de movimiento
para conocer la posición de cada objeto en cada frame. Esto le permite
complementar la información visual necesaria durante el proceso de
compresión de características y mejorar la calidad visual respecto al DLSS.
Sin embargo, esto tiene un problema, el hecho de que al completar la
información con el frame anterior, esto entra en contraposición con el
cálculo de la iluminación que es diferente en cada frame por la distinta
posición de la cámara, especialmente con el Ray Tracing, de ahí las mejoras añadidas en el DLSS 3.5 en este sentido, las cuales existen para solucionar las limitaciones con la versión 2.0 del algoritmo.
En la actualidad, es la versión más ampliamente disponible en los juegos. El motivo no es otro que su versión mejorada, el DLSS 3.0, solo funciona en las gráficas de la serie RTX 40. Por otro lado, cualquier GPU RTX es compatible con todos los beneficios que trae el DLSS 2.0.
DLSS 3.0
La tercera versión del DLSS de NVIDIA se presentó junto a las RTX 40. La principal característica integrada fue la generación de frames adicionales
de forma automática. El truco consiste en utilizar la posición de los
objetos en los diferentes frames como referencia para poder predecir la
posición de fotogramas adicionales que ocurran entre medio de dos ya
existentes, interpolación, o se generen como un fotograma nuevo, extrapolación. Para ello no solo se basan en los vectores de movimiento introducidos en el DLSS 2.0,
sino que hacen uso de una nueva pieza de hardware que facilita la
implementación de los mismos y acelera la ejecución del algoritmo.
La clave en el DLSS 3 son los llamados Optical Flow Accelerator, una pieza de hardware que se encuentra en las RTX 40 y que libera a las unidades SIMD/CUDA y a los Tensor Cores
de tener que realizar el proceso de cálculo de los vectores de
movimiento, lo que deja libre su capacidad de procesamiento para otras
tareas. Claro está, que el hecho de utilizar esta unidad, exclusiva de
los RTX 40, hace que la generación de fotogramas solo se pueda usar en dicha generación de tarjetas gráficas.
Input Lag
Uno de los temas más polémicos relacionados con la generación de fotogramas en el DLSS 3 es que añade input lag.
El motivo de ello es simple, al añadir fotogramas de más, se retrasa la
aparición del frame generado a partir de la acción del jugador. Si bien
la tasa de frames aumenta, hemos de partir del hecho que estos no están atados al motor del juego, por lo que el tiempo entre que por ejemplo pulsamos un botón y vemos al personaje saltar sigue siendo el mismo que sin el DLSS 3. Es decir, no tienes las ventajas de ejecutar un juego a 120 FPS si los generas con el DLSS 3. Si el motor gráfico está funcionando realmente a 60 FPS, ese será el tiempo en que tardará el juego en reaccionar.
DLSS 3.5
Pese a que el DLSS 3.5 pueda parecer una mejora menor
sobre su anterior versión, pero no es el caso. Se ha de tener en cuenta
que esta versión se ha creado no para generar fotogramas de más,
aumentar la resolución o más cosas, sino para solucionar el problema de
la información incorrecta provocada por el uso de los datos de los
frames anteriores en escenas generadas con Ray Tracing.
Esto es un paso más a tener escenas generadas puramente por trazado de
rayos, sin ningún tipo de rasterización de por medio y reduciendo el
coste computacional al máximo.

En el modelo actual de Ray Tracing híbrido lo que se
hace es dejar que la escena se genere de forma normal para la
iluminación directa Para la indirecta, se indican explícitamente qué
rayos saldrán de forma indirecta de los objetos y a cuáles afectará.
Pues bien, la idea de NVIDIA de cara al futuro es que
la información que se utiliza para generar el búfer en diferido para
calcular la iluminación directa sea procesada por el DLSS 3.5. Es decir, que los rayos primarios se vean calculados y generados de forma automática por el CAE.
La idea es sencilla, reducir el coste computacional sobre el
rasterizado y acelerar la parte del cálculo de la iluminación directa de
la escena, al mismo tiempo, que esto permite un cálculo más preciso de
los efectos de luz indirectos como sombras, reflejos y muchos otros. El
objetivo al fin y al cabo es el mismo de siempre, el de reducir el coste
temporal por fotograma, pero esta vez mucho más centrado al trazado de
rayos.
RTX Remix
Una de las capacidades que tienen que ver con el DLSS 3.5 y que NVIDIA no ha promocionado tiene que ver con la plataforma de Modding RTX Remix,
donde el sistema a partir de conocer la colocación de las fuentes de
luz de la escena y la distribución de objetos del nivel puede generar la
iluminación directa de la escena a través de trazado de rayos, y con un
coste muy bajo. El motivo de ello es que dicho proceso no lo realiza
haciendo el cálculo del Ray Tracing píxel por píxel, sino aprendiendo una serie de patrones para luego en el CAE simular la luz directa de la escena sobre los objetos.
Debido a que el proceso de calcular la luz directa del renderizado en
diferido es un postprocesado sobre una imagen ya generada que funciona
en paralelo a la generación de la escena principal, es posible reemplazar su funcionamiento
y darle otra vida a nivel visual a los juegos. Sin embargo, su
implementación se está llevando por el momento con juegos relativamente
antiguos como Portal o Half-Life 2, con unos requisitos técnicos bastante altos, pero que resultan un avance respecto al Quake 2 RTX de la anterior generación.
Saludos.