Blog Personal.

Conceptos Básicos, GeForce, Nintendo, Nvidia, Switch

Nintendo Switch y Resolución de Pantalla

Me entero por el Discord del blog que Xenoblade Chronicles Definitive Edition para Nintendo Switch corre en modo Dock a una resolución dinámica de 504P-720P, lo digo para daros las gracias ya que de otra forma no me hubiese enterado.

¿Es algo grave? La verdad es que no si tenemos en cuenta que hablamos de una consola que en modo Dock aka, modo sobremesa no consume ni 20W en realidad y si, su potencia/consumo es mayor que la de PS4 y Xbox One pero la potencia/consumo es un medida que mide el rendimiento por unidad de consumo energético y estamos hablando de sistemas con 10 veces el consumo energético y se lo pueden permitir por el factor forma que tienen dichas consolas, al fin y al cabo no son portátiles.

Lo realmente grave es auto-engañarse y pensar que Switch va a alcanzar en todo momento el nivel técnico de Xbox One o PlayStation 4, engañarse continuamente con eso y luego ponerse en modo…

… Cuando aparecen noticias como esta, pero es que hay gente lo suficientemente lerda como para pensar que Switch es una consola de sobremesa, que se penso como tal cuando realmente si lo fuese hubiesen incluido una interfaz Mini-HDMI en la unidad principal y el Dock demuestra que fue un after-thought una vez se había diseñado el sistema y se añadio para no retrasar el lanzamiento del mismo aún más.

Pero el mayor cuello de botella que tiene Switch es la RAM, os explico porque.

  • La GPU funciona a 768 Mhz y tiene una sola unidad de rasterizado que rasteriza 1 triangulo por ciclo de reloj.
  • La unidad de rasterizado transforma triángulos en fragmentos de hasta 16 pixeles por lo que va a necesitar dibujar 16 pixeles/ciclo en el búfer de imagen, por suerte la GPU tiene 16 ROPS y no esta limitada a eso.
  • La tasa de relleno es de 12,29 Gpixeles aproximadamente.
  • Con unos 25.6 GB/s de ancho de banda compartido con la CPU, Switch no tiene el suficiente ancho de banda como para que todos los pixeles se puedan dibujar en el búfer de imagen a la suficiente velocidad por lo que la tasa de relleno es más baja.

En realidad la elección de memoria de la consola nos demuestra que fue inicialmente diseñada como consola portátil como he dicho más arriba.

Tened en cuenta que la GPU de Switch no es oficialmente un Tile Renderer sino que solventa el búfer de imagen en la LPDDR4 directamente y eso se convierte en un problema enorme.

¿Como lo podría haber solucionado Nintendo teniendo en cuenta esta premisa? Pues pidiendo una revisión del chip con una interfaz de 128 bits LPDDR4 y si se pudiese a algo más de velocidad de reloj con tal de que el problema quedase reducido, aunque no se si lo haría completamente.

Pero hay una cosa que Franer ha dicho en el Discord que es importante destacarla.

Franer:

Pues para mi que el Xenoblade 2 en sobremesa mantiene muy bien los 720p
[16:41]
a no ser que carguen de efectos con transparencias la pantalla no veo por que tiene que bajar de res
[16:42]
osea la bala de plata de la switch son las transparencias en pantalla, la limita muchísimo su ancho de banda en la memoria
[16:43]
luego si son «catetos» y se les ocurre poner un enemigo que te llene de transparencias la pantalla como si le fuese la vida en ello ejem… abejas en el Xenoblade 2 pues ya es que son tontos y punto
[16:45]
además desde el Xenoblade X a Monolith la tienen dividida ayudando al resto y con poco tiempo y personal para sus propios proyectos
[16:45]
que el XC2 fué sacado antes y a prisa es impepinable
[16:46]
y este parece un ptoyecto a mitad de caminio del desarrollo de su proyecto principal del que solo mostraron una imagen de arte

Hay una cosa en la que Wii U tiene una enorme ventaja sobre Nintendo Switch y es el hecho de tener una enorme memoria embebida, su memoria externa iba solo a 12.8 GB/s pero eso no es problema cuando internamente tiene unos 32MB de memoria embebida con un ancho de banda lo suficientemente grande para su tasa de relleno, pero no solo la tiene Nintendo Wii U sino también Wii, Gamecube y 3DS… ¿El que? Pues obviamente la falta de memoria embebida en el Tegra X1 que obliga a que la LPDDR4 tenga que cargar con el peso de del ancho de banda.

