Gráficos en Consolas Antiguas. Temp 2 (III): Nintendo GameCube (y Wii)

El siguiente turno es para GameCube.

Gamecube CONSOLELa consola es mucho más fácil de entender que PlayStation 2 y no  supone tantas complicaciones como la de Sony. No obstante esto no significa que no tenga una serie de elementos propios que la hacen única pero no al nivel de complejidad que llego PS2 y es que GameCube se diseño para ser fácil de entender y de desarrollar en ella.

Arquitectura General y Memoria.

La consola esta compuesta por cuatro elementos principalmente:

  • La CPU: El IBM “Gekko funcionando a 485 Mhz.
  • El LSI Flipper funcionando a 162.5 Mhz.
  • 24MB de memoria 1T-SRAM a 2.6 GB/seg.
  • La memoria Auxiliar o A-RAM: 16MB a una velocidad de solo… 81MB/Seg.

7210-gamecube-motherboard

La organización del sistema es la misma que vimos en N64 por lo tanto tenemos memoria unificada y al contrario de otros sistemas el controlador DMA no se encuentra en la CPU sino que se encuentra en el Flipper y es el encargado de controlar todos los accesos a memoria de CPU y GPU. El hecho de que la GPU se encuentre en el mismo chip que el DMA permite que la GPU pueda acceder a la RAM principal por si misma sin tener que hacer el complicado camino de datos de PS2. Es más, el DMA se encarga de dividir el ancho de banda de 1T-SRAM en dos anchos de banda iguales de 1.3 GB/seg, uno para la CPU y el otro para la GPU.

La memoria utilizada es memoria 1T-SRAM, un tipo de DRAM de muy baja latencia que fue elegida por Nintendo tras el problema de la latencia de memoria con N64 para poderlo eliminar de cara a GCN. Su densidad de solo 24MB resulta un cuello de botella para muchos desarrolladores dado que la cantidad de memoria de PS2 que era la consola mayoritaria era de 32MB, esto llevaba a los desarrolladores del sistema a realizar recortes en los juegos de la sobremesa de Nintendo por falta de memoria.

Por otro lado la memoria auxiliar tenía dos funciones, una era el hecho de almacenar las pistas de sonido. El otro como cache de disco con tal de reducir los tiempos de carga, su ancho de banda es paupérrimo para ser utilizado de cara al renderizado de la escena.

CPU

La CPU es un IBM PowerPC 750 con 256KB de cache de segundo nivel, es la primera consola en la historia en disponer una CPU con memoria cache de segundo nivel, lo que le da ventaja enorme en cuanto a rendimiento respecto a otras CPUs contemporáneas.

En informática, la caché es la memoria de acceso rápido de una computadora, que guarda temporalmente los datos recientemente procesados (información).[1]

La memoria caché es un búfer especial de memoria que poseen las computadoras, que funciona de manera similar a la memoria principal, pero es de menor tamaño y de acceso más rápido. Es usada por el microprocesador para reducir el tiempo de acceso a datos ubicados en la memoria principal que se utilizan con más frecuencia.

La cache en GameCube esta como un método para evitar la latencia de la memoria, por lo visto los ingenieros de Nintendo se traumaron tanto por los problema de N64 que decidieron solventarlos a través de la cache L2 y la 1T-SRAM.

En una comparación de tu a tu si hablamos de la operación con enteros solo es superada por la CPU de Xbox que ya tratare en su entrada, el caso es que la CPU de GameCube puede realizar 1125 MIPS en el Dhrystone con una velocidad de 486 MHz, lo cual es más del doble que los 450 MIPS del R5900 que lleva PS2 en su interior y por supuesto más que los 360 MIPS del SH4 de Dreamcast.

captura-de-pantalla-2015-11-30-a-las-13-36-26

En lo que a coma flotante se refiere IBM y Nintendo hicieron un ligero cambio llamado Paired-Singles. La idea es quitar el soporte de coma flotante de 64 bits porque es inútil en una consola de videojuegos pero mantener sus registros y cambiar su set de instrucciones para permitir operaciones dos operando, las cuales son utilizadas para realizar ciertas operaciones gráficas sobre el búfer de imagen frontal, el cual se almacena en la memoria principal (aunque a eso ya llegaremos).

