« Arquitectura de la PlayStation (index)

Arquitectura de la PlayStation

Chapter 4: Gráficos


Tabla de contenidos

  1. Organizando el contenido
  2. Dibujando la escena
    1. Comandos
    2. Enfoque de visibilidad
    3. Rasterización
    4. Shaders
    5. Texturas
    6. Pasos finales
  3. Diseños
  4. Jugando con la VRAM
  5. Secretos y limitaciones
    1. Texturas distorsionadas
    2. Afirmaciones contradictorias
    3. Gráficos prerenderizados
  6. Salida de vídeo

Como recordatorio, una gran parte del pipeline gráfico la lleva a cabo el GTE. Esto incluye la transformación de perspectiva (que proyecta el espacio 3D sobre un plano 2D usando la perspectiva de la cámara) y la iluminación. Los datos procesados se envían a la Graphics Processor Unit (GPU) de Sony para su renderizado.

Organizando el contenido

El sistema cuenta con 1 MB de Video RAM (VRAM) destinada a almacenar el frame buffer, las texturas y demás recursos que la GPU necesitará para renderizar la escena. La CPU puede rellenar esta área mediante DMA.

El chip instalado (VRAM) es de doble puerto, como el de la Virtual Boy. La VRAM utiliza dos buses de 16 bits, lo que permite el acceso simultáneo por parte de la CPU, el DMA, la GPU y el codificador de vídeo.

Image
Distribución de la memoria con VRAM.

Image
Distribución de la memoria con SGRAM.

No obstante, en revisiones posteriores de esta consola, Sony cambió a chips Synchronous Graphics RAM (SGRAM) (la alternativa de puerto único, con un bus de datos individual de 32 bits). ¡Buu!... Bueno, siendo justos, cada opción tiene sus ventajas e inconvenientes.

Lo cierto es que, debido a diferencias de temporización, algunos juegos posteriores (como Jet Moto 3) muestran gráficos con fallos al ejecutarse en sistemas basados en VRAM. Si quieres conocer los detalles, las 'Nocash PSX Specifications' de Martin Korth documentan las distintas temporizaciones y demás .

Dibujando la escena

Si has leído el artículo de la Sega Saturn, cabe decirte que el diseño de esta GPU es mucho más sencillo. Para empezar, la GPU se compone de un único chip.

Image
El chipset gráfico en mi revisión de la placa base: la GPU (derecha), 1 MB de SGRAM (arriba a la izquierda) y el DAC de vídeo (abajo a la izquierda).

Para mostrar cómo se dibuja una escena, utilizaré principalmente Spyro: Year of the Dragon, de Insomniac, como ejemplo.

Comandos

Image
Pipeline básico de comandos de la GPU.

Para empezar, la CPU envía datos de geometría (vértices) a la GPU rellenando su buffer FIFO interno de 64 bytes con comandos (hasta tres). Estos comandos pueden solicitar a la GPU que renderice algo, cambie una configuración o manipule la VRAM.

En esencia, un comando de renderizado especifica cómo y dónde dibujar una primitiva. La GPU puede dibujar líneas, rectángulos y triángulos de forma individual —siendo estos últimos el ingrediente fundamental para construir modelos 3D complejos—.

Una vez recibida la geometría, se aplica el clipping para omitir operaciones sobre polígonos no visibles (que se encuentran fuera del viewport de la cámara).

La posición de cada primitiva se define mediante un sistema de coordenadas X/Y que se mapea directamente sobre el frame buffer. La GPU de la PS1 emplea un modelo de coordenadas enteras, en el que cada coordenada corresponde al punto central de un píxel (denominado punto de muestreo o sampling point). En otras palabras, no existen coordenadas fraccionarias.

Enfoque de visibilidad

Image
Crash Bandicoot (1996) empleó geometría preordenada para ganar rendimiento . En consecuencia, su cámara solo se desplaza hacia delante o hacia atrás.

Al igual que la competencia, la PS1 no incluye ninguna función de hardware que aborde el problema de la visibilidad. Sin embargo, la GPU gestiona los polígonos ordenados mediante una tabla de ordenación: una estructura dedicada en la que cada entrada se indexa por un valor de profundidad (también llamado 'valor Z') y contiene la dirección donde reside el comando de GPU correspondiente .