Hemos de tener en cuenta que muchos de los juegos de la anterior generación y de la actual tiran del renderizado en diferido, el cual tira de diversos Render Targets. ¿Que es un Render Target? Pues es el llamado Render to Texture donde el búfer de imagen generado es convertido en una textura para su posterior manipulación a través de los Pixel/Fragment Shaders o de los Compute Shaders, por lo que el ancho de banda necesarios dependerá de la cantidad de render targets utilizados en la escena debido a que vamos a escribir varios búfers de imagen por pixel y por tanto vamos a necesitar

Pe, pero Urian… El Tegra X1 utiliza una Maxwell que utiliza Tile Caching y los ROPs escriben en la cache L2 … ¿Es que te has olvidado de ello?

Si, es cierto ademas es algo confirmado por Nvidia, las GPUs de Nvidia a partir de Maxwell en adelante soportan lo que Nvidia llama Tile Caching que consiste en añadir una unidad de Tiling entre la geometría y la rasterización.

Hay una patente de Nvidia que habla de ello aplicado a sus GPUs.

La Tiling Unit 375 es una unidad de ordenación de primitivas que se sitúa entre el World Space Pipeline 352 (Geometria) y el Screen Space Pipeline 354 (Rasterización) como es descrito aquí más adelante.

Las primitivas gráficas son procesadas en el World Space Pipeline y entonces transmitidas la Tiling Unit 375. El espacio de pantalla es dividido en caches tiles, donde cada cache tile es asocida con una porción del espacio de pantalla. Por cada primitiva gráfica, la Tiling Unit 375 identifica el conjunto de Cache Tiles que interseccionan (en cuanto a posición de pantalla) con la primitiva gráfica, este proceso es llamado tiling. Después de realizar el tiling a un cierto número de primitivas gráficas, la unidad de tiling las procesa basandose en las cache tiles, donde las primitivas gráficas asociadas a caca cache tile son enviadas a la Setup Unit 380 enviando una cache tile cada vez. Las primitivas gráficas que interseccionan con varios cache tiles son procesadas una vez en el World Space Pipeline 352, pero son transmitidas varias veces al Screen Space Pipeline 354.

Este es el motivo por el cual suelo decir que las GPUs de Nvidia a partir de Maxwell son del tipo Middle Sort porque ordenan las primitivas gráfics a partir de su posición en pantalla a partir de ese punto.

Volviendo al tema del Tile Caching uno podria llegar a pensar a simple vista que estamos ante un Tile Renderer mirando las patentes y las diapositivas de Nvidia.

Al igual que los Tile Renderers crea una lista de primitivas que se encuentran en cada tile, pero no las procesa de la misma manera. Un Tile Renderer convencional almacena la información de la geometría en pantalla a memoria y a partir de ahí crea una serie de listas de pantalla, una por cada región de pantalla que corresponde a cada tile en un orden determinado para renderizar cada tile por separado como si fuese un frame completo y luego unirlos.

En cambio a lo que hace referencia Nvidia no es que la geometría se almacene en la RAM sino que la información de la misma es almacenada en la Cache L2 de la GPU, esto es un cambio importante porque esto significa que la cantidad de poligonos por tile es limitado debido a que el espacio es limitado.

El problema de utilizar una Cache L2 es que si otras operaciones necesitán el espacio de la cache se va a hacer un cache flush que va a enviar hacia abajo en la jerarquía, en cambio en una Scratchpad RAM esto no ocurre si el código no lo dice explicitamente por lo que en la solución de Nvidia va a depender de si hay espacio en la cache suficiente para ello. ¿Pero como lo hace el sistema de Nvidia para asegurarse que los datos estén siempre en la Cache L2? En este video de David Kanter nos deja claro que el tamaño del Tile se adapta según los parametros de la escena.

Es decir, si aumentamos la información entonces lo que hace es reducir el tamaño del Tile o el número de Tiles que se procesan al mismo tiempo y si volvemos a la patente nos explican un poco mejor el tamaño de cada Tile.

