Hace unas horas ha aparecido una patente de AMD que hace referencia a una técnica llamada «Variable Rate Shading».

La patente habla de la implementación por hardware de dicha técnica, que por cierto, Nvidia por su lado ha implementado en Turing bajo el mismo nombre

Variable Rate Shading es una nueva y fácil de implementar técncia de renderiza que se encuentra en las GPU Turing. Este incrementa el rendimiento de renderizado y la calidad, aplicando diferentes cantidad de poder de procesamiento a diferentes areas de la imagen. VRS funciona variando la cantidad de operaciones pixel shader únicas de tal manera que puedan ser procesadas por una sola operación pixel shader. Las operaciones pixel shader se pueden aplicar ahora a bloques de pixeles, permitiendo a la aplicaciones varia el ratio de los pixel shaders en diferentes áreas de la pantalla.

Cuando la GPU aplica el Pixel/Fragment Shader lo hace pixel por pixel y por tanto calcula el pixel shader de los pixeles uno a uno. Esto tiene sentido en partes de la escena donde el color de cada pixel es distinto, pero imaginemos por ejemplo un juego que tenga unos gráficos donde la homogeneidad de color en las superficies sea muy grande, como por ejemplo:

En esta escena de Wind Waker hay montones de superficies que están renderizadas con el mismo color pero que sin el VRS se van a renderizar uno por uno, en cambio si hubiese el VRS activo entonces se renderizarían en bloque de tal manera que el Pixel Shader no tendría que repetir las operaciones por cada pixel en esa parte de la escena y recortaría la carga en la parte Pixel/Fragment Shader que es la más pesada del pipeline en cuanto a cálculos.

¿Y esto no se puede hacer en las GPUs actuales? No se como será la implementación de Nvidia porque no han dicho como funciona pero en la patente de AMD nos deja muy claro que ocurre en la fase de rasterizado el inicio del proceso:

Tanto la etapa de rasterizado como el output merger se hacen a partir de unidades de función fija por lo que esto explica el motivo por el cual no se puede realizar en ninguna GPU previa a Turing en Nvidia (posiblemente excepto Volta pero esta no se lanzo al mercado doméstico) y ninguna GPU previa a la aún no lanzada Navi. Por otro lado confirma el hecho de que AMD esta jugando al juego del gató y el ratón con Nvidia.

¿Pero AMD no había hablado del VRS en el pasado? Pues si, es cierto… Pero esto tiene gracia.



El VRS aqui parece tener que ver con el Foveated Rendering donde el concepto es que aplicamos diferentes resoluciones dentro de una imagen para representar el nivel de detalle del ojo humano. ¿Estamos ante el mismo concepto o una palabra homónima? Bueno, descubramoslo.


La idea del Foveated Rendering es reproducir el hecho de que el ojo humano no ve con la misma definición en todas sus areas y esto permite renderizar las areas periféricas con menos resolución.

¿Como sabe la GPU cual es el punto central? Pues porque es desde donde apunta la cámara que es una pieza esencial en cada escena y esta misma es el origen de coordenadas.

¿Son lo mismo? Volviendo a la definición de Nvidia del VRS nos queda la parte final.

El Variable Rate Shading se puede usar para renderizar de manera más eficiente en la realidad virtual al renderizar en una superficie que se aproxima mucho a la imagen corregida de la lente que es envíada a la pantalla del HMD. Esto evita la representación de muchos píxeles que, de lo contrario, se descartarían antes de que la imagen se envíe al HMD VR.

¿A que e refiere? Pues lo habitual es que a no ser que un juego este especializado en utilizar la VR lo que va a hacer es renderizar pixeles de la pantalla del HMD que incluso se ven opacados en el mismo HMD.

Obviamente puedes adaptar el juego a la VR y que no haga la estupidez de renderizar pixeles no visibles pero… ¿Y que pasa si quieres automatizar todos los juegos a la VR sin cambios? Pues esto puede ser una buena solución de cara a automatizar el renderizado sin tener que tocar nada en los juegos.

Simple y llanamente el propio hardware se encargaría de hacer los ajustes para el modo VR sin que el desarrollador tuviese que tocar nada de su código. A la gente le parecerá una tontería muy grande, pero pienso que una de las ideas de AMD a corto plazo y que Sony adoptara en PS5 (no se si Xbox) va a ser la capacidad de que todo juego de PS4 por retrocompatibilidad y PS5 tenga un modo VR en todos los juegos que justifique el uso de la unidad HMD asociada con PS5 en vez de ocurrir como en PS4 donde es necesario hacer versiones especializadas para PS VR.