GX GPU

La GX GPU es el procesador gráfico de la consola, al contrario del GS de PS2 se trata de una GPU completa por lo que todo el apartado gráfico desde la geometría hasta el dibujado de los pixeles en el búfer de imagen es realizado por la propia GPU.

flipper_die

El mapa es el del Flipper entero que es donde se encuentra la GPU de la consola.El chip tiene unos 51 millones de transistores y dispone de 3MB de memoria RAM pero la configuración de dicha memoria RAM no es la misma que la de PS2 ya que:

  • El búfer frontal no se encuentra en la memoria embebida sino en la memoria principal.
  • la eTM es la cache de texturas y solo puede acceder a la misma las TMUs (TC+TF) y el TEV.
  • El eFB almacena el búfer trasero (color+z) y solo pueden acceder al mismo los 4 ROPS.

Dado que el texturizado y el dibujado en el búfer en el pipeline estilo OpenGL que utilizan todos los sistemas de videojuegos es el mismo vamos a ir por partes y empezar por la geometría.

GX GPU XF

La unidad de transformación de la GPU de GameCube no es programable, esto significa que se trata de una serie de máquinas de estado que realizan las operaciones relacionadas con la geometría de la escena de forma automática. Esto significa que los desarrolladores no tienen porque romperse los cuernos como ocurre en PS2 donde tienen que crear un motor geométrico y programarlo en la VU1, es más, fue la primera consola en tener una unidad de este tipo.

No se puede realizar la comparación directa con la VU1 desde el momento en que no sabemos cuantos ciclos tarda la GX GPU en realizar la etapa geométrica al completo, pero la cifra que Nintendo da en el SDK es de 32.400.000 polígonos por segundo transformados sin ninguna fuente de luz aplicada sobre la escena (unos cinco ciclos). Hay que tener en cuenta que esto son cifras de la etapa geométrica y no de todo el pipeline gráfico. La particularidad es que la potencia del motor geométrico parece ir bajando a medida vamos añadiendo fuentes de luz adicionales hasta un límite 8 fuentes de luz.

¿Cuál es su potencia? Hay que tener en cuenta que Nintendo no dio nunca las cifras que puede transformar esta parte de la GPU sino las cifras globales de la GPU y esto depende de todo el pipeline gráfico siendo el factor limitando definitivo la tasa de relleno. La capacidad de trasformación de la unidad XF es de unas 32.400.000 polígonos/segundo, dado que la velocidad son unos 162Mhz, entonces tarda unos 5 ciclos en realizar una transformación pero realiza sin fuentes de luz de ningún tipo.

El XF se encarga de aplicar la iluminación de la escena a nivel de vertice manipulando el valor de color de cada vértice, el cual afectará el valor de color de la textura cuando se realice la étapa de texturizado. Puede aplicar hasta 8 fuentes de luz por escena y consume 4 ciclos adicionales aparte de los 5 ciclos de transformación por fuente de luz. Por lo que el ratio de la unidad XF sería el siguiente:

Fuentes de Luz Polígonos
0 32.400.000
1 18.000.000
2 12.500.000
4 7.715.000
8 4.379.000

No obstante no podemos olvidar que estas cifras no son los polígonos que se dibujan en pantalla sino las tasas de la unidad geométrica que son enviadas al Triangle Setup/Rasterizador

GX GPU Rasterizador/Triangle Setup

Aquí nos encontramos con una de las cosas que te hacen decir… ¿En que estaban pensando a la hora de diseñar esta parte? Pese a las cifras de la unidad XF el Triangle Setup solo puede enviar un triangulo a texturizar cada… ¡16 ciclos! Y el problema es que dicho idem se repite en Wii. Es decir, la cantidad de poligonos que le llegan a la unidad de texturizado es de 10.125.000 poligonos por segundo (quedaos con esta cifra porque luego será importante).

Aunque para el ratio de los juegos de la generación en la que se encuentra Game Cube es más que suficiente no deja de ser un cuello de botella en la arquitectura bastante importante. Es decir, GameCube podría tener más potencia geométrica si no hubiese tenido dicho cuello de botella en su pipeline gráfico.

