PS2 vs DC Ultimate Version (II)

Voy a intentar poner el blog al día aunque el trabajo con este se ha ido acumulando durante los últimos días y solo he podido realizar entradas puntuales y no con la calidad que me gustaría. En realidad esta entrada no la quería hacer pero me vino a la cabeza tras leer uno de vuestros comentarios en la entrada sobre el hardware de Dreamcast, por el hecho que me olvide de explicar una cosa en la entrada original, el comentario es el siguiente:

Me acuerdo que en una epoca se vendia la placa de video kiro con chip PowerVR para pc y eran ecomicas con buen rendimiento. En esa epoca se usaba un test para hacer reviews de las placas de video que se llamava village mark, que servia para saber como rendia la placa en una esena con mucho oberdraw, en ese test siempre ganaba las PowerVR .
Con el tiempo no escuche mas de tests para oberdraw.Como trabajaran los chips actuales con el oberdraw? Saludos

Las Kyro llevaban el chip PowerVR Series 3, mientras que Dreamcast llevaba un PowerVR Series 2 por lo que las Kyro tenían un chip más avanzado, claro esta que tengo que confesar que había una cosa que con el tiempo se había borrado de mi mente que es el llamado “overdraw” y por suerte el análisis de la Kyro por parte de Beyond3D lo explica muy bien:

Las arquitecturas 3D tradicionales, como cualquiera de las Voodoo o las tarjetas de Nvidia desde Riva bata la serie GeForce, etc. Están un poco “faltas de inteligencia” en como renderizan. Cuando ellas renderizan un polígono saben el valor de profundidad (el valor Z) que tiene este en la escena, pero no tienen conocimiento de la profundidad de los polígonos que aún no les han llegado, esto significa que los polígonos que aún han de venir pueden estar por delante de los que ya han ciado pasados en el búfer de imagen, y re-escribir los valores ya previamente calculados. A este proceso de re-escribir los valores que ya han sido calculados es conocido como “overdraw”. La cantidad de overdraw en una escena es de al menos un 40%, sin embargo se dice que los juegos más complejos de hoy en día tienen un overdraw de 3.5 veces, significando que un renderizador tradicional podría este calculando y dibujando 3.5 veces más pixeles (y tirando por la borda el ancho de banda asociado haciendo estas operaciones) que lo que estos “necesitarían”.

La clave es que los Tile Renders no operan con un búfer de profundidad, el búfer de profundidad es búfer de imagen completo que a través de unos valores asigna si un objeto de la imagen esta por delante o por detrás de otro. La idea de los Tile Renderers es cargarse el backbuffer y el depth buffer y convertirlos en pequeños bloques que pueden ser operados desde una memoria interna que tiene mucho más ancho de banda que la memoria externa, una vez realizadas las operaciones correspondientes se copia el resultado en el frontbuffer para ser enviado en forma de fotograma completo. El motivo por el que Sega opto por esta solución es que el Z/Depth Buffer era una patada en el estómago por aquel entonces, la consola más potente cuando salió Dreamcast era la N64 y tenía recortes enormes en la tasa de relleno por el hecho que el Z-Buffer hace que tengas que duplicar el ancho de banda, aunque creo que esto lo explique en la primera entrada.

Pero lo que a mi me hacía rascarme la cabeza es el hecho de que Dreamcast tuviese que almacenar la geometría de la escena mientras que en otros sistemas no, pero mirando el artículo de Beyond3D que he mencionado antes queda claro que la arquitectura necesita almacenar la geometría de la escena en memoria:

Un renderizador tradicional renderizará cualquier polígono que sea enviado por la CPU/Unidad T&L (recordad que esto viene de un artículo muy viejo) independientemente de donde se encuentre en la escena; el PowerVR “Almacena” la escena poligonal en memoria, como si fuese enviada a esta y divide la escena en “Tiles”, del mismo tamaño que la cache del chip. Una vez la geometría al completo ha sido enviada para un fotograma, el chip automáticamente “clasificara” los datos geométricos en bloques/tiles, para eliminar cualquier información que este oculta, o re-dibujada y renderizar solamente lo que es visible. Durante este proceso el chip renderizará un solo tile/bloque mientras que estará ordenando el siguiente para ser renderizado.

En otro artículo de Beyond3D, se explica de forma más detallada:

Construyendo los datos de escena

El primer paso es llevado a cabo por la CPU principal. La CPU ejecuta un juego escrito en D3D o OpenGL. La salida de estos juegos esta estandarizada y se bada en triángulos. Esta salida es colocada en un búfer, el búfer de escena. Para los PowerVR este búfer es lo suficientemente grande como para contener todos los triángulos de una escena completa (un fotograma o imagen). Para un renderizador tradicional puede ser más pequeño. La construcción de la escena se hace triángulo por triángulo una vez la escena al completo es terminada. El siguiente diagrama muestra el flujo de datos:

Step1

El problema que tenía Dreamcast era la falta de memoria de video para almacenar la geometría de la escena, tened en cuenta además que el hecho de almacenar más geometría supone reducir el espacio para las texturas de la escena, un buen ejemplo de ello se ve cuando se comparamos un juego como Soul Calibur con una tasa de 1 millón de polígonos/segundo con otro como Floigan que tiene una tasa de 3.2 veces más pero con una calidad en las texturas que da verdadera grima:

nulldc_1

floigan

No me creo que el Floigan ese mueva tal cantidad de polígonos. Bueno, es lo que marca el emulador, a mi la cifra me parece 100% aceptable y tendría sentido, en DC el hecho de aumentar la geometría de la escena supone quitarle espacio para las texturas. De ahí que la compresión de texturas VQ fuese tan importante, sin ella la calidad de imagen de los juegos de DC se hubiese resentido enormemente.

Anuncios