La CPU debe ordenar manualmente los polígonos y luego colocar referencias en las entradas correspondientes de la tabla. A continuación, la CPU ordena al DMA que envíe la tabla a la GPU. Este proceso permite a la GPU renderizar la geometría en el orden correcto.

También se proporcionan varias funciones DMA para ayudar tanto a la CPU como a la GPU en la creación y recorrido de esta tabla.

Rasterización

Image
Vista en wireframe de la escena.

Una vez que la GPU decodifica los comandos, llega el momento de convertir la geometría recibida (vértices) en píxeles. Esto permite al sistema aplicar mapeado de texturas y efectos, para finalmente mostrar el resultado en un panel bidimensional (como tu televisor o monitor). Para ello, la GPU reserva una matriz de píxeles como área de trabajo: esto se denomina frame buffer. En comparación con la más compleja Sega Saturn, la GPU solo necesita un único frame buffer.

La rasterizadora es la unidad encargada de convertir vectores en líneas, triángulos o rectángulos —y finalmente en píxeles—. El proceso difiere drásticamente según la primitiva solicitada :

En el caso del triángulo, que es la única primitiva texturizable, la rasterizadora:

  1. Toma cada uno de los tres vértices y calcula las aristas, formando un triángulo.
  2. Analiza el área del triángulo para determinar qué píxeles del frame buffer ocupa. Solo la porción del polígono que cubre los puntos de muestreo se convierte en píxeles.

Los píxeles generados no se escriben directamente en el frame buffer. En su lugar, se pasan a las etapas siguientes del pipeline para un procesamiento adicional, algo que explico en los párrafos siguientes.

Shaders

Image
El sombreado Gouraud en acción.

Para aplicar efectos de iluminación a triángulos o líneas, la GPU ofrece dos algoritmos:

La razón de ofrecer esta elección es el rendimiento: el sombreado plano rellena aproximadamente 2,5 veces más polígonos por segundo que el sombreado Gouraud. Por eso es importante optimizar qué polígonos se benefician realmente de una iluminación más realista.

Texturas

Image
Texturas aplicadas (¡Tachán!).

Las superficies de los triángulos también pueden mezclarse con texturas (mapas de bits 2D) para producir el resultado final.

La GPU realiza un mapeado inverso de texturas: recorre cada píxel rasterizado y busca su píxel correspondiente en el mapa de texturas (denominado texel). Los texels se calculan interpolando linealmente el mapa de texturas (ubicado en la VRAM) para adaptarlo a la forma del polígono. La rutina de interpolación se llama Affine Texture Mapping, y opera únicamente con coordenadas 2D (valores X e Y), descartando la tercera coordenada (Z o 'profundidad') que de otro modo daría cuenta de la perspectiva.

Como los mapas de texturas rara vez coinciden con las dimensiones exactas de los polígonos rasterizados, suele aparecer aliasing (resultados de renderizado incorrectos). Esto se manifiesta como distorsiones no deseadas, como texels ausentes o sobredimensionados. Para remediarlo, las GPU más sofisticadas emplean filtrado de texturas para suavizar (interpolar) los cambios bruscos de color. La GPU de la PS1 no implementa ningún filtro, por lo que recurre a un algoritmo conocido como vecino más cercano (nearest neighbour) para corregir las escalas sin suavizar los resultados. Esto es muy rápido y barato, pero también explica por qué los modelos texturizados pueden verse 'pixelados'.

La GPU también admite los siguientes efectos, disponibles para los triángulos:

Cabe señalar que la PS1 destacaba especialmente en estos efectos.

Pasos finales

Una vez finalizado el proceso, la GPU escribe los píxeles en el área del frame buffer de la VRAM, donde los recoge el codificador de vídeo para mostrarlos en pantalla.

Diseños

Dejemos a un lado la teoría por un momento. Aquí tienes algunos ejemplos de personajes diseñados específicamente para la era 3D. Obsérvese el uso de triángulos y texturas con el algoritmo de vecino más cercano. Te animo a compararlos con los modelos que aparecen en otros artículos.

3D model 3D model 3D model
Modelo interactivo disponible en la edición moderna
Spyro the Dragon (1998).
413 triángulos.

3D model 3D model 3D model
Modelo interactivo disponible en la edición moderna
Crash Bandicoot (1996).
732 triángulos.

Jugando con la VRAM