GX GPU TC+TF+TEV (Texturizado)

La siguiente etapa es la de texturizado, GCN tiene unos 4 pipelines para texturizado (lo que da una tasa de 648 millones de pixeles texturizados por segundo) que no son tan simples como los de PS2 y son comparables a una Radeon de primera generación y la GeForce 2 de Nvidia. Dicho de otra forma, su sistema de texturizado es mucho más avanzado que el de Dreamcast y el de PlayStation 2 aunque esto no significa que sea perfecto.

En primer lugar el texturizado de la escena se hace sobre el eTC, que son las siglas de Embedded Texture Cache.Y es que GCN tiene un sistema de caches que lo que hace es almacenar en un búfer interno de 1MB las texturas de la escena con tal de no tener que acceder a la RAM principal del sistema para realizar las operaciones de filtrado de texturas. El ancho de banda de dicha memoria embebida es suficiente para poder texturizar utilizando texturas de 16 bits y filtro trilineal en un solo paso, es decir, sin perder la tasa de relleno. Aunque la consola soporta texturas de 24 bits y puede renderizar en 24 bits y utilizando filtro bilineal si se quiere renderizar con 24 bits y trilineal entonces el número de pasos pasa a duplicarse.

Tomando como referencia un tamaño de 32 pixeles por polígono utilizados en Dreamcast y en PlayStation 2:

Muestras Tasa de relleno en millones de pixeles Polígonos (32 pixeles)
1 648 20.250.000
2 324 10.125.000
4 162 5.625.000
8 81 2.531.250

Antes he comentado lo de la tasa del Triangle Setup por un motivo, la consola parece estar diseñada para renderizar la escena a 10.125.000 poligonos por segundo ya que esto es lo que envía el Triangle Setup de la GPU a las unidades de texturas y ese es el ratio de texturizado utilizando multitexturizado con dos muestras. ¿La gran ventaja de GameCube respecto a PS2? El hecho de poder renderizar con texturas de 16 y 24 bits pero sobretodo el hecho de poder trabajar con texturas comprimidas en formato S3TC, esto hace que el espacio de 1MB de memoria embebida se convierta en un espacio de 4MB en el caso de estar utilizando texturas de 16 bits o de 6MB en el caso de estar utilizando texturas de 24 bits para renderizar la escena.

El sistema de multitexturizado de la consola puede funcionar de dos maneras distintas, la primera es la misma que con PS2 utilizando dos texturas distintas e ir haciendo combinaciones de estas. La segunda es cogiendo una textura base y aplicando una operación matemática para manipular el color de los pixeles para generar una nueva textura, a este tipo de operación se les llama “Shade Tree”.Es lo que vulgarmente conocemos como Pixel/Fragment Shader y en el caso de las consolas de Nintendo es algo que ya se encontraba en N64 pero en el caso de GCN la cosa ha aumentado hasta poderse aplicar hasta en 8 muestras/8 pasos distintos por textura, aunque el uso de cada muestra reduce la tasa de relleno como se puede ver en la tabla de más arriba. La idea del TEV es la de poder aplicar efectos de manipulación de los pixeles que no tienen su máquina de estado correspondiente dentro del hardware.

El TEV tiene una bonita patente dedicada que lo describe de la siguiente manera:

Una unidad de mezcla/blending unit de color/alpha configurada dentro del pipeline grafico para combinar texturas, colores rasterizados y el componente alpha para producir un color y un alpha computados y que tiene un mecanismo de feedback que permite la re-introducción del color y el alpha computados en el pipeline, donde el procesamiento de texturas múltiples es utilizado por la reiterativa utilización de la unidad de mezcla.

El color rasterizado es el color que tienen los diferentes pixeles del fragmento aún no texturizado (recordemos que en esta etapa ya no hablamos de polígonos sino de fragmentos) ya que han sido transformados por el Triangle Setup. Si no hay iluminación de ningún tipo el valor de color es 0 (no hay pixel) o 1 (hay pixel) pero cuando hay iluminación entonces si que hay valor de color que se combinará a través del TEV. Pero eso nos describe lo que hace, necesitamos saber cual es su configuración:

Un subsistema de procesado del multitexturizado donde la unidad de mezcla comprende al menos un multiplicador y un sumador y esta configurado para aceptar hasta cuatro argumentos de entrada para realizar operaciones de mezcla.

Veamos:

Captura de pantalla 2016-01-06 a las 9.33.51

Tenemos cuatro argumentos de entrada que están marcados con el número 656. ¿Que son? Dado que la GX GPU opera con cuatro texturas simultaneamente no es ningún secreto que cada textura sea un argumento de entrada que es procesado por el elemento 658 para dar un resultado que se almacena en su registro GX_TEVREG para ser enviado al búfer de imagen o de poder utilizarlo como argumento de entrada para efectos de multi-texturizado. Dado que el elemento 658 es el encargado de realizar las mezclas hemos de suponer que si;

  • Puede operar con cuatro argumentos simultaneamente.
  • Tiene un sumador y un multiplicador por lo que puede realizar una operación FMADD.

Pero hay una parte más interesante aún:

Las operaciones realizadas por el bloque 658 pueden ser diferentes para componente de color y el componente alpha.

Dado que el argumento de entrada van a ser siempre texturas cuyos pixeles están en formato RGBA lo que hace el TEV es separaros en dos bloques, por un lado hace operaciones sobre el canal de color (RGB) y por el otro sobre el canal Alpha por lo que la configuración de la unidad TEV es de 4 operaciones (2 color+2 alpha) por unidad de texturas por lo que tenemos unas 16 operaciones por ciclo.

GX C/Z (ROPS) y eFB

El búfer de imagen embebido, eFB, es una memoria de solo escritura con un ancho de banda de 7.68GB que almacena tanto el búfer trasero (color) como el búfer de profundidad (z) en su interior. Su ancho de banda da para poder escribir hasta 648 Mpixeles/seg con pixeles de 24 bits. Lo cual es paradójico desde el momento en que por la limitación del ancho de banda de la eTC solo lo pueda alcanzar haciendo uso de una sola muestra con dicha resolución.

El tamaño del búfer de imagen es de 2MB (1MB para color y 1 MB para profundidad) y esta pensado para una resolución de renderizado de 640×480 pixeles y 24 bits de memoria. El búfer de color una vez terminado es copiado en la memoria principal. El hecho de que no este el búfer frontal dentro del chip resulta un problema enorme para los efectos de post-procesado y una desventaja del hardware de GameCube respecto al de PS2 ya que:

  1. Genera el búfer trasero (color) en la eFB.
  2. Lo copia en la memoria principal.
  3. Ha de ser copiado de la memoria principal al eTC  ya que el eFB y el eTC son dos memoria fisicamente separadas en el chip.

Creo que con esto ya tenemos toda la descripción del sistema gráfico. Ya sabéis, si alguna duda a los comentarios y si me he dejado algo hacedlo saber también a través de los comentarios… Aunque…

challenger

Nintendo Wii.

Wii es una consola con un hardware derivado de GameCube.

wii

Sus especificaciones son las siguientes:

  • IBM Broadway a 729Mhz. El Broadway es el mismo chip que el Gekko pero fabricado a 90nm en vez de 180m.
  • LSI Hollywood: El sustituto del LSI Flipper, incluye la GX GPU a 243 Mhz sin cambio alguno en su arquitectura y manteniendo los 3MB de memoria embebida
  • Se mantienen los 24MB de memoria 1T-SRAM, ahora dentro no del mismo chip pero si del mismo encapsulado que el LSI.
  • La memoria A-RAM ha sido sustituida por 64MB de memoria DDR2 de 64 bits a 243Mhz.

En Wii los desarrolladores pueden escoger si utilizar los 24MB de memoria 1T-SRAM, ahora llamada MEM1, o los 64MB para los juegos. En lo que al tema gráfico se refiere la pena es que Nintendo no solventase como mínimo los problemas y limitaciones de la GX GPU de GameCube y se limitase a una versión un 50% más rápida de GCN. Es decir, si entendeis como funciona el hardware de GCN a la hora de renderizar la escena entendéis el de Wii ya que son directamente el mismo.

Ahora si, con esto doy por concluida esta entrada y como he dicho antes… Si alguna cosa a los comentarios.

Anuncios