Los raster tiles 420 representan una parte del tile cache 410 (0). Como se muestra, el tile cche 410 (0) incluye dieciséis raster tiles 420 (0) -420 (15) dispuestos en una matriz que tiene cuatro mosaicos ráster 420 de ancho y cuatro mosaicos ráster 420 de alto. En los sistemas que incluyen múltiples GPC 208, el procesamiento asociado con un mosaico de caché dado 410 (0) puede dividirse entre los GPC 208 disponibles. En el ejemplo que se muestra, si los dieciséis mosaicos ráster del mosaico de caché 410 (0) fueran procesados por cuatro diferentes GPC 208, entonces cada GPC 208 podría asignarse para procesar cuatro de los dieciséis mosaicos de trama 420 en el mosaico de caché 410 (0). Especificamente, el primer GPC 208 podria ser asignado para procesar los raster tiles 20(0), 420(7), 420(10), y 420(13), el segundo GPC 208 podria ser asignado para procesar los raster tiles 420(1), 420(4), 420(11), y 420(14), el tercero para los tiles 420(2), 420(5), 420(8), y 420(15) y el cuarto tendria asignados los raster tiles 420(3), 420(6), 420(9), y 420(12).

Es decir, cada Tile en la Cache esta compuesto por 16 Raster Tiles pero el tamaño de cada Raster Tile va a depender directamente de la cantidad de información utilizada en la escena y dicho tamaño cambia de manera dinámica según una serie de atributos.

  • La cantidad de triangulos por tile y su información.
  • La cantidad de atributos por triangulo.
  • La cantidad de información por pixel ya el cache en el Tile no saldrá al búfer de imagen hasta que no este completamente renderizado.

¿Y de que nos sirve esta información? En Nintendo Switch todos los juegos soportan lo que es resolución dinámica, esto significa que con tal de mantener una tasa de fotogramas estable la resolución fluctua y por tanto la cantidad de operaciones por fotograma es fija. ¿Sabéis lo que implica esto? Pues que es muy posible que la GPU este pensada para que la cantidad de tiles a procesar por fotograma y la cantidad de tiles sea fija de tal manera que si aumentamos la carga computacional entonces la cantidad de pixeles por tile disminuira pero no la cantidad de tiles por fotograma por lo que en consecuencia bajará la resolución.

Es decir, el problema de la resolución tiene que ver más con la capacidad computacional de la GPU… ¿Entonces la memoria no influye? Bueno, hay que tener en cuenta que la GPU no un Tile Renderer y el Tile Caching es algo que se puede desactivar en los juegos y no sabemos que juegos hacen uso del Tile Caching y cuales no por lo no es fácil saber si esto influye o no. Lo que si que hay que tener en cuenta es que el Tile Caching no implica renderizar a nivel de Tile, todos los efectos que funcionen en espacio de pantalla de solucionan a resolución completa en vez de hacerse tile por tile, se que es confuso y que a muchos la diferencia entre el Tile Caching y el Tile Rendering hace que estéis.

En el Tile Rendering el tamaño de cada Tile es fijo, no varia, en el Tile Caching de Nvidia se llega al punto en que si hay demasiada carga gráfica los Tiles acaban siendo tan pequeños que la resolución se ve resentida por lo que los desarrolladores prescinden del mismo si es necesario y lo desactivan, pero esto solo es viable en PC y no en Switch donde entonces aparece el problema del ancho de banda.

y hemos de tener en cuenta que los juegos funcionan con dos perfiles gráficos (Dock y Undock) por lo que no es una simple subida de resolución al uso.

Esto es todo, tenéis el Discord y los comentarios de esta entrada para comentarla.

5 2 votes
Article Rating
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
AupaArriba

Lo has enfocado desde el punto de vista equivocado:

Switch es más potente que Wii U, y Zelda BOTW va a 720 en modo portátil siendo un port de wii u.

Esto es una señora chapuza y ya está.

Daniel

A mi el juego me encantó (salvo el sistema de combate que era demasiado automático.). Lo jugué en N3DS y los gráficos parecían imposibles para dicha máquina (se que la versión de Wii era mejor, pero no podía jugarse de forma portátil). Se que esta conversion/remake ha estado limitada por el presupuesto (dicho por el propio director), y que han usado el Engine de Xeno2 (supongo que la versión más optimizada, la del dcl Torna). Mi duda es respecto a las limitaciones de la máquina, más que nada por que esta gente fue la encargada de ayudar a Nintendo con… Read more »

steven

Hola tengo dura se podrá soldar otro chip de RAM y lo lee

[…] podéis ver hasta ahora se trata de exactamente lo mismo que el Tile Caching de Nvidia que os comente en la entrada de hace unos días para explicaros uno de los handicaps de la Nintendo …. Pero las similitudes no terminan ahí sino que van más […]