Teniendo en cuenta la cantidad de VRAM disponible (todo un megabyte), se podría reservar un frame buffer enorme de 1024×512 píxeles con colores de 16 bits, o uno realista de 960×512 píxeles con 24 bits —lo que permitiría dibujar algunos de los frames más impresionantes vistos en los videojuegos—. Suena bastante impresionante, ¿verdad? Bien, esto plantea algunos problemas:

Bien, usemos entonces un buffer de 640×480 con 16 bits de color, lo que deja 424 KB de VRAM para los materiales. ¿Todo bien hasta ahora? De nuevo, esa resolución puede verse bien en monitores CRT, pero no resulta especialmente apreciable en los televisores de los 90 que todo el mundo tenía en casa. ¿Hay alguna manera de optimizar el frame buffer? Aquí entran los frame buffers ajustables.

Image
Visualización de la VRAM en el depurador NO$PSX. Se aprecia el doble frame buffer junto a las texturas. Estas últimas se traducen mediante una tabla de correspondencia de colores, también almacenada allí.

En esencia, en lugar de desperdiciar VRAM en resoluciones 'poco apreciadas', la GPU de esta consola permite reducir las dimensiones del frame buffer para ampliar de hecho el espacio disponible para otros recursos. En una demostración de 'Gears Episode 2' , Halkun muestra una configuración que divide el frame buffer de 640×480 en dos de 320×480, empleando una técnica denominada page flipping para renderizar varias escenas al mismo tiempo.

El page flipping consiste en alternar la ubicación del frame que se muestra entre dos buffers según se necesite, lo que permite al juego renderizar una escena mientras muestra otra. Así se oculta cualquier efecto de parpadeo y se mejoran los tiempos de carga (algo que el jugador sin duda agradecerá).

En conjunto, la distribución de Halkun consume apenas 600 KB de VRAM. Los 424 KB restantes pueden utilizarse para almacenar tablas de correspondencia de colores y texturas que, junto con los 2 KB de caché de texturas disponible, dan lugar a una configuración muy práctica y eficiente.

Por último, también vale la pena mencionar que la VRAM puede mapearse con múltiples profundidades de color simultáneamente, lo que significa que los programadores pueden reservar un frame buffer de 16 bpp junto a mapas de bits de 24 bpp (usados habitualmente por los frames de FMV, por ejemplo). Esto ofrece otra vía de optimización del espacio.

Secretos y limitaciones

Aunque la PS1 contaba con una arquitectura sencilla y adecuada, no estaba exenta de problemas. Sorprendentemente, algunos de ellos se abordaron con soluciones ingeniosas.

Texturas distorsionadas

Video
Video - Final Fantasy VIII (1999), de Square Soft. Como es habitual en los juegos de PS1, las texturas tiemblan ligeramente cuando se mueven.

Las rutinas empleadas para gestionar la geometría y aplicar texturas presentan ciertas imprecisiones.

En primer lugar, la rasterizadora solo trabaja con unidades de píxel enteras: aunque las coordenadas de los vértices se expresan como enteros, las aristas calculadas de los triángulos pueden ocupar solo una fracción de un píxel. Sin embargo, la rasterizadora solo dibujará el píxel si el área del triángulo cubre el punto de muestreo del píxel, y no lleva un registro de la fracción ocupada . Esto genera algunos problemas:

Esto se suele resolver implementando resolución sub-píxel, que permite a la rasterizadora rastrear las fracciones de píxel ocupadas por cada área triangular . En consecuencia, se pueden aplicar técnicas de antialiasing para suavizar los bordes dentados o los cambios bruscos de color.

Por otro lado, la tabla de ordenación hace recaer sobre el desarrollador o el programa la responsabilidad de mostrar la geometría en el orden correcto. En algunos casos, los cálculos subyacentes recurren a aproximaciones excesivas para ganar rendimiento. Esto puede dar lugar a parpadeos o superficies ocluidas que deberían haberse mostrado.

Además, utilizar un frame buffer de baja resolución puede amplificar todos estos problemas de aliasing.

Por último, como ya sabemos, las transformaciones afines carecen de toda noción de profundidad. Esto puede confundir la percepción del usuario, especialmente cuando la cámara se sitúa cerca del modelo y perpendicular a la línea de visión del espectador . Esta anomalía se conoce como texture warping. Por ello, algunos juegos recurrieron a la teselación (dividir polígonos grandes en otros más pequeños) para reducir la distorsión, mientras que otros optaron por sustituir las texturas por colores sólidos. En general, una GPU resuelve este problema implementando corrección de perspectiva, que interpola las texturas utilizando el valor de profundidad.

