diciembre 4, 2020

Feedback: ¿Como le hará frente AMD al DLSS de Nvidia?

Comentario#1:

AMD respondió al dlss 1 que no estaban interesados en ese camino por el momento. Sin embargo se usa un poco de red neural en su sharpener según alguien que miró el código en reddit. Tenemos el caso de oculus y su dlss x16 que toma una imagen de entrada ya filtrada: Usando id buffer en vez de vectores normales debería mejorar. El checkerboard es x2 pero podrían mejorar hasta x4 Teoría: Checkerboard 4x con id buffer y zbuffer de cada sample para corregir el solapamiento de la geometría. En cada frame se renderiza uno de cuatro píxels de forma… Read more »

Caliente, caliente pero no tiene que ver con nada de lo que ha presentado Oculus sino más bien con algo sacado de una patente titulada VARIABLE RATE RENDERING BASED ON MOTION ESTIMATION en la que la patente de inicio no parece tener mucho que ver con el Checkerboard Rendering sino con el uso del Variable Rate Shading para realizar el Foveated Rendering.

Para entender la relación primero hemos de entender que el Checkerboard Rendering renderiza la mitad de los pixeles del fotograma por el hecho que la otra mitad la saca del fotograma siguiente.

Este proceso normalmente requiere del uso de Compute Shaders pero… ¿Que ocurre si tenemos una unidad de función fija que realiza dicha tarea como uno de los aceleradores incluidos en el Conjunto D de la GPU? Es decir, acompañando a los decodificadores de video, el adaptador de pantalla, las unidades DMA, etc.

La explicación que encontramos en la patente es:

El Motor de Estimación del Movimiento esta configurado para generar un campo de Vectores de Movimiento basado en las estimaciones del movimiento derivadas de la comparación de la imagen N con la imagen N-1 previamente previamente renderizada y almacenada en memoria. El generador de vectores de movimiento esta configurado para estimar el movimiento de los objetos en imágenes consecutivas basandose en que las imágenes serán similares excepto por los cambios causados por los objetos en movimiento. Para estimar el movimiento, el generador de campos movimiento determina la transformación de una imágen de dos dimensiones a otra desde las imágenes adyacentes de una secuencia de imágenes. Un vector de movimiento es un vector de dos dimensiones que provee un desplazamiento de las coordenadas en una imagen a las coordenadas en otra imagen.

El generador de campos de vectores de movimiento compara los pixeles correspondientes con la imágen N (la imagen renderizada más recientemente y la imagen N-1 (la imagen renderizada justamente antes de la imagen N) para crear un campo de vectores de movimiento que modela el movimiento de los objetos entre las dos imágenes. En algunas implementaciones el generador de campos de vectores de movimiento emplea algoritmos de coincidencia de bloques, como búsqueda exhaustiva, búsqueda de tres pasos, búsqueda simple y eficiente, búsqueda de cuatro pasos, búsqueda de diamantes u otros algoritmos utilizados en la coincidencia de bloques. En algunas implementaciones, el generador de campo de vectores de movimiento usa una red neural para estimar el campo de vector de movimiento para la trama actual basándose en el campo de vector de movimiento para la trama anterior.

En realidad lo que hace es comparar dos fotogramas independientemente de donde salgan y generar un búfer adicional (campo) que incluye la información del movimiento que han seguido cada uno de los objetos. Lo cual es sumamente útil para no tener que realizar el cálculo durante el Checkerboard Rendering implementandolo en el código, solo necesitas que el Generador de Campo analice la imagen actual y la anterior para generar la información y…

Comentario#2:

Sin embargo hay una alternativa más simple:

Hace 2 años Microsoft mostró un dlss en colaboración con nvidia para cualquier gpu directx 12 usando Direct ML, y a estas alturas se habrá adaptado para funcionar también en ps5 con su api…

Y el dlss de Microsoft tarda 5 ms en series x frente a 2,5 ms de dlss 2 en la 2060.

Para «duplicar su velocidad» podrían hacer checkerboard usando la mitad de resolución nativa y objetivo, y bajar más la nativa aumenta el rendimiento. Pero empezar desde tan baja resolución incita a usar algo como msaa temporal de varios samples o taa con zbuffer como el de oculus para el input de dlss.

Lo hizo utilizando una Nvidia Volta, ergo Tensor Cores, ergo tenemos un problema porque por lo que sabemos no tienen equivalente en RDNA 2 y el uso de las Compute Units via SIMD sobre registro es mucho más lento. La gente no para de repetir que es posible algo como el DLSS, yo creo que es posible pero es mucho más leeentooo y por tanto no es funcional.

Esto es todo, tenéis los comentarios de esta misma entrada para comentar y no olvidéis que tenemos Discord.

5 1 vote
Article Rating
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Daniel

Hola, muy interesante. Tengo unas dudas, si no te importa, claro. Dices que utiliza unas unidades de función fijas que funcionan como redes neuronales,al ser fijas el programa está escrito y los programadores sólo las usan,al contrario que los Tensor cores, que si a Nvidea le da por permitir que los programen podrían. Mi duda es si esto, a parte de aumentar la resolución, podría usarse para crear imágenes para dos pantallas, es decir : para la visión esteroscopica. Soy consciente que hubo un miniboom cuando ps3, 3ds y quedó en nada. Y que lo que hace es rendizar la… Read more »