Hay una patente de Sony Interactive que relaciona todo esto con PS5, en realiad el punto a destacar es su utilidad para el Foveated Rendering, algo que se encuentra en PS4 Pro… La diferencia sería en que en PS5 gracías a llevar una GPU Navi este proceso estaría automatizado.

Los datos se reciben representando uno o más vértices para una escena en un espacio virtual. El Primitive Assembly se realiza en los vértices para calcular proyecciones de los vértices del espacio virtual en una ventana gráfica de la escena en un espacio de pantalla de un dispositivo de visualización que contiene una pluralidad de píxeles que se subdividen en una pluralidad de subsecciones. El Scan Conversion determina qué píxeles de la pluralidad forman parte de cada primitiva que se ha convertido en coordenadas de espacio de pantalla. La rasterización aproximada para cada primitiva determina qué subsección o subsecciones se superpone la primitiva. Los metadatos asociados con la subsección con una superposición primitiva determinan una resolución de píxeles para la subsección. Los metadatos se utilizan para generar valores de píxeles finales para la ventana gráfica de la escena que se muestra en el dispositivo de visualización de manera que las partes de la escena en dos subsecciones diferentes tengan una resolución de píxeles diferente.

Perdón por no traducirlo, pero si miráis el diagrama de la patente de AMD veréis que coincide. No es la primera vez que Sony y AMD tienen patentes dispares para lo mismo e incluso han llegado a patentar cosas aún no implementadas como es el caso que nos ocupa. Ya que hace referencia a partes de la etapa de rasterizado que son de función fija habitualmente. La GPU de PS4 Pro realmente no tiene nada de especial pero es curioso observar como Sony y AMD tenían pensados elementos para esta que al final irán a parar a Navi.

No obstante esta patente tiene una información muy jugosa de como podría ser la unidad HMD de PS5, empezando por las FIG 5A y 5B donde se nos define las resoluciones por área según el Foveated Rendering respecto a la resolución central.

Las FIGs. 5A-5B ilustran gráficamente la ventaja de las implementaciones, en las cuales los pixeles horizontales y verticales activos son escalados por cada subsección. Tanto la FIG. 5A como la FIG. 5B representan múltiples render targets (MRT) para los píxeles a ser procesado por el sistema 300 de acuerdo al pipeline gráfico 330.

En cada una, los factores de escala horizontal y vertical son mostrados para una pantalla de 1440×1400 píxeles

Es decir, unos 1440×1440 pixeles por ojo tendría el propio HMD.

Más adelante se puede leer:

Considerar una pantalla de 4K2K que contenga 8192 subsecciones de 32×32 pixeles.

Esto hace referencia a la resolucion completa de la pantalla dentro del HMD que pasaría de ser 1080P a ser una pantalla… Si, 4K.

Pero en el HMD obviamente no todos los pixeles de la pantalla serían visibles desde la lentes por lo que realmente la cosa quedaría así…

Por lo que la cantidad de píxeles sin aplicar el Variable Shading Rate/Foveated Rendering que realmente se utilizarían en el nuevo HMD:

3840*2160=8294400

(3840*2160)-(2*(1440^2))=4147200

4147200*(100/8294400)= 50%

Por lo que el ratio de pixeles es de un 50%… pero en el concepto del Foveated Rendering/Variable Rate Shading tenemos que en cada una de las subsecciones la cantidad de pixeles por sección puede ser más baja, tenemos un ejemplo en la FIG 5A de la patente de Sony donde una imagen a 1440×1440 es renderizada como una una imagen a 1120×1120 recortando la resolución de renderizado interna cara una de las subsecciones y haciendo que el Pixel Shader en esas secciones no dibuje un solo pixel sino varios por lo que la resolución de salida por ojo sería de 1440×1440 pixeles aunque internamente se habría renderizado con menos resolución.

Y si os habéis fijado con esta definición al completo hemos podido enlazar ambas definiciones de manera conjunta hasta convertirlas en una misma definición.

Y ya para terminar hay una parte de la patente de Sony donde se nos dicen los grados de visión del nuevo HMD, recordar que en el PSVR actual son unos 100º.

Si lo que dice la patente nos sirve como referencia con la resolución de pantalla y la resolución por ojo del siguiente PSVR entonces podemos intuir que el grado de visión de la PSVR2 sería de 114º.

Esto es todo, voy a estar unos días hasta la GDC completamente out aunque estaré como siempre en el Discord por si queréis comentar algo.