Afirmaciones contradictorias

Si consultas otros canales técnicos o foros, encontrarás explicaciones alternativas sobre los efectos de vibración, distorsión y deformación de la PS1. Aunque algunas coinciden con mis explicaciones anteriores, otras difieren. Por eso me gustaría ofrecer mi punto de vista sobre por qué las siguientes afirmaciones son incorrectas:

Los modelos y las texturas vibran por falta de FPU

Una FPU no determina si un sistema puede operar con números fraccionarios. La PS1, como cualquier otro ordenador sin FPU de hardware, puede realizar aritmética de punto fijo. Además, los números en punto flotante también pueden calcularse (aunque más lentamente) mediante software. En esencia, las FPU son aceleradores: no las confundas con el concepto de números decimales ni con una ALU (la parte crítica de una CPU responsable de las operaciones aritméticas).

Los modelos y las texturas vibran por el sistema de coordenadas enteras de la GPU

Emplear coordenadas enteras es un enfoque habitual para abaratar los cálculos en la GPU. Lo que convierte esto en un problema visible es la falta de resolución sub-píxel, ya que el antialiasing puede aplicarse para suavizar los cambios bruscos de color, siempre que la rasterizadora rastree la fracción de píxel ocupada por el triángulo.

Las texturas se deforman por falta de mip-mapping

Las GPU que implementan mapeado inverso de texturas, como esta, están sujetas a un error de medición conocido como 'submuestreo' (un píxel se mapea sobre múltiples texels). Esto produce aliasing (resultados incorrectos). El comportamiento es apreciable al renderizar geometría alejada de la cámara. Para remediarlo, los mapeadores de texturas modernos aplican 'filtrado trilineal', que suaviza los texels usando la misma textura almacenada a distintas escalas (mipmaps) e interpola entre ellas. En resumen, el mip-mapping es un método para reducir el aliasing. Es el Affine Texture Mapping (con su falta de corrección de perspectiva) el que interpola las texturas en superficies de tres puntos sin tener en cuenta la profundidad, produciendo el efecto de 'deformación'.

Los modelos y las texturas parpadean por falta de Z-buffer

Una GPU equipada con Z-buffer resuelve el problema de la determinación de superficies visibles a nivel de hardware. En cambio, la PS1 depende de una tabla de ordenación, lo que significa que los desarrolladores son los responsables de determinar qué geometría está delante de otra. En resumen, el parpadeo de los triángulos es consecuencia de las rutinas de ordenación (software).

Gráficos prerenderizados

Image
Final Fantasy VII (1997), de Square Soft, presenta numerosas escenas con fondos prerenderizados. La interacción y el movimiento de los modelos 3D son clave para engañar la percepción del espectador.

Destacamos ahora una característica positiva, para variar...

Cuando un juego aspiraba a escenarios más realistas de lo que la GPU podía ofrecer en tiempo real, una opción disponible era apilar dos triángulos y usar el Motion Decoder para reproducir cinemáticas prerenderizadas sobre ellos. Las secuencias FMV requerían mucho espacio de almacenamiento, pero por suerte el CD-ROM estaba bien preparado para ello.

Algunos títulos se valieron de esta técnica para componer fondos y, sinceramente, el resultado era bastante convincente en un televisor CRT. Por supuesto, los emuladores modernos con capacidades de escalado lo delatan enseguida.

Salida de vídeo

Image
Cuatro revisiones diferentes de la PlayStation 1 apiladas ; obsérvese la reducción de puertos a lo largo de los años. De abajo a arriba: SCPH-1000 (1994), SCPH-3000 (1995), SCPH-5501 (1996) y SCPH-9001 (1999).

La primera revisión de esta consola ofrece una sorprendentemente amplia variedad de señales de vídeo, accesibles a través de los siguientes puertos:

En revisiones posteriores, la mayoría de estos puertos fueron eliminados, dejando únicamente el 'AV Multi Out' en los modelos tardíos.


Previous: 3. CPU

Next: 5. Audio


Rodrigo Copetti © 2026 RSS Feed

Ir a la edición moderna

Inicio · Escritos · Soporte · Acerca del autor · Acerca del sitio web