Las GPUs duales están condenadas a desaparecer por el hecho que los juegos no están pensados para utilizar dos gráficas en paralelo. ¿Pero qué ocurre si se utiliza la segunda GPU para acelerar una tarea gráfica que por el momento carece de importancia pero que a medida que el Ray Tracing crezca en importancia se hará más necesario: El Denoiser Engine
Uno de los problemas del Path Tracing o más conocido como Monte Carlo Ray Tracing es la cantidad de muestras que son necesarias por pixel para conseguir una imagen nítida, es decir, sin ruido de ningún tipo, lo que hace que se requiera una potencia computacional fuera del alcance de los ordenadores domésticos.
En el Path Tracing, los rayos son distribuidos de manera aleatoria en cada pixel de la escena, cuando se produce una intersección entonces se genera un rayo indirecto (reflejo, sombras, etc.) que apunta a una dirección aleatoria. Así pues, tras unos cuantos rebotes el rayo sale de la escena o es absorbido por impactar con un objeto con un cociente de refracción 0 o cercano al 0. Cuando cada uno de los rayos ha terminado de rebotar por toda la escena, entonces se calcula un valor de muestra, el cual se basa en la información obtenida en el recorrido del rayo por la escena.
El hecho que la distribución de los rayos se haga de manera aleatoria provoca que sean necesarias una gran cantidad de muestras, lo cual provoca que se necesite una capacidad de cálculo enorme para tener una imagen nítida en una escena utilizando Path Tracing, hasta el punto en que las películas en CG que utilizan esta técnica necesitan potentes superordenadores.
El Denoiser Engine
Tal es la carga computacional de este tipo de renderizado que empresas como Disney y su filial Pixar decidieron hace unos años empezar a utilizar redes de Deep Learning para la reconstrucción de imágenes para que estas imaginaran/alucinarán las imágenes completas de sus películas hechas en CG utilizando una muy menor cantidad de muestras.
Asi pues con una imagen con muchas menos muestras por pixel se acaba consiguiendo el mismo resultado que una con muchas muestras por pixel utilizando un algoritmo de «Denoising» o de eliminación de ruido a través de Deep Learning y procesadores dedicados aplicando este algoritmo en las imágenes producidas por una GPU con muchas menos muestras.
Existe una patente de Disney/Pixar titulada Multi-scale architecture of denoising monte carlo renderings using neural networks donde precisamente nos hablan del Denoiser Engine como concepto y creo que es algo que se va a estandarizar en el mundo de los gráficos en 3D, no de cara a los juegos, pero si en lo que a composición de imágenes 3D.
Es decir, se trataría de asignar un coprocesador a la GPU especializado en ejecutar redes neurales y preparado para realizar el proceso de Denoising. El cual en en sus primeras versiones si lo aplicamos a las GPUs contemporáneas se podría conectar a la GPU a través de una interfaz NVLink (NVIDIA) o una interfaz xGMI (AMD). Ambas tarjetas se comunicarían a través de dispositivos DMA, de la misma manera que se comunican una GPU dual o dos GPUs bajo un mismo sistema cuando renderizan una escena de manera conjunta.
El Denoiser Engine podría suponer el retorno a las GPUs duales
Las GPUs contemporáneas, al menos las de NVIDIA, disponen de una serie de unidades especiales para acelerar los algoritmos de Inteligencia Artificial. En el caso de AMD estas unidades se encuentran en la arquitectura CDNA de sus recién lanzadas AMD Instinct MI100.
Esto puede llevar al retorno de las GPUs duales, pero en la que mientras una renderiza la escena de cara al Path Tracing, la otra GPU se encarga de aplicar el algoritmo de eliminación de ruido por IA. La idea es por tanto muy similar a la del DLSS, pero en vez de utilizar los Tensor Cores para generar una imagen a más resolución, estos se utilizan para reducir el ruido de la escena y poder conseguir una imagen nítida con una menor cantidad de muestras.
Tampoco nos podemos olvidar el hecho que los nuevos nodos de fabricación y el conocido desarrollo de GPUs basadas en chiplets aumentará enormemente la cantidad de Compute Units o SM en las futuras GPU, lo cual significará un aumento también de la capacidad de cálculo de las redes neurales que se ejecutan en las unidades de ejecución tensoriales. No olvidemos que en el caso de NVIDIA, los Tensor Cores no son más que unidades de ejecución dentro de cada SM.
La utilidad del Denoiser Engine en los juegos
Aún falta mucho tiempo para que veamos el uso exclusivo del Ray Tracing en los juegos, o en su defecto veamos una mayor cantidad de juegos que se basen puramente en este y no en una combinación de trazado de rayos y rasterización. Pero tenemos casos como el Minecraft RTX que se renderizan a través de puro trazado de rayos.
Como se puede ver, en el proceso de renderizar el Minecraft RTX se acaba gastando mucho más tiempo en eliminar el ruido de la escena que en renderizarla. A medida que vayan apareciendo más juegos que utilicen el Ray Tracing para renderizar la escena será más necesario realizar el proceso de eliminación de ruido de manera eficiente, de ahí la necesidad de un Denoiser Engine a medio-largo plazo.
En todo caso ya se están ofreciendo librerías de eliminación de ruido para los juegos, cómo es el caso de su inclusión en FidelityFX, por lo que no deberíamos tardar en ver el uso de este tipo de algoritmos. Aunque no podemos olvidar que estos funcionan mucho mejor si se utilizan unidades del tipo Tensor, mucho más preparadas para este tipo de tareas.
En todo caso se necesita del Denoiser Engine, sea cual sea su implementación nos encontramos ante el hecho que el Ray Tracing con pocas muestras por píxel no es eficiente y la potencia que se necesitaría para poder conseguir esa calidad de imagen nos llevaría una década de espera sin la implementación de un Denoiser Engine que acelere dicho proceso.