¿Ruido visual al usar Ray Tracing con tu GPU? Así lo elimina NVIDIA

Una de las herramientas de software que NVIDIA ha desarrollado para sus GPU profesionales es OptiX, el cual está pensado para la generación de escenas vía algoritmos de Ray Tracing puro combinas con soluciones de aprendizaje profundo para aplicaciones como la eliminación de ruido. ¿Cómo funciona y en que se basa la tecnología OptiX Denoiser de NVIDIA?

La llegada de las unidades para el Ray Tracing en las GPU de NVIDIA no solo ha supuesto un salto adelante en la implementación de estos algoritmos de renderizado de cara a los juegos, sino también en el renderizado offline, el cual se utiliza para la generación de escenas generadas por ordenador para películas y presentaciones.

Evolución Ray Tracing

Mientras que en videojuegos durante mucho tiempo se utilizará el Ray Tracing se combina con la rasterización y solo se utiliza para elementos puntuales como sombras, reflejos y todo aquello relacionado con la iluminación indirecta, en el mundo de la animación toda la escena se renderiza utilizando al algoritmo de Ray Tracing desde el primer hasta el último píxel. Todo esto trae consigo una serie de problemas, siendo uno de los destacados el del ruido.

Una de las tecnologías clave son los algoritmos de eliminación de ruido, el NVIDIA OptiX Denoiser es uno de estos algoritmos que buscan solventar este problema, pero antes necesitamos algo de trasfondo.

¿Para qué se es necesario el OptiX Denoiser?

ruido path tracing

Para entender el problema del ruido vamos a suponer un ejemplo, imaginad que tenéis delante una enorme pared de frontón tenéis que pintar. Para hacerlo os dicen que tenéis que hacerlo con pelotas de tenis llenas de pintura que tenéis que lanzar contra el muro haciendo uso de una raqueta. ¿Cuánto tiempo tardaréis en pintar toda la pared? Lo más seguro que una gran cantidad de tiempo. Pues bien el problema con el Ray Tracing es el mismo y aunque a simple vista el algoritmo dice que se proyecta un rayo por píxel y este sufre de varios rebotes por la escena, la realidad acaba siendo como la imagen de arriba.

Esto significa que el sistema necesita invocar una gran cantidad de rayos por píxel para conseguir una imagen mucho más nítida y con menos ruido, pero cada nuevo rayo que se invoca se requiere más y más potencia. Lo que hace que el coste de conseguir una versión nítida de la imagen se convierta en un esfuerzo titánico por parte de la GPU u otro hardware que se encuentre componiendo la escena en ese momento.

Si hablamos de estudios de contenido audiovisual encargados en crear escenas sumamente complejas donde se hace uso del Ray Tracing esto pueden ser una gran cantidad de tiempo y si hablamos de películas completamente generadas por ordenador son incluso semanas para renderizar toda la película entera en un centro de datos y como se dice el tiempo es dinero.

¿Qué es un Denoiser o algoritmo de eliminación de ruido?

Pixar Denoiser

Los ingenieros de Disney, recordemos que es propietaria de Pixar, para ahorrar dinero y tiempo de renderizado offline en sus películas desarrollaron un algoritmo de reducción de ruido basado en el uso de una red neural y por tanto basado en el Deep Learning. El algoritmo es capaz de generar a partir de muy pocas muestras, 32 de media, una imagen con la calidad de 1024 muestras. Hay que tener en cuenta que la cantidad de muestras es igual a la cantidad de rayos que se proyectan por píxel, por lo que es un enorme ahorro en costes, ya que con ello consiguen renderizar las escenas hasta 32 veces más rápido.

Los algoritmos de aprendizaje profundo se suelen utilizar para catalogar cosas o para predecir valores y en el caso del algoritmo de reducción de ruido nos encontramos con un algoritmo del segundo tipo. ¿Cómo funciona? A través de una serie de datos la red neural crea una función matemática que le permite predecir el valor de los píxeles sin valor en una escena con una gran cantidad de ruido.

Red Neural

Todo el proceso requiere de un aprendizaje y por tanto la red neural ha de saber donde se equivoca. Es por ello que se ha de ser entrenad con una gran cantidad de datos, lo que le permite ver un patrón, el cual representa en forma de función matemática. Al mismo tiempo se renderiza la misma imagen a toda definición y se compara con la imagen ha sido predicha por la red neural, la cual aprende de sus errores y ajusta la función matemática para sacar un resultado cada vez más preciso.

Poco a poco la red neural acaba generando una versión cada vez más cercana de las imágenes. La idea final es que la red neural a partir de una imagen renderizada por Ray Tracing con una gran cantidad de ruido pueda generar una imagen limpia sin ruido de ningún tipo. Lo cual tiene menos coste computacional que renderizar la escena con cientos e incluso miles de muestras por rayo.

¿Qué es la tecnología NVIDIA Optix?

NVIDIA OptixOptix es un motor para el trazado de rayos, el cual es totalmente programable y ha sido creado por NVIDIA para utilizar con sus GPU. Al contrario que el RTX que se diseñó para videojuegos, Optix está pensado para el renderizado offline y utiliza las unidades shader de la GPU para cosas como:

  • Generación de rayos
  • Sombreado de los materiales
  • Intersección de los objetos
  • Recorrido de la escena

Los dos últimos los puede realizar a través del uso de las unidades de intersección conocidas como RT Cores o por código puro y duro en forma de Compute Shaders. En realidad todo el motor de renderizado en este caso se programa a través de CUDA, lo que permite la creación de motores de renderizado offline que utilizan diversas versiones del Ray Tracing.

Dada la incursión de NVIDIA en el mundo de la inteligencia artificial, no es de extrañar que hayan implementado tecnologías como el NVIDIA Optix AI Denoiser, la cual parte del mismo principio que os hemos comentado antes con el ejemplo del algoritmo de eliminación de ruido de PIXAR.

El denoiser de NVIDIA Optix

Nviidia OptiX Denoiser

Ahora que tenemos todos los elementos necesarios ya podemos deducir lo que es Optix AI Denoiser, el cual empezó a ser implementado a partir de su arquitectura Volta, donde NVIDIA empezó a implementar lo que llamamos unidades tensoriales. Las cuales son clave para acelerar los algoritmos de aprendizaje profundo como es el caso son los algoritmos de eliminación de ruido, los cuales se conocen en Inglés como Denoiser.

En la versión actual del mismo este no se ha diseñado bajo la idea de renderizar un solo fotograma, sino una secuencia de los mismos, ya que utiliza la información de fotogramas anteriores para darle más precisión a la función generada para la eliminación del ruido. Se ha de tener en cuenta que cuanto más información tiene como base más fácil le resulta a la IA predecir los valores que ha de adivina y más precisa es a la hora de hacerlo.

No obstante y pera terminar, pese a la alta velocidad de renderizado en comparación con hace unos años, la realidad es que un algoritmo de denoising no es lo suficientemente rápido como para llevar escenas renderizadas con Ray Tracing puro a tiempo real, para ello aún nos quedan una larga espera de varios años.

1 Comentario